IosDeployStep: Add return value to checkProvisioningProfile()

Change-Id: If5829daae851a4af06bcff7dcd60ecd6004b5bdb
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Jarek Kobus
2023-07-14 12:57:23 +02:00
parent 109727d6de
commit 63bc9a2e42

View File

@@ -137,7 +137,7 @@ private:
IosSimulator::ConstPtr iossimulator() const; IosSimulator::ConstPtr iossimulator() const;
QString deviceId() const; QString deviceId() const;
void checkProvisioningProfile(); bool checkProvisioningProfile();
TransferStatus m_transferStatus = NoTransfer; TransferStatus m_transferStatus = NoTransfer;
IosToolHandler *m_toolHandler = nullptr; IosToolHandler *m_toolHandler = nullptr;
@@ -207,7 +207,7 @@ void IosDeployStep::doRun()
this, &IosDeployStep::handleFinished); this, &IosDeployStep::handleFinished);
connect(m_toolHandler, &IosToolHandler::errorMsg, connect(m_toolHandler, &IosToolHandler::errorMsg,
this, &IosDeployStep::handleErrorMsg); this, &IosDeployStep::handleErrorMsg);
checkProvisioningProfile(); m_expectFail = !checkProvisioningProfile();
m_toolHandler->requestTransferApp(m_bundlePath, m_deviceType.identifier); m_toolHandler->requestTransferApp(m_bundlePath, m_deviceType.identifier);
} }
@@ -297,53 +297,54 @@ QString IosDeployStep::deviceId() const
return iosdevice()->uniqueDeviceID(); return iosdevice()->uniqueDeviceID();
} }
void IosDeployStep::checkProvisioningProfile() bool IosDeployStep::checkProvisioningProfile()
{ {
IosDevice::ConstPtr device = iosdevice(); IosDevice::ConstPtr device = iosdevice();
if (device.isNull()) if (device.isNull())
return; return true;
const FilePath provisioningFilePath = m_bundlePath.pathAppended("embedded.mobileprovision"); const FilePath provisioningFilePath = m_bundlePath.pathAppended("embedded.mobileprovision");
// the file is a signed plist stored in DER format // the file is a signed plist stored in DER format
// we simply search for start and end of the plist instead of decoding the DER payload // we simply search for start and end of the plist instead of decoding the DER payload
if (!provisioningFilePath.exists()) if (!provisioningFilePath.exists())
return; return true;
QFile provisionFile(provisioningFilePath.toString()); QFile provisionFile(provisioningFilePath.toString());
if (!provisionFile.open(QIODevice::ReadOnly)) if (!provisionFile.open(QIODevice::ReadOnly))
return; return true;
QByteArray provisionData = provisionFile.readAll();
int start = provisionData.indexOf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); const QByteArray provisionData = provisionFile.readAll();
const int start = provisionData.indexOf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
int end = provisionData.indexOf("</plist>"); int end = provisionData.indexOf("</plist>");
if (start == -1 || end == -1) if (start == -1 || end == -1)
return; return true;
end += 8;
end += 8;
TemporaryFile f("iosdeploy"); TemporaryFile f("iosdeploy");
if (!f.open()) if (!f.open())
return; return true;
f.write(provisionData.mid(start, end - start)); f.write(provisionData.mid(start, end - start));
f.flush(); f.flush();
QSettings provisionPlist(f.fileName(), QSettings::NativeFormat); const QSettings provisionPlist(f.fileName(), QSettings::NativeFormat);
if (!provisionPlist.contains(QLatin1String("ProvisionedDevices"))) if (!provisionPlist.contains(QLatin1String("ProvisionedDevices")))
return; return true;
const QStringList deviceIds = provisionPlist.value("ProvisionedDevices").toStringList(); const QStringList deviceIds = provisionPlist.value("ProvisionedDevices").toStringList();
const QString targetId = device->uniqueDeviceID(); const QString targetId = device->uniqueDeviceID();
for (const QString &deviceId : deviceIds) { for (const QString &deviceId : deviceIds) {
if (deviceId == targetId) if (deviceId == targetId)
return; return true;
} }
m_expectFail = true;
const QString provisioningProfile = provisionPlist.value(QLatin1String("Name")).toString(); const QString provisioningProfile = provisionPlist.value(QLatin1String("Name")).toString();
const QString provisioningUid = provisionPlist.value(QLatin1String("UUID")).toString(); const QString provisioningUid = provisionPlist.value(QLatin1String("UUID")).toString();
CompileTask task(Task::Warning, const CompileTask task(Task::Warning,
Tr::tr("The provisioning profile \"%1\" (%2) used to sign the application " Tr::tr("The provisioning profile \"%1\" (%2) used to sign the application "
"does not cover the device %3 (%4). Deployment to it will fail.") "does not cover the device %3 (%4). Deployment to it will fail.")
.arg(provisioningProfile, provisioningUid, device->displayName(), .arg(provisioningProfile, provisioningUid, device->displayName(), targetId));
targetId));
emit addTask(task); emit addTask(task);
return false;
} }
IosDevice::ConstPtr IosDeployStep::iosdevice() const IosDevice::ConstPtr IosDeployStep::iosdevice() const