iOS: Make SimulatorControl static

It already contained only static members, so creating instances didn't
serve a purpose.

Change-Id: I261503b606c21cf498dcd8470d5645d92d97c325
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Eike Ziller
2021-05-25 12:14:56 +02:00
parent 69b3c6c1fd
commit fcf9c42e40
7 changed files with 153 additions and 171 deletions

View File

@@ -38,10 +38,9 @@ namespace Internal {
using namespace std::placeholders; using namespace std::placeholders;
CreateSimulatorDialog::CreateSimulatorDialog(QWidget *parent) : CreateSimulatorDialog::CreateSimulatorDialog(QWidget *parent)
QDialog(parent), : QDialog(parent)
m_ui(new Ui::CreateSimulatorDialog), , m_ui(new Ui::CreateSimulatorDialog)
m_simControl(new SimulatorControl(this))
{ {
m_ui->setupUi(this); m_ui->setupUi(this);
m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);

View File

@@ -60,7 +60,6 @@ private:
private: private:
Utils::FutureSynchronizer m_futureSync; Utils::FutureSynchronizer m_futureSync;
Ui::CreateSimulatorDialog *m_ui = nullptr; Ui::CreateSimulatorDialog *m_ui = nullptr;
SimulatorControl *m_simControl = nullptr;
QList<RuntimeInfo> m_runtimes; QList<RuntimeInfo> m_runtimes;
}; };

View File

