450 Stimmen

Xcode "Erstellen und Archivieren" von der Kommandozeile aus

Xcode 3.2 bietet eine großartige neue Funktion im Menü "Build", "Build and Archive", die eine .ipa-Datei für die Ad-hoc-Verteilung erzeugt. Sie können auch den Organizer öffnen, zu "Archivierte Programme" gehen und "Programm bei iTunesConnect einreichen".

Gibt es eine Möglichkeit, "Build and Archive" von der Kommandozeile aus zu verwenden (als Teil eines Build-Skripts)? Ich würde annehmen, dass xcodebuild irgendwie involviert sein würde, aber die man Seite scheint nichts darüber zu sagen.

UPDATE Michael Grinich bat um eine Klarstellung; hier ist, was genau Sie nicht mit Befehlszeilen-Builds tun können, Funktionen, die Sie NUR mit dem Organizer von Xcode tun können, nachdem Sie "Build and Archive".

  1. Sie können auf "Share Application..." klicken, um Ihre IPA mit Beta-Testern zu teilen. Wie Guillaume weiter unten ausführt, benötigt diese IPA-Datei dank einiger Xcode-Magie keine separat verteilte .mobileprovision-Datei, die die Betatester installieren müssen; das ist magisch. Kein Kommandozeilenskript kann das. Das Skript von Arrix (eingereicht am 1. Mai) zum Beispiel erfüllt diese Anforderung nicht.
  2. Noch wichtiger ist, dass Sie nach dem Betatest eines Builds auf "Programm bei iTunes Connect einreichen" klicken können, um genau das gleiche Build bei Apple einzureichen, nämlich das von Ihnen getestete Binärprogramm, ohne es neu zu erstellen. Das ist von der Kommandozeile aus nicht möglich, weil das Signieren der App Teil des Build-Prozesses ist; man kann Bits für Ad-hoc-Beta-Tests signieren ODER man kann sie für die Einreichung im App Store signieren, aber nicht beides. Keine IPA, die auf der Kommandozeile erstellt wurde, kann auf Telefonen einem Betatest unterzogen werden und dann direkt bei Apple eingereicht werden.

Ich würde mich freuen, wenn mich jemand eines Besseren belehren könnte: Beide Funktionen funktionieren hervorragend in der Xcode-GUI und können nicht über die Befehlszeile repliziert werden.

329voto

vdaubry Punkte 11239

Ich habe herausgefunden, wie man den Build- und Archivierungsprozess von der Kommandozeile aus automatisieren kann, ich habe einfach ein Blog-Artikel und erklärt, wie Sie das erreichen können.

Der Befehl, den Sie verwenden müssen, lautet xcrun :

/usr/bin/xcrun -sdk iphoneos PackageApplication \
-v "${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app" \
-o "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa" \
--sign "${DEVELOPER_NAME}" \
--embed "${PROVISONING_PROFILE}"

Alle Einzelheiten finden Sie unter Der Artikel . Wenn Sie irgendwelche Fragen haben, zögern Sie nicht zu fragen.

296voto

Reid Ellis Punkte 3950

In Xcode 4.2 können Sie dazu das Flag -scheme verwenden:

xcodebuild -scheme <SchemeName> archive

Nach diesem Befehl wird das Archiv im Xcode Organizer angezeigt.

192voto

Raj Punkte 5615

Aktualisieren meiner Antwort mit Xcode 9 und Swift

Archiv

xcodebuild -workspace <ProjectName>/<ProjectName>.xcworkspace \
  -scheme <schemeName> clean archive -configuration release \
  -sdk iphoneos -archivePath <ProjectName>.xcarchive

IPA-Ausfuhr ( Bitte beachten Sie die Exportoptionen plist )

xcodebuild -exportArchive -archivePath  <ProjectName>.xcarchive \
  -exportOptionsPlist  <ProjectName>/exportOptions.plist \
  -exportPath  <ProjectName>.ipa

Für diejenigen, die die exportOptions.plist nicht kennen, https://blog.bitrise.io/post/new-export-options-plist-in-xcode-9


