Frage

Ich bin mit xcodebuild meinem iPhone App von der Kommandozeile zu kompilieren. Gibt es eine Möglichkeit in irgendeiner Art von Option passiert das Provisioning-Profil einstellen? Es scheint im Allgemeinen nicht sehr viele Informationen über xcodebuild zu sein.

War es hilfreich?

Lösung

Dokumentation

Aus dem Dokument scheint, können Sie die Provisioning-Datei eingestellt, aber Sie können das Ziel angeben:

[- Ziel target]

Also, wenn Sie ein Ziel für jede Provisioning-Datei zu erstellen, können Sie das richtige Ziel von der Kommandozeile auswählen können.

Dies würde im Grunde erreichen, was Ihr fragen.

Andere Tipps

Eigentlich sollten Sie in der Lage sein, nur um es zu der Einstellung XCode Befehlszeile hinzufügen.

xcodebuild [was auch immer andere Optionen, die Sie haben] PROVISIONING_PROFILE = "[Ihr Profil Eindeutige Id hier]"

Build-Einstellungen über die Befehlszeilen sollen alles außer Kraft zu setzen, so sollte dies im Projekt oder Ziel definiert über irgendetwas gewinnt aus.

Meine Lösung ist nicht elegant, aber es macht den Job zu tun und lassen Sie mich alles auf dem Build-Server automatisieren:

#!/bin/bash

TARGET="Your App"
CONFIGURATION="Release"
SDK="iphoneos"
PROFILE_PATH="/Users/jkp/Desktop/foo.mobileprovision"
IDENTITY="iPhone Distribution: Your Company Ltd"
KEYCHAIN="/Users/jkp/Desktop/keychain"
PASSWORD="foobar"

open "${PROFILE_PATH}"
sleep 5
osascript -e "tell application \"Xcode\" to quit"
security unlock-keychain -p ${PASSWORD} ${KEYCHAIN}
xcodebuild \
  -target "${TARGET}" \
  -configuration ${CONFIGURATION} \
  -sdk iphoneos \
  CODE_SIGN_IDENTITY="${IDENTITY}" \    
  OTHER_CODE_SIGN_FLAGS="--keychain ${KEYCHAIN}"

Das Wichtigste dabei ist, dass ich nicht das Provisioning-Profil installieren, musste zuerst. Ich habe eigentlich ein anderes Skript, das die neueste Kopie des Provisioning-Profils vor jedem Build zum Download verwendet mechanisieren, das bedeutet, dass wir das Profil aktualisieren können (das Hinzufügen neue Geräte zum Beispiel) aus der Ferne und haben diese Änderungen von unserem CI-Server ohne zusätzliche Arbeit aufgenommen.

Hinweis: Ich habe da einen Weg gefunden, zu installieren oder ein Provisioning-Profil zu aktualisieren, ohne dass Xcode überhaupt zu beteiligen - viel sauberer! Siehe hier für weitere Informationen .

Das Provisioning-Profil hat von UUID zur Verfügung gestellt werden, in meinem Fall der Provisioning-Profile in dem Quellkontrollsystem überprüft werden, und werden überprüft daher durch den Entwickler mit dem Code aus / Build-Server / CI-System. Im Quellbaum haben die Profile von Menschen lesbare Namen wie MyApp.mobileprovison und werden in einem Verzeichnis mit dem Namen „ProvisioningProfiles“ befinden. Um ein Xcode-Archiv zu erstellen, müssen die Profile umbenannt und in das ~ / Library / Mobiledevice / Provisioning Profiles Verzeichnis kopiert werden, bevor xcodebuild wird sie erkennen. Dies ist ein Code-Snippet, das in einem CI-Build-Skript verwendet werden kann.

# The keychain needs to be unlocked for signing, which requires the keychain
# password. This is stored in a file in the build account only accessible to
# the build account user
if [ ! -f $HOME/.pass ] ; then
    echo "no keychain password file available"
    exit 1
fi

case `stat -L -f "%p" $HOME/.pass`
in
    *400) ;;
    *)
        echo "keychain password file permissions are not restrictive enough"
        echo "chmod 400 $HOME/.pass"
        exit 1
        ;;
esac

#
# unlock the keychain, automatically lock keychain on script exit
#
security unlock-keychain -p `cat $HOME/.pass` $HOME/Library/Keychains/login.keychain
trap "security lock-keychain $HOME/Library/Keychains/login.keychain" EXIT

