4 votes

Nom du profil de provisionnement utilisé pour signer une application iPhone ?

J'ai écrit un script qui utilise xcodebuild pour générer une construction AdHoc d'une application iPhone.

Je voudrais modifier ce script pour sortir le nom de la Profil d'approvisionnement utilisé pour signer la construction.
Cela me permettrait d'inclure le profil d'approvisionnement dans le zip qui est automatiquement généré. Ainsi, je pourrais envoyer automatiquement l'archive aux testeurs AdHoc et m'assurer qu'ils disposent du bon profil de provisionnement pour installer l'application.

Existe-t-il un moyen de extraire le nom du profil de provisionnement ou le fichier utilisé pour signer l'application :

  • à partir de l'application construite et signée
  • à partir du projet Xcode (je ne veux pas analyser manuellement le fichier project.pbxproj, car cette solution pourrait être interrompue lors de la prochaine mise à jour de Xcode).
  • de toute autre manière qui soit scriptable

Unforgiven Proposition de pour utiliser la commande security pour obtenir le nom du certificat utilisé pour signer l'application. Une fois que vous avez cette information, y a-t-il un moyen de trouver le nom du profil d'approvisionnement ?


Voici ce que j'ai essayé :

Malheureusement, la sortie de xcodebuild pendant la construction ne contient pas cette information. Pendant l'étape CodeSign, il y a la ligne :

/usr/bin/codesign -f -s "iPhone Distribution: My name" ...

mais je ne peux pas le faire correspondre avec un certificat.

J'ai cherché à utiliser le codesign, et la commande

/usr/bin/codesign -d -vvv --entitlements - -r - /Users/lv/Desktop/TicTacBoo.app/TicTacBoosemblait prometteur, mais il ne me donne pas les informations dont j'ai besoin.  

Je n'ai pas non plus trouvé d'option utile dans xcodebuild.

6voto

Jon-Eric Points 7749

Le profil d'approvisionnement est déjà sur l'application. Vous n'avez pas besoin d'une autre copie dans votre fichier zip (sauf si vos testeurs ne comprennent pas comment utiliser la copie à l'intérieur de l'application).

Il s'appelle YourApplication.app/embedded.mobileprovision

Cela ne répond pas à votre question car le nom de fichier d'origine est perdu, mais cela semble résoudre votre plus gros problème.

2voto

Massimo Cafaro Points 18759

Vous pouvez utiliser la commande "security" à partir du terminal ; malheureusement, au moins sur mon MBP avec Snow Leopard, elle semble causer un défaut de segmentation dans l'une des commandes que vous devez lancer. Pour plus d'informations, utilisez la commande suivante à partir du terminal

man security

Quoi qu'il en soit, voici ce que vous pouvez essayer, en supposant que vos certificats de développement/production sont stockés dans le trousseau de connexion :

security unlock-keychain login.keychain;
security find-certificate -a -c "iPhone Distribution: Your name"  -p > cert.pem;

La deuxième commande provoque un défaut de segmentation (causé par l'argument -c), mais elle devrait correspondre exactement à ce dont vous avez besoin. Alternativement, vous pouvez utiliser

security find-identity -p codesigning -v;

pour obtenir une liste de tous les certificats valides que vous pouvez utiliser pour signer vos applications. Pour chaque certificat, la sortie contient également le condensé de message SHA1, de sorte que vous pouvez facilement rechercher le certificat dans le trousseau correspondant au condensé SHA1 associé à "iPhone Distribution" : Votre nom". Cela nécessite toutefois que vous écriviez votre propre application en utilisant les API du trousseau de clés.

Faites-moi savoir si cela fonctionne sur votre mac ou si vous rencontrez le même problème de défaut de segmentation.

EDIT/UPDATE : J'ai vérifié le bug sur d'autres machines et déposé un bug auprès d'Apple.

0voto

David Gelhar Points 20703

Que diriez-vous de rechercher dans le fichier plist _CodeSignature/CodeResources (de l'application construite) les fichiers de type "mobileprovision" ?

Voici une façon de le faire en utilisant defaults(1) pour lire le fichier plist. Vous devez copier le fichier CodeResources vers quelque chose avec le suffixe ".plist" pour que defaults soit satisfait...

cp /build/Distribution-iphoneos/MyApp.app/_CodeSignature/CodeResources /tmp/defaults.plist
defaults read /tmp/defaults files |grep .mobileprovision |grep -v embedded.mobileprovision

(dans mon cas de test, il y avait 2 entrées .mobileprovision ; ignorez celle nommée "embedded.mobileprovision")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X