diff options
author | Eike Ziller <eike.ziller@qt.io> | 2019-08-09 11:04:51 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2019-08-09 11:08:26 +0000 |
commit | babbb0a9dbae053b50493b4ed18c3134f291c675 (patch) | |
tree | 0318f2b309bdd30fadbe52cc97cd1a9977a673bf /src/plugins/ios | |
parent | bc5e7639614c6abc7c1c439a6e71ceaa4d40e938 (diff) |
iOS: Fix simulator listing with Xcode 11
Xcode 11 changes the output of simctl slightly. At some point it
introduced a bool "isAvailable" in addition to the string
"availability". Now the latter has been removed.
To avoid listing all devices as available, we need to adapt our simctl
output parsing.
This already takes effect when installing Xcode 11 Beta, even when not
actually using it, since all Xcode versions share the simulator
infrastructure.
Fixes: QTCREATORBUG-22757
Change-Id: I1ef416f6c544db53d9ee99ccc3b0a2e97dfcc870
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/ios')
-rw-r--r-- | src/plugins/ios/simulatorcontrol.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/plugins/ios/simulatorcontrol.cpp b/src/plugins/ios/simulatorcontrol.cpp index baecf63a9ca..1e22e3a2181 100644 --- a/src/plugins/ios/simulatorcontrol.cpp +++ b/src/plugins/ios/simulatorcontrol.cpp @@ -60,6 +60,7 @@ const char deviceTypeTag[] = "devicetypes"; const char devicesTag[] = "devices"; const char availabilityTag[] = "availability"; const char unavailabilityToken[] = "unavailable"; +const char availabilityTagNew[] = "isAvailable"; // at least since Xcode 10 const char identifierTag[] = "identifier"; const char runtimesTag[] = "runtimes"; const char nameTag[] = "name"; @@ -116,6 +117,13 @@ static bool launchSimulator(const QString &simUdid) { return QProcess::startDetached(simulatorAppPath, {"--args", "-CurrentDeviceUDID", simUdid}); } +static bool isAvailable(const QJsonObject &object) +{ + return object.contains(availabilityTagNew) + ? object.value(availabilityTagNew).toBool() + : !object.value(availabilityTag).toString().contains(unavailabilityToken); +} + static QList<DeviceTypeInfo> getAvailableDeviceTypes() { QList<DeviceTypeInfo> deviceTypes; @@ -126,7 +134,7 @@ static QList<DeviceTypeInfo> getAvailableDeviceTypes() const QJsonArray runtimesArray = doc.object().value(deviceTypeTag).toArray(); foreach (const QJsonValue deviceTypeValue, runtimesArray) { QJsonObject deviceTypeObject = deviceTypeValue.toObject(); - if (!deviceTypeObject.value(availabilityTag).toString().contains(unavailabilityToken)) { + if (isAvailable(deviceTypeObject)) { DeviceTypeInfo deviceType; deviceType.name = deviceTypeObject.value(nameTag).toString("unknown"); deviceType.identifier = deviceTypeObject.value(identifierTag).toString("unknown"); @@ -150,7 +158,7 @@ static QList<RuntimeInfo> getAvailableRuntimes() const QJsonArray runtimesArray = doc.object().value(runtimesTag).toArray(); foreach (const QJsonValue runtimeValue, runtimesArray) { QJsonObject runtimeObject = runtimeValue.toObject(); - if (!runtimeObject.value(availabilityTag).toString().contains(unavailabilityToken)) { + if (isAvailable(runtimeObject)) { RuntimeInfo runtime; runtime.name = runtimeObject.value(nameTag).toString("unknown"); runtime.build = runtimeObject.value(buildVersionTag).toString("unknown"); @@ -232,8 +240,7 @@ static QList<SimulatorInfo> getAllSimulatorDevices() device.identifier = deviceObject.value(udidTag).toString(); device.name = deviceObject.value(nameTag).toString(); device.runtimeName = runtime; - const QString availableStr = deviceObject.value(availabilityTag).toString(); - device.available = !availableStr.contains(unavailabilityToken); + device.available = isAvailable(deviceObject); device.state = deviceObject.value(stateTag).toString(); simulatorDevices.append(device); } |