diff --git a/src/plugins/ios/iostoolhandler.cpp b/src/plugins/ios/iostoolhandler.cpp index 5330d5ce673..4795d922a0c 100644 --- a/src/plugins/ios/iostoolhandler.cpp +++ b/src/plugins/ios/iostoolhandler.cpp @@ -848,13 +848,12 @@ void IosSimulatorToolHandlerPrivate::requestRunApp(const QString &appBundlePath, } auto onSimulatorStart = [this, extraArgs] (const SimulatorControl::ResponseData &response) { - if (isResponseValid(response)) + if (!isResponseValid(response)) return; if (response.success) { launchAppOnSimulator(extraArgs); } else { - errorMsg(IosToolHandler::tr("Application launch on Simulator failed. Simulator not running.") - .arg(bundlePath)); + errorMsg(IosToolHandler::tr("Application launch on Simulator failed. Simulator not running.")); didStartApp(bundlePath, deviceId, Ios::IosToolHandler::Failure); } }; diff --git a/src/plugins/ios/simulatorcontrol.cpp b/src/plugins/ios/simulatorcontrol.cpp index a533152b431..84b5b094de8 100644 --- a/src/plugins/ios/simulatorcontrol.cpp +++ b/src/plugins/ios/simulatorcontrol.cpp @@ -398,7 +398,29 @@ void SimulatorControlPrivate::startSimulator(QFutureInterfacemsleep(100); + simInfo = deviceInfo(simUdid); + } + + if (simInfo.isShuttingDown()) { + qCDebug(simulatorLog) << "Can not start Simulator device. " + << "Previous instance taking too long to shutdown." << simInfo; + return; + } + + if (simInfo.isShutdown()) { const QString cmd = IosConfigurations::developerPath() .appendPath(QStringLiteral("/Applications/Simulator.app/Contents/MacOS/Simulator")) .toString(); @@ -410,7 +432,7 @@ void SimulatorControlPrivate::startSimulator(QFutureInterface #include #include "utils/fileutils.h" - +#include #include QT_BEGIN_NAMESPACE @@ -50,10 +50,14 @@ public: } }; -class SimulatorInfo : public SimulatorEntity { +class SimulatorInfo : public SimulatorEntity +{ + friend QDebug &operator<<(QDebug &, const SimulatorInfo &info); + public: bool isBooted() const { return state.compare(QStringLiteral("Booted")) == 0; } bool isShutdown() const { return state.compare(QStringLiteral("Shutdown")) == 0; } + bool isShuttingDown() const { return state == "Shutting Down"; } bool available; QString state; QString runtimeName;