aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/ios
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2019-08-09 11:04:51 +0200
committerEike Ziller <eike.ziller@qt.io>2019-08-09 11:08:26 +0000
commitbabbb0a9dbae053b50493b4ed18c3134f291c675 (patch)
tree0318f2b309bdd30fadbe52cc97cd1a9977a673bf /src/plugins/ios
parentbc5e7639614c6abc7c1c439a6e71ceaa4d40e938 (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.cpp15
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);
}