@@ -63,8 +63,7 @@ static void onSimOperation(const SimulatorInfo &simInfo, SimulatorOperationDialo
} }
IosSettingsWidget::IosSettingsWidget() IosSettingsWidget::IosSettingsWidget()
: m_ui(new Ui::IosSettingsWidget), : m_ui(new Ui::IosSettingsWidget)
m_simControl(new SimulatorControl(this))
{ {
m_ui->setupUi(this); m_ui->setupUi(this);
auto proxyModel = new QSortFilterProxyModel(this); auto proxyModel = new QSortFilterProxyModel(this);
@@ -134,9 +133,9 @@ void IosSettingsWidget::onStart()
.arg(info.name).arg(info.runtimeName).arg(info.state), .arg(info.name).arg(info.runtimeName).arg(info.state),
Utils::StdErrFormat); Utils::StdErrFormat);
} else { } else {
futureList << QFuture<void>(Utils::onResultReady(m_simControl->startSimulator(info.identifier), futureList << QFuture<void>(Utils::onResultReady(
std::bind(onSimOperation, info, statusDialog, SimulatorControl::startSimulator(info.identifier),
tr("simulator start"), _1))); std::bind(onSimOperation, info, statusDialog, tr("simulator start"), _1)));
} }
} }
@@ -167,9 +166,8 @@ void IosSettingsWidget::onCreate()
CreateSimulatorDialog createDialog(this); CreateSimulatorDialog createDialog(this);
if (createDialog.exec() == QDialog::Accepted) { if (createDialog.exec() == QDialog::Accepted) {
QFuture<void> f = QFuture<void>(Utils::onResultReady( QFuture<void> f = QFuture<void>(
m_simControl->createSimulator( Utils::onResultReady(SimulatorControl::createSimulator(createDialog.name(),
createDialog.name(),
createDialog.deviceType(), createDialog.deviceType(),
createDialog.runtime()), createDialog.runtime()),
std::bind(onSimulatorCreate, createDialog.name(), _1))); std::bind(onSimulatorCreate, createDialog.name(), _1)));
@@ -201,9 +199,9 @@ void IosSettingsWidget::onReset()
QList<QFuture<void>> futureList; QList<QFuture<void>> futureList;
foreach (const SimulatorInfo &info, simulatorInfoList) { foreach (const SimulatorInfo &info, simulatorInfoList) {
futureList << QFuture<void>(Utils::onResultReady(m_simControl->resetSimulator(info.identifier), futureList << QFuture<void>(Utils::onResultReady(
std::bind(onSimOperation, info, statusDialog, SimulatorControl::resetSimulator(info.identifier),
tr("simulator reset"), _1))); std::bind(onSimOperation, info, statusDialog, tr("simulator reset"), _1)));
} }
statusDialog->addFutures(futureList); statusDialog->addFutures(futureList);
@@ -229,9 +227,9 @@ void IosSettingsWidget::onRename()
QPointer<SimulatorOperationDialog> statusDialog = new SimulatorOperationDialog(this); QPointer<SimulatorOperationDialog> statusDialog = new SimulatorOperationDialog(this);
statusDialog->setAttribute(Qt::WA_DeleteOnClose); statusDialog->setAttribute(Qt::WA_DeleteOnClose);
statusDialog->addMessage(tr("Renaming simulator device..."), Utils::NormalMessageFormat); statusDialog->addMessage(tr("Renaming simulator device..."), Utils::NormalMessageFormat);
QFuture<void> f = QFuture<void>(Utils::onResultReady(m_simControl->renameSimulator(simInfo.identifier, newName), QFuture<void> f = QFuture<void>(Utils::onResultReady(
std::bind(onSimOperation, simInfo, statusDialog, SimulatorControl::renameSimulator(simInfo.identifier, newName),
tr("simulator rename"), _1))); std::bind(onSimOperation, simInfo, statusDialog, tr("simulator rename"), _1)));
statusDialog->addFutures({f}); statusDialog->addFutures({f});
statusDialog->exec(); // Modal dialog returns only when all the operations are done or cancelled. statusDialog->exec(); // Modal dialog returns only when all the operations are done or cancelled.
} }
@@ -258,9 +256,9 @@ void IosSettingsWidget::onDelete()
Utils::NormalMessageFormat); Utils::NormalMessageFormat);
QList<QFuture<void>> futureList; QList<QFuture<void>> futureList;
foreach (const SimulatorInfo &info, simulatorInfoList) { foreach (const SimulatorInfo &info, simulatorInfoList) {
futureList << QFuture<void>(Utils::onResultReady(m_simControl->deleteSimulator(info.identifier), futureList << QFuture<void>(Utils::onResultReady(
std::bind(onSimOperation, info, statusDialog, SimulatorControl::deleteSimulator(info.identifier),
tr("simulator delete"), _1))); std::bind(onSimOperation, info, statusDialog, tr("simulator delete"), _1)));
} }
statusDialog->addFutures(futureList); statusDialog->addFutures(futureList);
@@ -289,10 +287,9 @@ void IosSettingsWidget::onScreenshot()
simulatorInfoList.count()), Utils::NormalMessageFormat); simulatorInfoList.count()), Utils::NormalMessageFormat);
QList<QFuture<void>> futureList; QList<QFuture<void>> futureList;
foreach (const SimulatorInfo &info, simulatorInfoList) { foreach (const SimulatorInfo &info, simulatorInfoList) {
futureList << QFuture<void>(Utils::onResultReady(m_simControl->takeSceenshot(info.identifier, futureList << QFuture<void>(Utils::onResultReady(
generatePath(info)), SimulatorControl::takeSceenshot(info.identifier, generatePath(info)),
std::bind(onSimOperation, info, statusDialog, std::bind(onSimOperation, info, statusDialog, tr("simulator screenshot"), _1)));
tr("simulator screenshot"), _1)));
} }
statusDialog->addFutures(futureList); statusDialog->addFutures(futureList);

View File

