diff options
author | Jake Petroules <jake.petroules@qt.io> | 2017-10-01 10:41:17 -0700 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2017-10-04 22:09:21 +0000 |
commit | 9da83423b884ff7f1da43b17c94fe0612f39d204 (patch) | |
tree | 5674db2f82dea72a9a56de4096dce48573e1f742 /src/lib/corelib/api/runenvironment.cpp | |
parent | 9d1a039f674417add84105dd75b58a1151ce450b (diff) |
Add support for running iOS and tvOS apps on the simulator
Change-Id: I85e726b6c6508138ec6eb7547307514d9754c960
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/lib/corelib/api/runenvironment.cpp')
-rw-r--r-- | src/lib/corelib/api/runenvironment.cpp | 75 |
1 files changed, 54 insertions, 21 deletions
diff --git a/src/lib/corelib/api/runenvironment.cpp b/src/lib/corelib/api/runenvironment.cpp index 16c188442..dd5a80148 100644 --- a/src/lib/corelib/api/runenvironment.cpp +++ b/src/lib/corelib/api/runenvironment.cpp @@ -288,28 +288,61 @@ int RunEnvironment::doRunTarget(const QString &targetBin, const QStringList &arg } else if (targetOS.contains(QLatin1String("ios")) || targetOS.contains(QLatin1String("tvos"))) { const QString bundlePath = targetBin + QLatin1String("/.."); - if (QFileInfo(targetExecutable = findExecutable(QStringList() - << QStringLiteral("iostool"))).isExecutable()) { - targetArguments = QStringList() - << QStringLiteral("-run") - << QStringLiteral("-bundle") - << QDir::cleanPath(bundlePath); - if (!arguments.isEmpty()) - targetArguments << QStringLiteral("-extra-args") << arguments; - } else if (QFileInfo(targetExecutable = findExecutable(QStringList() - << QStringLiteral("ios-deploy"))).isExecutable()) { - targetArguments = QStringList() - << QStringLiteral("--no-wifi") - << QStringLiteral("--noninteractive") - << QStringLiteral("--bundle") - << QDir::cleanPath(bundlePath); - if (!arguments.isEmpty()) - targetArguments << QStringLiteral("--args") << arguments; + if (targetOS.contains(QStringLiteral("ios-simulator")) + || targetOS.contains(QStringLiteral("tvos-simulator"))) { + const auto developerDir = d->resolvedProduct->moduleProperties->moduleProperty( + QStringLiteral("xcode"), QStringLiteral("developerPath")).toString(); + targetExecutable = developerDir + QStringLiteral("/usr/bin/simctl"); + const auto simulatorId = QStringLiteral("booted"); // TODO: parameterize + const auto bundleId = d->resolvedProduct->moduleProperties->moduleProperty( + QStringLiteral("bundle"), QStringLiteral("identifier")).toString(); + + QProcess process; + process.setProcessChannelMode(QProcess::ForwardedChannels); + process.start(targetExecutable, QStringList() + << QStringLiteral("install") + << simulatorId + << QDir::cleanPath(bundlePath)); + if (!process.waitForFinished()) { + if (process.error() == QProcess::FailedToStart) { + throw ErrorInfo(Tr::tr("The process '%1' could not be started: %2") + .arg(targetExecutable) + .arg(process.errorString())); + } + + return EXIT_FAILURE; + } + + targetArguments << QStringList() + << QStringLiteral("launch") + << QStringLiteral("--console") + << simulatorId + << bundleId + << arguments; } else { - d->logger.qbsLog(LoggerError) - << Tr::tr("No suitable deployment tools were found in the environment. " - "Consider installing ios-deploy."); - return EXIT_FAILURE; + if (QFileInfo(targetExecutable = findExecutable(QStringList() + << QStringLiteral("iostool"))).isExecutable()) { + targetArguments = QStringList() + << QStringLiteral("-run") + << QStringLiteral("-bundle") + << QDir::cleanPath(bundlePath); + if (!arguments.isEmpty()) + targetArguments << QStringLiteral("-extra-args") << arguments; + } else if (QFileInfo(targetExecutable = findExecutable(QStringList() + << QStringLiteral("ios-deploy"))).isExecutable()) { + targetArguments = QStringList() + << QStringLiteral("--no-wifi") + << QStringLiteral("--noninteractive") + << QStringLiteral("--bundle") + << QDir::cleanPath(bundlePath); + if (!arguments.isEmpty()) + targetArguments << QStringLiteral("--args") << arguments; + } else { + d->logger.qbsLog(LoggerError) + << Tr::tr("No suitable deployment tools were found in the environment. " + "Consider installing ios-deploy."); + return EXIT_FAILURE; + } } } else if (targetOS.contains(QLatin1String("windows"))) { if (completeSuffix == QLatin1String("msi")) { |