Verwenden Sie xcodebuild (Xcode 8) und das automatische Signieren in CI-Umgebungen (Travis / Jenkins)
Mit der Veröffentlichung von Xcode 8 stellte Apple einen neuen Weg zum Umgang mit der Unterzeichnung Konfiguration. Sie haben nun zwei Optionen Manual
und Automatic
.
Nach der WWDC 2016 Session über Code signing -(WWDC 2016 - 401 - What ' s new in Xcode die app-Signierung)wenn Sie Automatic
Unterzeichnung, Xcode wird:
- Erstellen signing-Zertifikate
- Erstellen und aktualisieren von App-IDs
- Erstellen und aktualisieren von provisioning-Profilen
Aber nach dem, was Apple sagt in der Sitzung, die Automatic Signing
verwenden Development signing
und beschränkt sich auf Xcode erstellte provisioning profile.
Das Problem kommt, wenn Sie versuchen, verwenden Sie Automatic Signing
auf eine CI-Umgebung (wie Travis-CI oder Jenkins). Ich bin nicht in der Lage, um herauszufinden, eine einfache Möglichkeit zu halten, verwenden der Automatischen und Zeichen für den Vertrieb (wie Xcode Kräfte Sie Entwicklung und Xcode erstellte provisioning profile).
Den neuen "Xcode erstellte provisioning profile" nicht angezeigt, im developer-portal, zwar kann ich dann in meine Maschine... soll ich dann verschieben Sie diese profile, um die CI-Maschine, bauen Sie für Development
- und export für Distribution
? Gibt es eine Möglichkeit, das überschreiben der Automatic Signing
mit xcodebuild
?
InformationsquelleAutor der Frage pablobart | 2016-09-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich grundsätzlich laufen in das gleiche Problem mit Jenkins CI und die Xcode-Plugin.
Ich endete damit, dass der Aufbau und Mitgestaltung Zeug mich mit
xcodebuild
.0. Voraussetzungen
Um die folgenden Schritte erfolgreich erledigt, müssen Sie installiert haben, die notwendigen provisioning-Profilen und Zertifikaten. Das bedeutet, dass Ihr code signing-sollte schon funktionieren im Allgemeinen.
1. Gebäude ein .xcarchive
DEVELOPMENT_TEAM
: Ihre 10-stellige Entwickler-team id (so etwas wie A1B2C3D4E5)2. Export zu .ipa
Beispiel einer
exportOptions.plist
:method
: ist eine derdevelopment
app-store
ad-hoc
enterprise
teamID
: Ihre 10-stellige Entwickler-team id (so etwas wie A1B2C3D4E5)Dieser Prozess ist jedenfalls näher an dem, was Sie tun würden, mit Xcode manuell, als das, was zum Beispiel die Jenkins Xcode-Plugin funktioniert.
Hinweis: Die .xcarchive-Datei wird immer develpment unterzeichnet, aber die Auswahl "app-store" als Methode im 2. Schritt wird die richtige Verteilung Unterzeichnung und umfassen auch die Verteilung Profil als "eingebettet.mobileprovision".
Hoffe, das hilft.
InformationsquelleAutor der Antwort d4Rk
Nach dem Versuch ein paar Optionen, dies sind die Lösungen, die ich war in der Lage, auf meinem CI-server:
Gehören das Entwicklerzertifikat und den privaten Schlüssel sowie das automatische provisioning-profile in der CI-Umgebung:
Mit
Automatic signing
Kräfte Sie einenDeveloper
Zertifikat undauto-generated provisioning profiles
. Eine Möglichkeit ist der export des Entwicklerzertifikat und den privaten Schlüssel (Application -> Werkzeuge -> Schlüsselbund) und die automatisch generierten provisioning-profile, um die CI-Maschine. Ein Weg, um suchen Sie die automatisch generierte provisioning-profile zu navigieren, um~/Library/MobileDevice/Provisioning\ Profiles/
verschieben Sie alle Dateien in einen backup-Ordner, öffnen Xcode und archivieren Sie das Projekt. Xcode erstellen automatisch generierte development provisioning profile und kopieren Sie Sie in dieProvisioning Profiles
Ordner.xcodebuild archive ...
erstellen einer.xcarchive
unterzeichnet fürDevelopment
.xcodebuild -exportArchive ...
können dann zurücktreten, die bauen fürDistribution
Ersetzen Sie 'Automatisch' mit 'Manuell', wenn Gebäude in einer CI-Umgebung
Bevor Sie
xcodebuild
eine Lösung ist, ersetzen Sie alle Instanzen vonProvisioningStyle = Automatic
mitProvisioningStyle = Manual
in der Projekt-Datei.sed
können verwendet werden, für die ein einfaches finden zu ersetzen, diepbxproj
Datei:sed -i '' 's/ProvisioningStyle = Automatic;/ProvisioningStyle = Manual;/' <ProjectName>.xcodeproj/project.pbxproj
@thelvis auch eine Ruby-Skriptdies zu tun mit der
xcodeproj
gem. Das Skript gibt Ihnen eine bessere Kontrolle über das, was geändert wird.xcodebuild
wird dann die code signing identity (CODE_SIGN_IDENTITY
), das in das Projekt, sowie den provisioning-Profilen (PROVISIONING_PROFILE_SPECIFIER
). Diese Einstellungen können auch zur Verfügung gestellt werden, die als Parameter anxcodebuild
und Sie überschreibt die code signing identity, und/oder provisioning-Profil in das Projekt.Schalter zur manuellen Unterzeichnung
Handbuch der Unterzeichnung gibt Ihnen absolute Kontrolle über das signieren von code Identitäten und provisioning-profile verwendet werden. Es ist wahrscheinlich die sauberste Lösung, aber mit dem Nachteil des Verlustes all die Vorteile der Automatischen signieren.
Erfahren Sie mehr über das signieren von code mit Xcode 8 kann ich wirklich empfehlen, dieser Artikel sowie die WWDC2016 Sitzung 401 - What ' s new in Xcode die app-Signierung
InformationsquelleAutor der Antwort pablobart
Ich überlege mir eine andere Möglichkeit habe ich nicht gesehen, erwähnt hier noch. Setup werden zwei identische Ziele, unterscheiden sich nur in Ihrer signing-Einstellungen.
Nachteil ist, dass Sie zu verwalten, werden zwei identische Ziele. Vorteil ist, dass die Vorteile der automatischen signieren für die Entwicklung, und nicht aufrecht zu erhalten, möglicherweise spröde Skripte, ändern Sie Ihr Projekt kurz vor dem build.
InformationsquelleAutor der Antwort Paul Buchanan
Wenn Sie mit Xcode 8.x und Jenkins für CI. Dann werden Sie wahrscheinlich Gesicht Problem mit der "Unterzeichnung “YourProjectName" erfordert einen Entwicklungs-team. Wählen Sie ein Entwicklungs-team in der Projekt-editor.
Code-Signatur ist erforderlich für Produkt-Typ 'Application' im SDK 'iOS 10.1'".** BUILD FAILED ** bei der Ausführung der Arbeit.
Was ist die Lösung?.
Lösung ist:
set-Provisioning-Profil auf Keine in Xcode Projekt erstellen Einstellungen.
In jenkins, Erstellen Sie eine shell ausführen, bevor Sie die Xcode-Einstellung und schreiben Sie den nachstehenden Befehl
Denken Sie daran: halten, shell ausführen, bevor Xcode-Einstellungen in der Build-Sektion von jenkins.
Dieser funktioniert.
InformationsquelleAutor der Antwort Ajeet Sharma
Für mich, nichts hat funktioniert. Ich habe mein problem gelöst durch ändern einer Datei in Xcode app installiert auf Ihrem Mac Mini (CI-server Jenkins), wie in diesem link:
https://www.jayway.com/2015/05/21/fixing-your-ios-build-scripts/
Zusätzlich habe ich ausgeschaltet automatische Signierung von Xcode.
Alles getan! Endlich funktioniert!
InformationsquelleAutor der Antwort Marcelo dos Santos
Bemerkte ich meine Einheit bauen, war nie das hinzufügen einer ProvisioningStyle Schlüssel zu meinem XCode Projekt. Dann fand ich eine Möglichkeit zum manuellen hinzufügen von ProvisioningStyle durch die Verwendung eines "PostProcessBuild" build-Skript. d.h. eine Einheit von code, der aufgerufen wird, nachdem die IOS-XCode-Projekt gebaut wurde, die Einheit.
Zuerst hatte ich einen Blick auf das, was das Projekt.pbxproj-Datei Aussehen soll - wenn es um die Manuelle Bereitstellung:
Dann habe ich meinen code zu replizieren, die "Struktur" der Datei oben gesehen. (mit der XCodeEditor Projekt finden Sie hier: XCodeEditor)
InformationsquelleAutor der Antwort UberGeoff
Fest, was es für mich war: http://code-dojo.blogspot.jp/2012/09/fix-ios-code-signing-issue-when-using.html
... kopieren von Zertifikaten von Login-Schlüsselbund System-Schlüsselbund.
Vielleicht wollen Sie auch alle dev-Zertifikate zu " Erlauben Sie alle Anwendungen, um auf dieses Element zugreifen (Rechtsklick/Information/Access Control).
InformationsquelleAutor der Antwort BadmintonCat
Gibt es ein tool namens fastlane die macht mittels xcodebuild viel einfacher, und es wird behauptet Sinn neue updates weiterhin zu unterstützen, Veränderungen zu xcode. Es macht es viel einfacher zu erstellen Skripte und config für den Aufbau und die Mitgestaltung Ihrer app unter vielen anderen xcode-automation-tools, die es unterstützt. Ich würde empfehlen ihm einen Blick zu.
InformationsquelleAutor der Antwort lastlink