Start and connect a session prior to downloading device symbols over wifi (#555)
Start and connect a session prior to downloading device symbols over wifi because fetching the device class (needed to determine the exact dsc_extractor.bundle to use) over wifi requires a session.
diff --git a/src/ios-deploy/ios-deploy.m b/src/ios-deploy/ios-deploy.m
index 008ebd4..7c281ee 100644
--- a/src/ios-deploy/ios-deploy.m
+++ b/src/ios-deploy/ios-deploy.m
@@ -456,6 +456,10 @@
return res;
}
+bool is_usb_device(const AMDeviceRef device) {
+ return AMDeviceGetInterfaceType(device) == 1;
+}
+
void connect_and_start_session(AMDeviceRef device) {
AMDeviceConnect(device);
assert(AMDeviceIsPaired(device));
@@ -528,7 +532,7 @@
NSDictionary* get_device_json_dict(const AMDeviceRef device) {
NSMutableDictionary *json_dict = [NSMutableDictionary new];
- connect_and_start_session(device);
+ is_usb_device(device) ? AMDeviceConnect(device) : connect_and_start_session(device);
CFStringRef device_udid = AMDeviceCopyDeviceIdentifier(device);
if (device_udid) {
@@ -2422,9 +2426,12 @@
CFStringRef create_dsc_bundle_path_for_device(AMDeviceRef device) {
CFStringRef xcode_dev_path = copy_xcode_dev_path();
- AMDeviceConnect(device);
+ is_usb_device(device) ? AMDeviceConnect(device) : connect_and_start_session(device);
CFStringRef device_class = AMDeviceCopyValue(device, 0, CFSTR("DeviceClass"));
AMDeviceDisconnect(device);
+ if (!device_class) {
+ on_error(@"Failed to determine device class");
+ }
CFStringRef platform_name;
if (CFStringCompare(CFSTR("AppleTV"), device_class, 0) == kCFCompareEqualTo) {