@@ -58,7 +58,6 @@ private:
private: private:
Ui::IosSettingsWidget *m_ui = nullptr; Ui::IosSettingsWidget *m_ui = nullptr;
SimulatorControl *m_simControl = nullptr;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -307,7 +307,6 @@ class IosSimulatorToolHandlerPrivate : public IosToolHandlerPrivate
{ {
public: public:
explicit IosSimulatorToolHandlerPrivate(const IosDeviceType &devType, IosToolHandler *q); explicit IosSimulatorToolHandlerPrivate(const IosDeviceType &devType, IosToolHandler *q);
~IosSimulatorToolHandlerPrivate() override;
// IosToolHandlerPrivate overrides // IosToolHandlerPrivate overrides
public: public:
@@ -327,7 +326,6 @@ private:
private: private:
qint64 m_pid = -1; qint64 m_pid = -1;
SimulatorControl *simCtl;
LogTailFiles outputLogger; LogTailFiles outputLogger;
Utils::FutureSynchronizer futureSynchronizer; Utils::FutureSynchronizer futureSynchronizer;
}; };
@@ -803,19 +801,13 @@ void IosDeviceToolHandlerPrivate::stop(int errorCode)
IosSimulatorToolHandlerPrivate::IosSimulatorToolHandlerPrivate(const IosDeviceType &devType, IosSimulatorToolHandlerPrivate::IosSimulatorToolHandlerPrivate(const IosDeviceType &devType,
IosToolHandler *q) IosToolHandler *q)
: IosToolHandlerPrivate(devType, q), : IosToolHandlerPrivate(devType, q)
simCtl(new SimulatorControl)
{ {
QObject::connect(&outputLogger, &LogTailFiles::logMessage, QObject::connect(&outputLogger, &LogTailFiles::logMessage,
std::bind(&IosToolHandlerPrivate::appOutput, this, _1)); std::bind(&IosToolHandlerPrivate::appOutput, this, _1));
futureSynchronizer.setCancelOnWait(true); futureSynchronizer.setCancelOnWait(true);
} }
IosSimulatorToolHandlerPrivate::~IosSimulatorToolHandlerPrivate()
{
futureSynchronizer.waitForFinished();
delete simCtl;
}
void IosSimulatorToolHandlerPrivate::requestTransferApp(const QString &appBundlePath, void IosSimulatorToolHandlerPrivate::requestTransferApp(const QString &appBundlePath,
const QString &deviceIdentifier, int timeout) const QString &deviceIdentifier, int timeout)
{ {
@@ -840,7 +832,8 @@ void IosSimulatorToolHandlerPrivate::requestTransferApp(const QString &appBundle
if (SimulatorControl::isSimulatorRunning(m_deviceId)) if (SimulatorControl::isSimulatorRunning(m_deviceId))
installAppOnSimulator(); installAppOnSimulator();
else else
futureSynchronizer.addFuture(Utils::onResultReady(simCtl->startSimulator(m_deviceId), onSimulatorStart)); futureSynchronizer.addFuture(
Utils::onResultReady(SimulatorControl::startSimulator(m_deviceId), onSimulatorStart));
} }
void IosSimulatorToolHandlerPrivate::requestRunApp(const QString &appBundlePath, void IosSimulatorToolHandlerPrivate::requestRunApp(const QString &appBundlePath,
@@ -876,7 +869,8 @@ void IosSimulatorToolHandlerPrivate::requestRunApp(const QString &appBundlePath,
if (SimulatorControl::isSimulatorRunning(m_deviceId)) if (SimulatorControl::isSimulatorRunning(m_deviceId))
launchAppOnSimulator(extraArgs); launchAppOnSimulator(extraArgs);
else else
futureSynchronizer.addFuture(Utils::onResultReady(simCtl->startSimulator(m_deviceId), onSimulatorStart)); futureSynchronizer.addFuture(
Utils::onResultReady(SimulatorControl::startSimulator(m_deviceId), onSimulatorStart));
} }
void IosSimulatorToolHandlerPrivate::requestDeviceInfo(const QString &deviceId, int timeout) void IosSimulatorToolHandlerPrivate::requestDeviceInfo(const QString &deviceId, int timeout)
@@ -926,7 +920,8 @@ void IosSimulatorToolHandlerPrivate::installAppOnSimulator()
}; };
isTransferringApp(m_bundlePath, m_deviceId, 20, 100, ""); isTransferringApp(m_bundlePath, m_deviceId, 20, 100, "");
auto installFuture = simCtl->installApp(m_deviceId, Utils::FilePath::fromString(m_bundlePath)); auto installFuture = SimulatorControl::installApp(m_deviceId,
Utils::FilePath::fromString(m_bundlePath));
futureSynchronizer.addFuture(Utils::onResultReady(installFuture, onResponseAppInstall)); futureSynchronizer.addFuture(Utils::onResultReady(installFuture, onResponseAppInstall));
} }
@@ -990,10 +985,15 @@ void IosSimulatorToolHandlerPrivate::launchAppOnSimulator(const QStringList &ext
} }
}; };
futureSynchronizer.addFuture(Utils::onResultReady( futureSynchronizer.addFuture(
simCtl->launchApp(m_deviceId, bundleId, debugRun, extraArgs, Utils::onResultReady(SimulatorControl::launchApp(m_deviceId,
captureConsole ? stdoutFile->fileName() : QString(), bundleId,
captureConsole ? stderrFile->fileName() : QString()), debugRun,
extraArgs,
captureConsole ? stdoutFile->fileName()
: QString(),
captureConsole ? stderrFile->fileName()
: QString()),
onResponseAppLaunch)); onResponseAppLaunch));
} }

