web-dev-qa-db-fra.com

Un fichier Xcode .mobileprovision peut-il être «installé» à partir de la ligne de commande?

J'essaie d'automatiser le processus de création d'applications pour nos clients à l'aide de scripts bash exécutés sur un Mac Mini Server (OSX 10.7).

Mon script est basé sur le script incroyablement utile de github publié à l'origine sur https://Gist.github.com/949831

Je crée l'application à l'aide de xcodebuild, puis je signe et j'intègre le fichier mobileprovision à l'aide de xcrun.

Lorsque je fais tout cela avec un fichier mobileprovision que j'ai installé manuellement dans Xcode à l'aide de l'interface graphique (par exemple, en double-cliquant), cela fonctionne bien. Si j'essaie simplement d'utiliser un fichier mobileprovision copié sur le serveur avec SCP, il échoue (erreur de signature de code: le profil d'approvisionnement '123abc123' est introuvable.)

Vraisemblablement, c'est parce que le fichier n'est pas "installé".

Existe-t-il un moyen d'installer le fichier mobileprovision depuis le terminal? J'utilise SSH, donc l'utilisation de choses telles que la commande "open" ne fonctionnera pas.

Merci!

46
Ben Clayton

Depuis que j'ai posé cette question, j'ai moi-même construit une solution. Le secret est de simplement copier le fichier dans le dossier ~/Library/MobileDevice/Provisioning Profiles /, mais (voici la partie délicate) renommé en [The UUID] .mobileprovision.

L'UUID est conservé dans une partie texte du fichier lui-même (dans une liste). Malheureusement, le fichier inclut également le binaire, de sorte que la lecture par défaut ne peut pas le lire. Heureusement ce type a construit un petit utilitaire de ligne de commande pour récupérer l'UUID (et d'autres choses encore).

Voici mon script de travail complet:

https://Gist.github.com/2568707

26
Ben Clayton

Si vous ne souhaitez pas télécharger les dépendances externes (comme Ben l'a fait), les éléments suivants devraient fonctionner dans la plupart des cas:

uuid=`grep UUID -A1 -a adhoc.mobileprovision | grep -io "[-A-F0-9]\{36\}"`
cp adhoc.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$uuid.mobileprovision

Notez que a l'UUID est composé de chiffres hexadécimaux donc la plage correcte est [-A-F0-9] et pas [-A-Z0-9].

Bonus: Téléchargez et installez des profils

À l'aide de outil cupertino , l'extrait de code suivant télécharge tous vos profils de distribution à partir du portail des développeurs et les installe.

ios profiles:download:all --type distribution

for file in *.*provision*; do
    uuid=`grep UUID -A1 -a "$file" | grep -io "[-A-F0-9]\{36\}"`
    extension="${file##*.}"
    echo "$file -> $uuid"
    mv -f "$file" ~/Library/MobileDevice/Provisioning\ Profiles/"$uuid.$extension"
done

cupertino (la commande ios) peut être installé avec Sudo gem install cupertino.

70
nschum

Un recueil de toutes les autres réponses pdate_provisioning_profile.sh :

#!/bin/sh
#
# Download and install a single iOS provisioning profile
# Requires https://github.com/nomad/cupertino
#
# Usage
# - Login to your account once:
# ios login
# - Configure TEAM and PROFILE (instructions below)
# - Run update_provisioning_profile.sh at anytime, usually after adding/removing devices to the profile

# Configure the team identifier
# Copy it from developer portal or just use cupertino to get it:
# ios devices
# Copy the string in parens and set it as TEAM
TEAM="team id"

# Configure the profile name you want to manage
# Copy it from developer portal or use cupertino to get a list (ignoring Xcode managed profiles):
# ios profiles --team ${TEAM} | grep -v 'iOS Team Provisioning Profile'
# Copy the name as-is and set as PROFILE
PROFILE="profile name"

# Fetch the profile using `cupertino` tool
# you need to run `ios login` once to setup the account
ios profiles:download "${PROFILE}" --team ${TEAM}
PROFILE_FILE=`echo $PROFILE | tr ' ' '_'` # `cupertino` tool will replace spaces with _
UUID=`/usr/libexec/PlistBuddy -c 'Print :UUID' /dev/stdin <<< $(security cms -D -i ${PROFILE_FILE}.mobileprovision)`

# copy where Xcode can find it
cp ${PROFILE_FILE}.mobileprovision "$HOME/Library/MobileDevice/Provisioning Profiles/${UUID}.mobileprovision"

# clean
rm ${PROFILE_FILE}.mobileprovision

Facile à adapter à vos besoins d'approvisionnement.

6
djromero

On dirait que Apple a ajouté une ligne vide dans le fichier de profil d'approvisionnement .mobileprovision sous chaque paire clé-valeur et l'option grep ne fonctionne plus.

Voici comment le récupérer avec PlistBuddy et la sécurité à l'aide d'un script python

command = "/usr/libexec/PlistBuddy -c 'Print :UUID' /dev/stdin <<< $(security cms -D -i abc.mobileprovision)"
uuid = os.popen(command).readline().rstrip('\n')
3
indiantroy

Nous exécutons nos versions dans Jenkins et avons eu un problème similaire. Notre profil de provisionnement ad hoc change assez souvent et nous ne voulons pas courir vers chacun de nos esclaves de build en les installant dans xcode à chaque fois qu'ils changent, alors voici ce que j'ai pu faire:

/usr/bin/xcrun -sdk iphoneos PackageApplication -v <path to yourapp.app> -o <path to your .ipa file> --sign "<Name of signing identity>" --embed <path to .mobileprovision file>

Le "" est ce que vous voyez dans la section "Signature du code" dans les paramètres de construction de votre cible.

2
jpancoast

Utilisez fastlane soupir pour installer un fichier provisoire particulier ou vous pouvez en créer un nouveau.

fastlane sigh renew --adhoc -n "provisional-profile-name" --app_identifier "app-identifier" -u "user-name" --ignore_profiles_with_different_name

provisoire-profile-name est juste le nom du profil, ne contient pas l'extension .mobileprovision.

Pour créer un nouveau profil adhoc avec tous les UUID de périphérique ajoutés,

fastlane sigh --adhoc --app_identifier "app-identifier" -u "username"

Fastfile,

lane :build do

sigh(
adhoc: true,
app_identifier: "***APP_ID**",
provisioning_name: "**Profile_name**",
username: "Apple_ID",
force: true,
skip_certificate_verification: true,
)


gym(
#export_options: "exportPlist.plist",
scheme: "**scheme-name**",
export_method: "ad-hoc",
xcargs: "PROVISIONING_PROFILE=$SIGH_UUID",
)
end
1
Vineeth

Il semble qu'il n'y ait eu aucun développement récent sur cupertino. Fastlane dispose d'un outil appelé sigh pour gérer les profils d'approvisionnement (créer, télécharger, renouveler, réparer): https://github.com/fastlane/fastlane/tree/master/ soupir # readme

1
Toland Hon