bool AndroidManager::checkForQt51Files(Utils::FileName fileName) { fileName.appendPath(QLatin1String("android")).appendPath(QLatin1String("version.xml")); if (!fileName.exists()) return false; QDomDocument dstVersionDoc; if (!openXmlFile(dstVersionDoc, fileName)) return false; return dstVersionDoc.documentElement().attribute(QLatin1String("value")).toDouble() < 5.2; }
Utils::FileName CMakeTool::cmakeExecutable() const { if (Utils::HostOsInfo::isMacHost() && m_executable.endsWith(".app")) { Utils::FileName toTest = m_executable; toTest = toTest.appendPath("Contents/bin/cmake"); if (toTest.exists()) return toTest; } return m_executable; }
void IosDeployStep::checkProvisioningProfile() { IosDevice::ConstPtr device = iosdevice(); if (device.isNull()) return; Utils::FileName provisioningFilePath = Utils::FileName::fromString(appBundle()); provisioningFilePath.appendPath(QLatin1String("embedded.mobileprovision")); // 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 if (!provisioningFilePath.exists()) return; QFile provisionFile(provisioningFilePath.toString()); if (!provisionFile.open(QIODevice::ReadOnly)) return; QByteArray provisionData = provisionFile.readAll(); int start = provisionData.indexOf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); int end = provisionData.indexOf("</plist>"); if (start == -1 || end == -1) return; end += 8; QTemporaryFile f; if (!f.open()) return; f.write(provisionData.mid(start, end - start)); f.flush(); QSettings provisionPlist(f.fileName(), QSettings::NativeFormat); if (!provisionPlist.contains(QLatin1String("ProvisionedDevices"))) return; QStringList deviceIds = provisionPlist.value(QLatin1String("ProvisionedDevices")).toStringList(); QString targetId = device->uniqueDeviceID(); foreach (const QString &deviceId, deviceIds) { if (deviceId == targetId) return; } m_expectFail = true; QString provisioningProfile = provisionPlist.value(QLatin1String("Name")).toString(); QString provisioningUid = provisionPlist.value(QLatin1String("UUID")).toString(); Task task(Task::Warning, tr("The provisioning profile \"%1\" (%2) used to sign the application " "does not cover the device %3 (%4). Deployment to it will fail.") .arg(provisioningProfile, provisioningUid, device->displayName(), targetId), Utils::FileName(), /* filename */ -1, /* line */ ProjectExplorer::Constants::TASK_CATEGORY_COMPILE); emit addTask(task); }
int AndroidManager::findApiLevel(const Utils::FileName &platformPath) { int apiLevel = -1; Utils::FileName propertiesPath = platformPath; propertiesPath.appendPath("/source.properties"); if (propertiesPath.exists()) { QSettings sdkProperties(propertiesPath.toString(), QSettings::IniFormat); bool validInt = false; apiLevel = sdkProperties.value(ApiLevelKey).toInt(&validInt); if (!validInt) apiLevel = -1; } return apiLevel; }
QStringList IosDsymBuildStep::defaultCmdList() const { QString dsymutilCmd = "dsymutil"; Utils::FileName dsymUtilPath = IosConfigurations::developerPath() .appendPath("Toolchains/XcodeDefault.xctoolchain/usr/bin/dsymutil"); if (dsymUtilPath.exists()) dsymutilCmd = dsymUtilPath.toUserOutput(); IosRunConfiguration *runConf = qobject_cast<IosRunConfiguration *>(target()->activeRunConfiguration()); QTC_ASSERT(runConf, return QStringList("echo")); QString dsymPath = runConf->bundleDirectory().toUserOutput(); dsymPath.chop(4); dsymPath.append(".dSYM"); return QStringList({dsymutilCmd, "-o", dsymPath, runConf->localExecutable().toUserOutput()}); }
bool AndroidManager::updateGradleProperties(ProjectExplorer::Target *target) { QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit()); if (!version) return false; AndroidQtSupport *qtSupport = androidQtSupport(target); if (!qtSupport) return false; Utils::FileName packageSourceDir = qtSupport->packageSourceDir(target); if (!packageSourceDir.appendPath("gradlew").exists()) return false; Utils::FileName wrapperProps = packageSourceDir; wrapperProps.appendPath(QLatin1String("gradle/wrapper/gradle-wrapper.properties")); if (wrapperProps.exists()) { GradleProperties wrapperProperties = readGradleProperties(wrapperProps.toString()); QString distributionUrl = QString::fromLocal8Bit(wrapperProperties["distributionUrl"]); // Update only old gradle distributionUrl if (distributionUrl.endsWith(QLatin1String("distributions/gradle-1.12-all.zip"))) { wrapperProperties["distributionUrl"] = "https\\://services.gradle.org/distributions/gradle-2.2.1-all.zip"; mergeGradleProperties(wrapperProps.toString(), wrapperProperties); } } GradleProperties localProperties; localProperties["sdk.dir"] = AndroidConfigurations::currentConfig().sdkLocation().toString().toLocal8Bit(); if (!mergeGradleProperties(packageSourceDir.appendPath("local.properties").toString(), localProperties)) return false; QString gradlePropertiesPath = packageSourceDir.appendPath("gradle.properties").toString(); GradleProperties gradleProperties = readGradleProperties(gradlePropertiesPath); gradleProperties["qt5AndroidDir"] = version->qmakeProperty("QT_INSTALL_PREFIX") .append(QLatin1String("/src/android/java")).toLocal8Bit(); gradleProperties["buildDir"] = ".build"; gradleProperties["androidCompileSdkVersion"] = buildTargetSDK(target).split(QLatin1Char('-')).last().toLocal8Bit(); if (gradleProperties["androidBuildToolsVersion"].isEmpty()) { QVersionNumber buildtoolVersion = AndroidConfigurations::currentConfig().buildToolsVersion(); if (buildtoolVersion.isNull()) return false; gradleProperties["androidBuildToolsVersion"] = buildtoolVersion.toString().toLocal8Bit(); } return mergeGradleProperties(gradlePropertiesPath, gradleProperties); }
static bool validateLibraryPath(const Utils::FileName &filePath, const Utils::PathChooser *pathChooser, QString *errorMessage) { Q_UNUSED(errorMessage); if (!filePath.exists()) return false; const QString fileName = filePath.fileName(); QStringList filters = qt_clean_filter_list(pathChooser->promptDialogFilter()); for (int i = 0; i < filters.count(); i++) { QRegExp regExp(filters.at(i)); regExp.setCaseSensitivity(Utils::HostOsInfo::fileNameCaseSensitivity()); regExp.setPatternSyntax(QRegExp::Wildcard); if (regExp.exactMatch(fileName)) return true; } return false; }