wake-up-neo.com

Stellen Sie xcodebuild mit der .mobileprovision-Datei bereit

Ich stelle Jenkins für die Automatisierung von iOS-Builds ein. Gibt es eine Möglichkeit, eine .mobileprovision-Datei bereitzustellen, die nicht zum Bereitstellungstool in Xcode in xcodebuild hinzugefügt wird?

Ich weiß, dass ich PROVISIONING_PROFILE und PROVISIONING_PROFILE [sdk = iphoneos *] verwenden kann, aber das Bereitstellungsprofil muss dem Organizer hinzugefügt werden.

Ich weiß, dass ich die Operation mit xcrun machen kann. Bevor Sie xcrun ausführen, muss die App jedoch erfolgreich mit xcodebuild signiert werden. 

Gibt es eine Möglichkeit, die Provisioning-Profildatei (.mobileprovision) für xcodebuild bereitzustellen?

26

Wir haben eine Lösung dafür - im Wesentlichen müssen Sie die .mobileprovision-Datei "installieren", indem Sie sie in ein Verzeichnis kopieren, das nach der UUID der mobilen Bereitstellungsdatei benannt ist. Dies ist, was der Xcode Organizer tatsächlich ausführt, wenn Sie auf eine .mobileprovision-Datei doppelklicken.

Es gibt ein kleines Programm namens mpParse, das die UUID aus der vom Skript verwendeten mobileprovision-Datei extrahieren kann - Link zum Herunterladen im Code. Dann ist es ganz einfach, die mobileprovision-Datei an den richtigen Ort zu kopieren.

Hier ist ein Shell-Skript, das ich dazu gemacht habe:

#!/bin/sh

# 2012 - Ben Clayton (benvium). Calvium Ltd
# Found at https://Gist.github.com/2568707
#
# This script installs a .mobileprovision file without using Xcode. Unlike Xcode, it'll 
# work over SSH.
#
# Requires Mac OS X (I'm using 10.7 and Xcode 4.3.2)
#
# IMPORTANT NOTE: You need to download and install the mpParse executable from     http://idevblog.info/mobileprovision-files-structure-and-reading
# and place it in the same folder as this script for this to work.
#
# Usage installMobileProvisionFile.sh path/to/foobar.mobileprovision

if [ ! $# == 1 ]; then
 echo "Usage: $0 (path/to/mobileprovision)"
 exit
fi

mp=$1

uuid=`/usr/libexec/PlistBuddy -c 'Print UUID' /dev/stdin <<< $(security cms -D -i ${mp})`

echo "Found UUID $uuid"

output="~/Library/MobileDevice/Provisioning Profiles/$uuid.mobileprovision"

echo "copying to $output.."
cp "${mp}" "$output"

echo "done"

Sie können das Skript direkt von https://Gist.github.com/2568707 herunterladen. _

Nachdem Sie das Skript ausgeführt haben, können Sie PROVISIONING_PROFILE und PROVISIONING_PROFILE [sdk = iphoneos *] in xcodebuild verwenden, um Ihre App zu erstellen. Wir verwenden das in der Produktion.

Edit: Nur als Referenz, ich habe im Wesentlichen diese Frage hier vor einiger Zeit gestellt ( Kann eine Xcode .mobileprovision-Datei von der Kommandozeile aus installiert werden? ) Und kam auf die obige Frage, als es niemand schien wissen :-)

Update: Als Alternative zu mpParse könnten Apple-Tools verwendet werden: /usr/libexec/PlistBuddy -c 'Print UUID' /dev/stdin <<< $(security cms -D -i path_to_mobileprovision)

47
Ben Clayton

Wenn Sie Seufzen von Fastlane verwenden, können Sie die Ausgabe einer Variablen provision_id=sigh zuweisen.

das funktioniert auch, wenn Seufzer Params hat: sigh(...)

Dies ist das einzige Skript, das für mich funktioniert hat:

`var = $ (grep UUID -A1 -a | grep -io" [-A-Z0-9] {36} ") '

verwenden mit: "$var.mobileprovision"

0
wolffan