Diejenigen, die dies für die Erstellung von Projekten in CI/CD-Tools wie teamcity/jenkins, stellen Sie bitte sicher, dass Sie die richtige Xcode in der Build-Agent für beide Archiv-und Export installiert sind.

Sie können dafür eine der beiden folgenden Optionen verwenden.

  1. Verwenden Sie den vollständigen Pfad zu xcodebuild,

    /Applications/Xcode 9.3.1.app/Contents/Developer/usr/bin/xcodebuild

  2. Verwenden Sie xcode-select,

    xcode-select -switch /Applications/Xcode 9.3.1.app


Hier ist meine alte Antwort

Hier ist Befehlszeilenskript für die Erstellung von Archiv-und IPA-Beispiel. Ich habe ein iPhone xcode Projekt, das sich im Ordner Desktop/MyiOSApp befindet.

Führen Sie die folgenden Befehle nacheinander aus:

cd /Users/username/Desktop/MyiOSApp/

xcodebuild -scheme MyiOSApp archive \
  -archivePath /Users/username/Desktop/MyiOSApp.xcarchive

xcodebuild -exportArchive -exportFormat ipa \
  -archivePath "/Users/username/Desktop/MyiOSApp.xcarchive" \
  -exportPath "/Users/username/Desktop/MyiOSApp.ipa" \
  -exportProvisioningProfile "MyCompany Distribution Profile"

Dies ist mit Xcode 5 getestet und funktioniert gut für mich.

32voto

Arrix Punkte 2671

Ich habe mein eigenes Build-Skript verwendet, um das ipa-Paket für die Ad-hoc-Verteilung zu erstellen.

die() {
    echo "$*" >&2
    exit 1
}

appname='AppName'
config='Ad Hoc Distribution'
sdk='iphoneos3.1.3'
project_dir=$(pwd)

echo using configuration $config

echo updating version number
agvtool bump -all
fullversion="$(agvtool mvers -terse1)($(agvtool vers -terse))"
echo building version $fullversion

xcodebuild -activetarget -configuration "$config" -sdk $sdk build || die "build failed"

echo making ipa...
# packaging
cd build/"$config"-iphoneos || die "no such directory"
rm -rf Payload
rm -f "$appname".*.ipa
mkdir Payload
cp -Rp "$appname.app" Payload/
if [ -f "$project_dir"/iTunesArtwork ] ; then
    cp -f "$project_dir"/iTunesArtwork Payload/iTunesArtwork
fi

ipaname="$appname.$fullversion.$(date -u +%Y%m%d%H%M%S).ipa"
zip -r $ipaname Payload

echo finished making $ipaname

Das Skript erhöht auch die Versionsnummer. Sie können diesen Teil entfernen, wenn er nicht benötigt wird. Ich hoffe, es hilft.

26voto

Nik Punkte 5681

Le site xcodebuild Werkzeug kann Archivprodukte mit dem -exportArchiv Flagge (ab Xcode 5). Der Exportschritt war bisher nur über die Xcode Organizer-Benutzeroberfläche möglich.

Archivieren Sie zunächst Ihre Anwendung:

xcodebuild -scheme <scheme name> archive

Gegeben $ARCHIVE_PATH (der Pfad zum .xcarchive Datei), exportieren Sie die App aus dem Archiv mit einer der folgenden Methoden:

iOS .ipa Datei:

xcodebuild -exportArchive -exportFormat ipa -archivePath "$ARCHIVE_PATH" -exportPath "myApp.ipa" -exportProvisioningProfile "My App Provisioning profile"

Mac .app Datei:

xcodebuild -exportArchive -exportFormat app -archivePath "$ARCHIVE_PATH" -exportPath "myApp.app" -exportSigningIdentity "Developer ID Application: My Software Company"

In beiden Befehlen wird die -exportProvisioningProfile y -exportSigningIdentity Argumente sind optional. man xcodebuild für Details zur Semantik. In diesen Beispielen gab das Bereitstellungsprofil für den iOS-Build ein Bereitstellungsprofil für die AdHoc-Verteilung an, und die Signieridentität für die Mac-App gab eine Entwickler-ID für den Export als Drittanbieter-Anwendung an (d. h. nicht über den Mac App Store verteilt).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X