diff --git a/src/plugins/ios/devicectlutils.cpp b/src/plugins/ios/devicectlutils.cpp index 7bbed859b27..667f1bc54a9 100644 --- a/src/plugins/ios/devicectlutils.cpp +++ b/src/plugins/ios/devicectlutils.cpp @@ -73,6 +73,7 @@ expected_str> parseDeviceInfo(const QByteArray &rawOutput info[kOsVersion] = QLatin1String("%1 (%2)") .arg(device["deviceProperties"]["osVersionNumber"].toString(), device["deviceProperties"]["osBuildUpdate"].toString()); + info[kProductType] = device["hardwareProperties"]["productType"].toString(); info[kCpuArchitecture] = device["hardwareProperties"]["cpuType"]["name"].toString(); info[kUniqueDeviceId] = udid; return info; diff --git a/src/plugins/ios/devicectlutils.h b/src/plugins/ios/devicectlutils.h index 106fee78a23..cb470cff29a 100644 --- a/src/plugins/ios/devicectlutils.h +++ b/src/plugins/ios/devicectlutils.h @@ -13,6 +13,7 @@ const char kDeviceName[] = "deviceName"; const char kDeveloperStatus[] = "developerStatus"; const char kDeviceConnected[] = "deviceConnected"; const char kOsVersion[] = "osVersion"; +const char kProductType[] = "productType"; const char kCpuArchitecture[] = "cpuArchitecture"; const char kUniqueDeviceId[] = "uniqueDeviceId"; const char vOff[] = "*off*"; diff --git a/src/plugins/ios/iosdevice.cpp b/src/plugins/ios/iosdevice.cpp index e81c263672b..0dd75896e06 100644 --- a/src/plugins/ios/iosdevice.cpp +++ b/src/plugins/ios/iosdevice.cpp @@ -92,8 +92,9 @@ public: Form { Tr::tr("Device name:"), iosDevice->deviceName(), br, Tr::tr("Identifier:"), iosDevice->uniqueInternalDeviceId(), br, + Tr::tr("Product type:"), iosDevice->productType(), br, + Tr::tr("CPU Architecture:"), iosDevice->cpuArchitecture(), br, Tr::tr("OS Version:"), iosDevice->osVersion(), br, - Tr::tr("CPU Architecture:"), iosDevice->cpuArchitecture(), noMargin }.attachTo(this); // clang-format on @@ -193,6 +194,11 @@ QString IosDevice::osVersion() const return m_extraInfo.value(kOsVersion); } +QString IosDevice::productType() const +{ + return m_extraInfo.value(kProductType); +} + QString IosDevice::cpuArchitecture() const { return m_extraInfo.value(kCpuArchitecture); @@ -227,6 +233,7 @@ IosDeviceManager::TranslationMap IosDeviceManager::translationMap() tMap[QLatin1String("NO")] = Tr::tr("no"); tMap[QLatin1String("*unknown*")] = Tr::tr("unknown"); tMap[kOsVersion] = Tr::tr("OS version"); + tMap[kProductType] = Tr::tr("Product type"); translationMap = &tMap; return tMap; } diff --git a/src/plugins/ios/iosdevice.h b/src/plugins/ios/iosdevice.h index 62a7f2bb93a..b8ec2871347 100644 --- a/src/plugins/ios/iosdevice.h +++ b/src/plugins/ios/iosdevice.h @@ -37,6 +37,7 @@ public: QString uniqueDeviceID() const; QString uniqueInternalDeviceId() const; QString osVersion() const; + QString productType() const; QString cpuArchitecture() const; Utils::Port nextPort() const; Handler handler() const; diff --git a/src/plugins/ios/iosrunner.cpp b/src/plugins/ios/iosrunner.cpp index 863a2867b8a..1d4bd33aa11 100644 --- a/src/plugins/ios/iosrunner.cpp +++ b/src/plugins/ios/iosrunner.cpp @@ -813,14 +813,17 @@ void IosDebugSupport::start() setStartMode(AttachToRemoteProcess); setIosPlatform("remote-ios"); const QString osVersion = dev->osVersion(); + const QString productType = dev->productType(); const QString cpuArchitecture = dev->cpuArchitecture(); - const FilePaths symbolsPathCandidates = { - FilePath::fromString(QDir::homePath() + "/Library/Developer/Xcode/iOS DeviceSupport/" - + osVersion + " " + cpuArchitecture + "/Symbols"), - FilePath::fromString(QDir::homePath() + "/Library/Developer/Xcode/iOS DeviceSupport/" - + osVersion + "/Symbols"), - IosConfigurations::developerPath().pathAppended( - "Platforms/iPhoneOS.platform/DeviceSupport/" + osVersion + "/Symbols")}; + const FilePath home = FilePath::fromString(QDir::homePath()); + const FilePaths symbolsPathCandidates + = {home / "Library/Developer/Xcode/iOS DeviceSupport" / (productType + " " + osVersion) + / "Symbols", + home / "Library/Developer/Xcode/iOS DeviceSupport" + / (osVersion + " " + cpuArchitecture) / "Symbols", + home / "Library/Developer/Xcode/iOS DeviceSupport" / osVersion / "Symbols", + IosConfigurations::developerPath() / "Platforms/iPhoneOS.platform/DeviceSupport" + / osVersion / "Symbols"}; const FilePath deviceSdk = Utils::findOrDefault(symbolsPathCandidates, &FilePath::isDir); if (deviceSdk.isEmpty()) { diff --git a/src/tools/iostool/iosdevicemanager.cpp b/src/tools/iostool/iosdevicemanager.cpp index d492e6f78dc..3f523807857 100644 --- a/src/tools/iostool/iosdevicemanager.cpp +++ b/src/tools/iostool/iosdevicemanager.cpp @@ -1662,6 +1662,7 @@ void DevInfoSession::deviceCallbackReturned() const QString osVersionKey = "osVersion"; const QString cpuArchitectureKey = "cpuArchitecture"; const QString uniqueDeviceId = "uniqueDeviceId"; + const QString productType = "productType"; bool failure = !device; if (!failure) { failure = !connectDevice(); @@ -1669,6 +1670,7 @@ void DevInfoSession::deviceCallbackReturned() res[deviceConnectedKey] = QLatin1String("YES"); res[deviceNameKey] = getStringValue(device, nullptr, CFSTR("DeviceName")); res[uniqueDeviceId] = getStringValue(device, nullptr, CFSTR("UniqueDeviceID")); + res[productType] = getStringValue(device, nullptr, CFSTR("ProductType")); const QString productVersion = getStringValue(device, nullptr, CFSTR("ProductVersion")); res[developerStatusKey] = getStringValue(device, CFSTR("com.apple.xcode.developerdomain"), diff --git a/tests/auto/ios/devicectlutils/tst_devicectlutils.cpp b/tests/auto/ios/devicectlutils/tst_devicectlutils.cpp index f75497f68a3..8924c58a867 100644 --- a/tests/auto/ios/devicectlutils/tst_devicectlutils.cpp +++ b/tests/auto/ios/devicectlutils/tst_devicectlutils.cpp @@ -287,6 +287,7 @@ void tst_Devicectlutils::parseDeviceInfo_data() {"deviceConnected", "YES"}, {"deviceName", "Some iOS device"}, {"osVersion", "17.3 (21D50)"}, + {"productType", "iPad11,2"}, {"uniqueDeviceId", "00000000-0000000000000000"}}); QTest::addRow("unhandled device") << data << QString("000000000000000000000001")