aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/api/runenvironment.cpp
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2017-10-01 10:41:17 -0700
committerJake Petroules <jake.petroules@qt.io>2017-10-04 22:09:21 +0000
commit9da83423b884ff7f1da43b17c94fe0612f39d204 (patch)
tree5674db2f82dea72a9a56de4096dce48573e1f742 /src/lib/corelib/api/runenvironment.cpp
parent9d1a039f674417add84105dd75b58a1151ce450b (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.cpp75
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")) {