summaryrefslogtreecommitdiffstats
path: root/qmake/generators/mac/pbuilder_pbx.cpp
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2016-09-21 09:41:13 -0700
committerAntti Kokko <antti.kokko@qt.io>2016-09-22 06:04:57 +0000
commita45566eec711941abe975a38917c024644e82bd7 (patch)
tree93667d104c8de3c4f55d528f814e3fbb7ac53767 /qmake/generators/mac/pbuilder_pbx.cpp
parentf242b91189e3bd0cc96dd1a2695eef0521099aea (diff)
Fix code signing for qmake-generated Xcode projects in Xcode 8 (again)
This version now prefers non-free provisioning teams, since the latter seem to be problematic in more cases. Task-number: QTBUG-55915 Change-Id: Ie40ddae5e333acdd5327ed46992fb4fb300dee25 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com> Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
Diffstat (limited to 'qmake/generators/mac/pbuilder_pbx.cpp')
-rw-r--r--qmake/generators/mac/pbuilder_pbx.cpp48
1 files changed, 30 insertions, 18 deletions
diff --git a/qmake/generators/mac/pbuilder_pbx.cpp b/qmake/generators/mac/pbuilder_pbx.cpp
index 5e37cd65d8..59e7991d4c 100644
--- a/qmake/generators/mac/pbuilder_pbx.cpp
+++ b/qmake/generators/mac/pbuilder_pbx.cpp
@@ -496,6 +496,32 @@ static QString xcodeFiletypeForFilename(const QString &filename)
return QString();
}
+static bool compareProvisioningTeams(const QVariantMap &a, const QVariantMap &b)
+{
+ int aFree = a.value(QLatin1String("isFreeProvisioningTeam")).toBool() ? 1 : 0;
+ int bFree = b.value(QLatin1String("isFreeProvisioningTeam")).toBool() ? 1 : 0;
+ return aFree < bFree;
+}
+
+static QList<QVariantMap> provisioningTeams()
+{
+ const QSettings xcodeSettings(
+ QDir::homePath() + QLatin1String("/Library/Preferences/com.apple.dt.Xcode.plist"),
+ QSettings::NativeFormat);
+ const QVariantMap teamMap = xcodeSettings.value(QLatin1String("IDEProvisioningTeams")).toMap();
+ QList<QVariantMap> flatTeams;
+ for (QVariantMap::const_iterator it = teamMap.begin(), end = teamMap.end(); it != end; ++it) {
+ const QString emailAddress = it.key();
+ QVariantMap team = it.value().toMap();
+ team[QLatin1String("emailAddress")] = emailAddress;
+ flatTeams.append(team);
+ }
+
+ // Sort teams so that Free Provisioning teams come last
+ std::sort(flatTeams.begin(), flatTeams.end(), ::compareProvisioningTeams);
+ return flatTeams;
+}
+
bool
ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
{
@@ -1407,25 +1433,11 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
QMap<QString, QString> settings;
if (!project->isActiveConfig("no_xcode_development_team")) {
- const QSettings xcodeSettings(
- QDir::homePath() + QLatin1String("/Library/Preferences/com.apple.dt.Xcode.plist"),
- QSettings::NativeFormat);
- const QVariantMap teams = xcodeSettings.value(QLatin1String("IDEProvisioningTeams")).toMap();
+ const QList<QVariantMap> teams = provisioningTeams();
if (!teams.isEmpty()) {
- for (QVariantMap::const_iterator it = teams.begin(), end = teams.end(); it != end; ++it) {
- const QVariantMap team = it.value().toMap();
- const QString teamType = team.value(QLatin1String("teamType")).toString();
-
- // Skip Company teams because signing permissions may not be available under all
- // circumstances for users who are not the Team Agent
- if (teamType != QLatin1String("Company")) {
- const QString teamId = team.value(QLatin1String("teamID")).toString();
- settings.insert("DEVELOPMENT_TEAM", teamId);
-
- // first suitable team we found is the one we'll use by default
- break;
- }
- }
+ // first suitable team we find is the one we'll use by default
+ settings.insert("DEVELOPMENT_TEAM",
+ teams.first().value(QLatin1String("teamID")).toString());
}
}
settings.insert("COPY_PHASE_STRIP", (as_release ? "YES" : "NO"));