diff options
author | Eike Ziller <eike.ziller@qt.io> | 2020-01-20 09:59:27 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2020-01-20 09:59:27 +0100 |
commit | bd5dae90ad30d92fdff76da0caef7c5824b42707 (patch) | |
tree | 44ccd0ba09460e3df4bce5f7b0ff2e0cbd7d03e2 /src/plugins/ios | |
parent | 487df597f34b0e4ac3c847e18c57820adc20c7d3 (diff) | |
parent | 07544d4e0721e1ddbed3d310e6d250333c2b1fb5 (diff) |
Merge remote-tracking branch 'origin/4.11'
Conflicts:
share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
Change-Id: I5e424e34db619bb769c7abc1e8651b7b40210839
Diffstat (limited to 'src/plugins/ios')
-rw-r--r-- | src/plugins/ios/iosdevice.cpp | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/src/plugins/ios/iosdevice.cpp b/src/plugins/ios/iosdevice.cpp index 38d48e25ed..a9c9e32162 100644 --- a/src/plugins/ios/iosdevice.cpp +++ b/src/plugins/ios/iosdevice.cpp @@ -42,6 +42,16 @@ #include <IOKit/IOKitLib.h> #include <IOKit/usb/IOUSBLib.h> #include <CoreFoundation/CoreFoundation.h> + +// Work around issue with not being able to retrieve USB serial number. +// See QTCREATORBUG-23460. +// For an unclear reason USBSpec.h in macOS SDK 10.15 uses a different value if +// MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_14, which just does not work. +#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_14 +#undef kUSBSerialNumberString +#define kUSBSerialNumberString "USB Serial Number" +#endif + #endif #include <exception> @@ -356,9 +366,14 @@ void deviceConnectedCallback(void *refCon, io_iterator_t iterator) usbDevice, CFSTR(kUSBSerialNumberString), kCFAllocatorDefault, 0)); - QString uid = CFStringRef2QString(cfUid); - CFRelease(cfUid); - IosDeviceManager::instance()->deviceConnected(uid, name); + if (cfUid) { + QString uid = CFStringRef2QString(cfUid); + CFRelease(cfUid); + qCDebug(detectLog) << "device UID is" << uid; + IosDeviceManager::instance()->deviceConnected(uid, name); + } else { + qCDebug(detectLog) << "failed to retrieve device's UID"; + } // Done with this USB device; release the reference added by IOIteratorNext kr = IOObjectRelease(usbDevice); @@ -385,18 +400,22 @@ void deviceDisconnectedCallback(void *refCon, io_iterator_t iterator) // Get the USB device's name. kr = IORegistryEntryGetName(usbDevice, deviceName); - if (KERN_SUCCESS != kr) - deviceName[0] = '\0'; - qCDebug(detectLog) << "ios device " << deviceName << " in deviceDisconnectedCallback"; - - { - CFStringRef cfUid = static_cast<CFStringRef>(IORegistryEntryCreateCFProperty( - usbDevice, - CFSTR(kUSBSerialNumberString), - kCFAllocatorDefault, 0)); + QString name; + if (KERN_SUCCESS == kr) + name = QString::fromLocal8Bit(deviceName); + qCDebug(detectLog) << "ios device " << name << " in deviceDisconnectedCallback"; + + CFStringRef cfUid = static_cast<CFStringRef>( + IORegistryEntryCreateCFProperty(usbDevice, + CFSTR(kUSBSerialNumberString), + kCFAllocatorDefault, + 0)); + if (cfUid) { QString uid = CFStringRef2QString(cfUid); CFRelease(cfUid); IosDeviceManager::instance()->deviceDisconnected(uid); + } else { + qCDebug(detectLog) << "failed to retrieve device's UID"; } // Done with this USB device; release the reference added by IOIteratorNext |