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) {