aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/ios
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2020-01-20 09:59:27 +0100
committerEike Ziller <eike.ziller@qt.io>2020-01-20 09:59:27 +0100
commitbd5dae90ad30d92fdff76da0caef7c5824b42707 (patch)
tree44ccd0ba09460e3df4bce5f7b0ff2e0cbd7d03e2 /src/plugins/ios
parent487df597f34b0e4ac3c847e18c57820adc20c7d3 (diff)
parent07544d4e0721e1ddbed3d310e6d250333c2b1fb5 (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.cpp43
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