View File

@@ -178,54 +178,44 @@ static QList<RuntimeInfo> getAvailableRuntimes()
return runtimes; return runtimes;
} }
class SimulatorControlPrivate { static SimulatorInfo deviceInfo(const QString &simUdid);
private: static QString bundleIdentifier(const Utils::FilePath &bundlePath);
SimulatorControlPrivate(); static QString bundleExecutable(const Utils::FilePath &bundlePath);
~SimulatorControlPrivate();
static SimulatorInfo deviceInfo(const QString &simUdid); static void startSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi,
static QString bundleIdentifier(const Utils::FilePath &bundlePath); const QString &simUdid);
static QString bundleExecutable(const Utils::FilePath &bundlePath); static void installApp(QFutureInterface<SimulatorControl::ResponseData> &fi,
const QString &simUdid,
void startSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi, const QString &simUdid);
void installApp(QFutureInterface<SimulatorControl::ResponseData> &fi, const QString &simUdid,
const Utils::FilePath &bundlePath); const Utils::FilePath &bundlePath);
void launchApp(QFutureInterface<SimulatorControl::ResponseData> &fi, const QString &simUdid, static void launchApp(QFutureInterface<SimulatorControl::ResponseData> &fi,
const QString &bundleIdentifier, bool waitForDebugger, const QString &simUdid,
const QStringList &extraArgs, const QString &stdoutPath, const QString &bundleIdentifier,
bool waitForDebugger,
const QStringList &extraArgs,
const QString &stdoutPath,
const QString &stderrPath); const QString &stderrPath);
void deleteSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi, static void deleteSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi,
const QString &simUdid); const QString &simUdid);
void resetSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi, static void resetSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi,
const QString &simUdid); const QString &simUdid);
void renameSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi, static void renameSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi,
const QString &simUdid, const QString &newName); const QString &simUdid,
void createSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi, const QString &newName);
const QString &name, const DeviceTypeInfo &deviceType, static void createSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi,
const QString &name,
const DeviceTypeInfo &deviceType,
const RuntimeInfo &runtime); const RuntimeInfo &runtime);
void takeSceenshot(QFutureInterface<SimulatorControl::ResponseData> &fi, const QString &simUdid, static void takeSceenshot(QFutureInterface<SimulatorControl::ResponseData> &fi,
const QString &simUdid,
const QString &filePath); const QString &filePath);
static QList<SimulatorInfo> availableDevices; static QList<SimulatorInfo> s_availableDevices;
static QList<DeviceTypeInfo> availableDeviceTypes; static QList<DeviceTypeInfo> s_availableDeviceTypes;
static QList<RuntimeInfo> availableRuntimes; static QList<RuntimeInfo> s_availableRuntimes;
friend class SimulatorControl;
};
SimulatorControl::SimulatorControl(QObject *parent) :
QObject(parent),
d(new SimulatorControlPrivate)
{
}
SimulatorControl::~SimulatorControl()
{
delete d;
}
QList<SimulatorInfo> SimulatorControl::availableSimulators() QList<SimulatorInfo> SimulatorControl::availableSimulators()
{ {
return SimulatorControlPrivate::availableDevices; return s_availableDevices;
} }
static QList<SimulatorInfo> getAllSimulatorDevices() static QList<SimulatorInfo> getAllSimulatorDevices()
@@ -267,21 +257,21 @@ QFuture<QList<DeviceTypeInfo> > SimulatorControl::updateDeviceTypes()
{ {
QFuture< QList<DeviceTypeInfo> > future = Utils::runAsync(getAvailableDeviceTypes); QFuture< QList<DeviceTypeInfo> > future = Utils::runAsync(getAvailableDeviceTypes);
Utils::onResultReady(future, [](const QList<DeviceTypeInfo> &deviceTypes) { Utils::onResultReady(future, [](const QList<DeviceTypeInfo> &deviceTypes) {
SimulatorControlPrivate::availableDeviceTypes = deviceTypes; s_availableDeviceTypes = deviceTypes;
}); });
return future; return future;
} }
QList<RuntimeInfo> SimulatorControl::availableRuntimes() QList<RuntimeInfo> SimulatorControl::availableRuntimes()
{ {
return SimulatorControlPrivate::availableRuntimes; return s_availableRuntimes;
} }
QFuture<QList<RuntimeInfo> > SimulatorControl::updateRuntimes() QFuture<QList<RuntimeInfo> > SimulatorControl::updateRuntimes()
{ {
QFuture< QList<RuntimeInfo> > future = Utils::runAsync(getAvailableRuntimes); QFuture< QList<RuntimeInfo> > future = Utils::runAsync(getAvailableRuntimes);
Utils::onResultReady(future, [](const QList<RuntimeInfo> &runtimes) { Utils::onResultReady(future, [](const QList<RuntimeInfo> &runtimes) {
SimulatorControlPrivate::availableRuntimes = runtimes; s_availableRuntimes = runtimes;
}); });
return future; return future;
} }
@@ -289,9 +279,8 @@ QFuture<QList<RuntimeInfo> > SimulatorControl::updateRuntimes()
QFuture< QList<SimulatorInfo> > SimulatorControl::updateAvailableSimulators() QFuture< QList<SimulatorInfo> > SimulatorControl::updateAvailableSimulators()
{ {
QFuture< QList<SimulatorInfo> > future = Utils::runAsync(getAvailableSimulators); QFuture< QList<SimulatorInfo> > future = Utils::runAsync(getAvailableSimulators);
Utils::onResultReady(future, [](const QList<SimulatorInfo> &devices) { Utils::onResultReady(future,
SimulatorControlPrivate::availableDevices = devices; [](const QList<SimulatorInfo> &devices) { s_availableDevices = devices; });
});
return future; return future;
} }
@@ -299,53 +288,60 @@ bool SimulatorControl::isSimulatorRunning(const QString &simUdid)
{ {
if (simUdid.isEmpty()) if (simUdid.isEmpty())
return false; return false;
return SimulatorControlPrivate::deviceInfo(simUdid).isBooted(); return deviceInfo(simUdid).isBooted();
} }
QString SimulatorControl::bundleIdentifier(const Utils::FilePath &bundlePath) QString SimulatorControl::bundleIdentifier(const Utils::FilePath &bundlePath)
{ {
return SimulatorControlPrivate::bundleIdentifier(bundlePath); return Internal::bundleIdentifier(bundlePath);
} }
QString SimulatorControl::bundleExecutable(const Utils::FilePath &bundlePath) QString SimulatorControl::bundleExecutable(const Utils::FilePath &bundlePath)
{ {
return SimulatorControlPrivate::bundleExecutable(bundlePath); return Internal::bundleExecutable(bundlePath);
} }
QFuture<SimulatorControl::ResponseData> SimulatorControl::startSimulator(const QString &simUdid) const QFuture<SimulatorControl::ResponseData> SimulatorControl::startSimulator(const QString &simUdid)
{ {
return Utils::runAsync(&SimulatorControlPrivate::startSimulator, d, simUdid); return Utils::runAsync(Internal::startSimulator, simUdid);
} }
QFuture<SimulatorControl::ResponseData> QFuture<SimulatorControl::ResponseData> SimulatorControl::installApp(
SimulatorControl::installApp(const QString &simUdid, const Utils::FilePath &bundlePath) const const QString &simUdid, const Utils::FilePath &bundlePath)
{ {
return Utils::runAsync(&SimulatorControlPrivate::installApp, d, simUdid, bundlePath); return Utils::runAsync(Internal::installApp, simUdid, bundlePath);
} }
QFuture<SimulatorControl::ResponseData> QFuture<SimulatorControl::ResponseData> SimulatorControl::launchApp(const QString &simUdid,
SimulatorControl::launchApp(const QString &simUdid, const QString &bundleIdentifier, const QString &bundleIdentifier,
bool waitForDebugger, const QStringList &extraArgs, bool waitForDebugger,
const QString &stdoutPath, const QString &stderrPath) const const QStringList &extraArgs,
const QString &stdoutPath,
const QString &stderrPath)
{ {
return Utils::runAsync(&SimulatorControlPrivate::launchApp, d, simUdid, bundleIdentifier, return Utils::runAsync(Internal::launchApp,
waitForDebugger, extraArgs, stdoutPath, stderrPath); simUdid,
bundleIdentifier,
waitForDebugger,
extraArgs,
stdoutPath,
stderrPath);
} }
QFuture<SimulatorControl::ResponseData> SimulatorControl::deleteSimulator(const QString &simUdid) const QFuture<SimulatorControl::ResponseData> SimulatorControl::deleteSimulator(const QString &simUdid)
{ {
return Utils::runAsync(&SimulatorControlPrivate::deleteSimulator, d, simUdid); return Utils::runAsync(Internal::deleteSimulator, simUdid);
} }
QFuture<SimulatorControl::ResponseData> SimulatorControl::resetSimulator(const QString &simUdid) const QFuture<SimulatorControl::ResponseData> SimulatorControl::resetSimulator(const QString &simUdid)
{ {
return Utils::runAsync(&SimulatorControlPrivate::resetSimulator, d, simUdid); return Utils::runAsync(Internal::resetSimulator, simUdid);
} }
QFuture<SimulatorControl::ResponseData> SimulatorControl::renameSimulator(const QString &simUdid, QFuture<SimulatorControl::ResponseData> SimulatorControl::renameSimulator(const QString &simUdid,
const QString &newName) const const QString &newName)
{ {
return Utils::runAsync(&SimulatorControlPrivate::renameSimulator, d, simUdid, newName); return Utils::runAsync(Internal::renameSimulator, simUdid, newName);
} }
QFuture<SimulatorControl::ResponseData> QFuture<SimulatorControl::ResponseData>
@@ -353,25 +349,18 @@ SimulatorControl::createSimulator(const QString &name,
const DeviceTypeInfo &deviceType, const DeviceTypeInfo &deviceType,
const RuntimeInfo &runtime) const RuntimeInfo &runtime)
{ {
return Utils::runAsync(&SimulatorControlPrivate::createSimulator, d, name, deviceType, runtime); return Utils::runAsync(Internal::createSimulator, name, deviceType, runtime);
} }
QFuture<SimulatorControl::ResponseData> SimulatorControl::takeSceenshot(const QString &simUdid, QFuture<SimulatorControl::ResponseData> SimulatorControl::takeSceenshot(const QString &simUdid,
const QString &filePath) const QString &filePath)
{ {
return Utils::runAsync(&SimulatorControlPrivate::takeSceenshot, d, simUdid, filePath); return Utils::runAsync(Internal::takeSceenshot, simUdid, filePath);
} }
// Static members // Static members
QList<SimulatorInfo> SimulatorControlPrivate::availableDevices;
QList<DeviceTypeInfo> SimulatorControlPrivate::availableDeviceTypes;
QList<RuntimeInfo> SimulatorControlPrivate::availableRuntimes;
SimulatorControlPrivate::SimulatorControlPrivate() = default; SimulatorInfo deviceInfo(const QString &simUdid)
SimulatorControlPrivate::~SimulatorControlPrivate() = default;
SimulatorInfo SimulatorControlPrivate::deviceInfo(const QString &simUdid)
{ {
auto matchDevice = [simUdid](const SimulatorInfo &device) { auto matchDevice = [simUdid](const SimulatorInfo &device) {
return device.identifier == simUdid; return device.identifier == simUdid;
@@ -383,7 +372,7 @@ SimulatorInfo SimulatorControlPrivate::deviceInfo(const QString &simUdid)
return device; return device;
} }
QString SimulatorControlPrivate::bundleIdentifier(const Utils::FilePath &bundlePath) QString bundleIdentifier(const Utils::FilePath &bundlePath)
{ {
QString bundleID; QString bundleID;
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
@@ -403,7 +392,7 @@ QString SimulatorControlPrivate::bundleIdentifier(const Utils::FilePath &bundleP
return bundleID; return bundleID;
} }
QString SimulatorControlPrivate::bundleExecutable(const Utils::FilePath &bundlePath) QString bundleExecutable(const Utils::FilePath &bundlePath)
{ {
QString executable; QString executable;
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
@@ -422,8 +411,7 @@ QString SimulatorControlPrivate::bundleExecutable(const Utils::FilePath &bundleP
return executable; return executable;
} }
void SimulatorControlPrivate::startSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi, void startSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi, const QString &simUdid)
const QString &simUdid)
{ {
SimulatorControl::ResponseData response(simUdid); SimulatorControl::ResponseData response(simUdid);
SimulatorInfo simInfo = deviceInfo(simUdid); SimulatorInfo simInfo = deviceInfo(simUdid);
@@ -480,8 +468,9 @@ void SimulatorControlPrivate::startSimulator(QFutureInterface<SimulatorControl::
} }
} }
void SimulatorControlPrivate::installApp(QFutureInterface<SimulatorControl::ResponseData> &fi, void installApp(QFutureInterface<SimulatorControl::ResponseData> &fi,
const QString &simUdid, const Utils::FilePath &bundlePath) const QString &simUdid,
const Utils::FilePath &bundlePath)
{ {
QTC_CHECK(bundlePath.exists()); QTC_CHECK(bundlePath.exists());
@@ -493,10 +482,13 @@ void SimulatorControlPrivate::installApp(QFutureInterface<SimulatorControl::Resp
fi.reportResult(response); fi.reportResult(response);
} }
void SimulatorControlPrivate::launchApp(QFutureInterface<SimulatorControl::ResponseData> &fi, void launchApp(QFutureInterface<SimulatorControl::ResponseData> &fi,
const QString &simUdid, const QString &bundleIdentifier, const QString &simUdid,
bool waitForDebugger, const QStringList &extraArgs, const QString &bundleIdentifier,
const QString &stdoutPath, const QString &stderrPath) bool waitForDebugger,
const QStringList &extraArgs,
const QString &stdoutPath,
const QString &stderrPath)
{ {
SimulatorControl::ResponseData response(simUdid); SimulatorControl::ResponseData response(simUdid);
if (!bundleIdentifier.isEmpty() && !fi.isCanceled()) { if (!bundleIdentifier.isEmpty() && !fi.isCanceled()) {
@@ -531,8 +523,7 @@ void SimulatorControlPrivate::launchApp(QFutureInterface<SimulatorControl::Respo
} }
} }
void SimulatorControlPrivate::deleteSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi, void deleteSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi, const QString &simUdid)
const QString &simUdid)
{ {
SimulatorControl::ResponseData response(simUdid); SimulatorControl::ResponseData response(simUdid);
response.success = runSimCtlCommand({"delete", simUdid}, nullptr, &response.commandOutput); response.success = runSimCtlCommand({"delete", simUdid}, nullptr, &response.commandOutput);
@@ -541,8 +532,7 @@ void SimulatorControlPrivate::deleteSimulator(QFutureInterface<SimulatorControl:
fi.reportResult(response); fi.reportResult(response);
} }
void SimulatorControlPrivate::resetSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi, void resetSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi, const QString &simUdid)
const QString &simUdid)
{ {
SimulatorControl::ResponseData response(simUdid); SimulatorControl::ResponseData response(simUdid);
response.success = runSimCtlCommand({"erase", simUdid}, nullptr, &response.commandOutput); response.success = runSimCtlCommand({"erase", simUdid}, nullptr, &response.commandOutput);
@@ -551,8 +541,9 @@ void SimulatorControlPrivate::resetSimulator(QFutureInterface<SimulatorControl::
fi.reportResult(response); fi.reportResult(response);
} }
void SimulatorControlPrivate::renameSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi, void renameSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi,
const QString &simUdid, const QString &newName) const QString &simUdid,
const QString &newName)
{ {
SimulatorControl::ResponseData response(simUdid); SimulatorControl::ResponseData response(simUdid);
response.success = runSimCtlCommand({"rename", simUdid, newName}, response.success = runSimCtlCommand({"rename", simUdid, newName},
@@ -563,7 +554,7 @@ void SimulatorControlPrivate::renameSimulator(QFutureInterface<SimulatorControl:
fi.reportResult(response); fi.reportResult(response);
} }
void SimulatorControlPrivate::createSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi, void createSimulator(QFutureInterface<SimulatorControl::ResponseData> &fi,
const QString &name, const QString &name,
const DeviceTypeInfo &deviceType, const DeviceTypeInfo &deviceType,
const RuntimeInfo &runtime) const RuntimeInfo &runtime)
@@ -582,8 +573,9 @@ void SimulatorControlPrivate::createSimulator(QFutureInterface<SimulatorControl:
fi.reportResult(response); fi.reportResult(response);
} }
void SimulatorControlPrivate::takeSceenshot(QFutureInterface<SimulatorControl::ResponseData> &fi, void takeSceenshot(QFutureInterface<SimulatorControl::ResponseData> &fi,
const QString &simUdid, const QString &filePath) const QString &simUdid,
const QString &filePath)
{ {
SimulatorControl::ResponseData response(simUdid); SimulatorControl::ResponseData response(simUdid);
response.success = runSimCtlCommand({"io", simUdid, "screenshot", filePath}, response.success = runSimCtlCommand({"io", simUdid, "screenshot", filePath},

View File

@@ -74,9 +74,8 @@ public:
class DeviceTypeInfo : public SimulatorEntity {}; class DeviceTypeInfo : public SimulatorEntity {};
class SimulatorControl : public QObject class SimulatorControl
{ {
Q_OBJECT
public: public:
struct ResponseData { struct ResponseData {
ResponseData(const QString & udid): ResponseData(const QString & udid):
@@ -88,10 +87,6 @@ public:
QString commandOutput; QString commandOutput;
}; };
public:
explicit SimulatorControl(QObject* parent = nullptr);
~SimulatorControl() override;
public: public:
static QList<DeviceTypeInfo> availableDeviceTypes(); static QList<DeviceTypeInfo> availableDeviceTypes();
static QFuture<QList<DeviceTypeInfo> > updateDeviceTypes(); static QFuture<QList<DeviceTypeInfo> > updateDeviceTypes();
@@ -104,23 +99,24 @@ public:
static QString bundleExecutable(const Utils::FilePath &bundlePath); static QString bundleExecutable(const Utils::FilePath &bundlePath);
public: public:
QFuture<ResponseData> startSimulator(const QString &simUdid) const; static QFuture<ResponseData> startSimulator(const QString &simUdid);
QFuture<ResponseData> installApp(const QString &simUdid, const Utils::FilePath &bundlePath) const; static QFuture<ResponseData> installApp(const QString &simUdid,
QFuture<ResponseData> launchApp(const QString &simUdid, const QString &bundleIdentifier, const Utils::FilePath &bundlePath);
bool waitForDebugger, const QStringList &extraArgs, static QFuture<ResponseData> launchApp(const QString &simUdid,
const QString& stdoutPath = QString(), const QString &bundleIdentifier,
const QString& stderrPath = QString()) const; bool waitForDebugger,
QFuture<ResponseData> deleteSimulator(const QString &simUdid) const; const QStringList &extraArgs,
QFuture<ResponseData> resetSimulator(const QString &simUdid) const; const QString &stdoutPath = QString(),
QFuture<ResponseData> renameSimulator(const QString &simUdid, const QString &newName) const; const QString &stderrPath = QString());
QFuture<ResponseData> createSimulator(const QString &name, static QFuture<ResponseData> deleteSimulator(const QString &simUdid);
static QFuture<ResponseData> resetSimulator(const QString &simUdid);
static QFuture<ResponseData> renameSimulator(const QString &simUdid, const QString &newName);
static QFuture<ResponseData> createSimulator(const QString &name,
const DeviceTypeInfo &deviceType, const DeviceTypeInfo &deviceType,
const RuntimeInfo &runtime); const RuntimeInfo &runtime);
QFuture<ResponseData> takeSceenshot(const QString &simUdid, const QString &filePath); static QFuture<ResponseData> takeSceenshot(const QString &simUdid, const QString &filePath);
private:
SimulatorControlPrivate *d;
}; };
} // namespace Internal } // namespace Internal
} // namespace Ios } // namespace Ios