#
# Extract the profile UUID from the checked in Provisioning Profile.
#
uuid=`/usr/libexec/plistbuddy -c Print:UUID /dev/stdin <<< \
        \`security cms -D -i ProvisioningProfiles/MyApp.mobileprovision\``

#
# Copy the profile to the location XCode expects to find it and start the build,
# specifying which profile and signing identity to use for the archived app
#
cp -f ProvisioningProfiles/MyApp.mobileprovision \
        "$HOME/Library/MobileDevice/Provisioning Profiles/$uuid.mobileprovision"
xcodebuild -workspace MyApp.xcworkspace -scheme MyScheme \
        -archivePath build/MyApp.xcarchive archive \
        PROVISIONING_PROFILE="$uuid" CODE_SIGN_IDENTITY="iOS Distribution"

Der Schlüsselbund entsperrt werden muss und die „/ usr / bin / Co-Design“ Werkzeug muss mit Unterzeichnung Identität zugeordnet Zugriff auf den privaten Schlüssel erlaubt sein, damit dies funktioniert - Die folgenden Referenzen wurden verwendet, um https://stackoverflow.com/a/21327591/2351246 und hinzufügen Co-Design zu privaten Schlüsseln ACL ohne Keychain zum Entriegeln und das Hinzufügen von Schlüsselbund für Co-Design ist.

Wenn das Archiv ist anschließend eine IPA exportiert wird mit xcodebuild dann der folgende Frage muss berücksichtigt werden ( xcodebuild nicht Datei kopieren von .app ). Das Provisioning-Profil muss wieder zugeführt werden. Der Skript-Schnipsel eine IPA zu schaffen

profileName=`/usr/libexec/plistbuddy -c Print:Name /dev/stdin <<< \
        \`security cms -D -i ProvisioningProfiles/MyApp.mobileprovision\``

xcodebuild \
        -exportArchive \
        -exportFormat IPA \
        -archivePath build/MyApp.xcarchive \
        -exportPath $IPADIR/MyApp.ipa \
        -exportProvisioningProfile "$profileName"

Der Schlüsselbund wird freigeschaltet werden, während dieser Befehl ausgeführt wird.

UPDATE

Auf OSX Mavericks (v10.9.5) und OSX Yosemite haben wir begonnen, Code-Signing-Fehler zu sehen:

Codesign check fails : ...../MyApp.app: resource envelope is obsolete

diesen Beitrag Check für die Ursache xcodebuild - Codesign -vvvv sagt

„Ressourcenhülle veraltet“

, um die Änderung von Apple Support in der referenzierten Post, führen Sie den folgenden Befehl vorgeschlagen zu implementieren:

 sudo perl -pi.bak -e 's/--verify"./--verify", "--no-strict",/ if /codesign.*origApp/;' `xcrun -sdk iphoneos -f PackageApplication`

Ich weiß, dies ist wahrscheinlich ein wenig aus OP Thema, aber diese Frage an erster Stelle steht, wenn für die Suche, wie Xcode erhalten Builds auf Jenkins arbeiten. Veröffentlichung einige zusätzliche Informationen hier für die Nachwelt. Und Punkte. Wenn Sie diese nützlich gefunden, bitte geben Sie Punkte:)

Wie auch immer, gingen mehrere Runden auf diesem ein paar Mal in letzter Zeit. Fand diese:

http : //code-dojo.blogspot.co.uk/2012/09/fix-ios-code-signing-issue-when-using.html

scheint zu funktionieren. Achten Sie darauf, zu:

  1. Setup der Xcode bauen als regulärer OSX Benutzer zuerst; erhalten sie Ihre verteilbare Aufbau von dort zur Festsetzung alle Provisioning-Profil Probleme durch Xcode;

  2. , um die Befehlszeile build Get Arbeits xcodebuild Verwendung als regulärer OSX Benutzer;

  3. Dann den Anweisungen in der Post folgt oben auf das Schreiben, Kopieren alle iOS certs von Login-Schlüsselanhänger im System und das Kopieren ~/Library/MobileDevice/Provisioning Profiles auf die ~jenkins/Library/MobileDevice/Provisioning Profiles Ordner Jenkins Benutzer.

Der nächste Jenkins bauen, die Befehle in Schritt unter Verwendung von 2 oben, sollte einwandfrei funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top