Je construis actuellement toutes mes applications avec hudson en utilisant xcodebuild suivi d'un xcrun sans aucun problème
J'ai reçu quelques fichiers IPA de différentes personnes que je souhaite re-signer avec un compte d'entreprise au lieu du compte d'entreprise (pour l'App Store, ou parfois distribué ad hoc).
Mon problème est que lorsque j'essaie de résilier l'application, elle ne s'installe pas sur mon appareil (et cela devrait être le cas puisqu'il s'agit d'une version d'entreprise). Le message d'erreur est sur l'appareil (pas dans iTunes) et il me dit simplement qu'il n'a pas pu installer l'application. Aucune autre information n'est donnée.
J'ai trouvé des informations, ( http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for- télécharger / )
Et cela pourrait être possible. Le problème auquel je suis confronté est qu'il ne semble pas intégrer le profil de provisionnement mobile comme je le fais avec mes builds normaux (en utilisant xcrun) est-ce possible de contrôler avec l'outil de conception de codes, ou est-il possible de re-signer avec xcrun ?
Avec mon script de démission, je fais actuellement
- décompressez app.ipa
- appname = $ (ls Payload)
- xcrun -sdk iphoneos PackageApplication -s "$ provisioning_profile" "$ project_dir / Payload / $ appname" -o "$ project_dir / app-resigned.ipa" --sign "$ provisioning_profile" --embed "$ mobileprovision"
J'ai regardé dans le fichier ipa résultant et il semble être très similaire à l'application d'origine. Quels fichiers devraient vraiment changer ici? J'ai d'abord pensé que le _CodeSignature / CodeResources changerait, mais le contenu est à peu près le même.
Les pointeurs sont très appréciés.
/usr/bin/codesign -d --entitlements :entitlements.plist /Payload/appname.app
puis lors de la démission de l'ajout--entitlements entitlements.plist
Les réponses à cette question sont un peu dépassées et manquent d'étapes potentiellement clés.Il s'agit donc d'un guide mis à jour pour installer une application d'un développeur externe.
----- Comment résilier une application iOS -----
Supposons que vous receviez une application (par exemple MyApp.ipa) d'un autre développeur, et que vous souhaitiez pouvoir l'installer et l'exécuter sur vos appareils (en utilisant ideviceinstaller , par exemple).
Préparer de nouveaux actifs de signature
La première étape consiste à obtenir un profil de provisionnement qui inclut tous les périphériques que vous souhaitez installer et exécuter. Assurez-vous que le profil contient un certificat que vous avez installé dans votre accès au trousseau (par exemple, iPhone Developer: Some Body (XXXXXXXXXX)). Téléchargez le profil (MyProfile.mobileprovision) afin de pouvoir remplacer le profil intégré dans l'application.
Ensuite, nous allons préparer un fichier de droits à inclure dans la signature. Ouvrez votre terminal et exécutez ce qui suit.
Cela créera un fichier xml décrivant votre profil d'approvisionnement . Ensuite, nous voulons extraire les droits dans un fichier.
Remplacer le profil de provisionnement et démissionner de l'application
Si vous travaillez avec un fichier .ipa , commencez par décompresser l'application (si vous avez plutôt un .app , vous pouvez ignorer cette étape).
Votre répertoire de travail contiendra désormais
Payload/
etPayload/MyApp.app/
. Ensuite, supprimez les anciens fichiers de signature de code.Remplacez le profil de provisionnement existant (c'est-à-dire embedded.mobileprovision) par le vôtre.
Maintenant, signez l'application avec le certificat inclus dans votre profil de provisioning et le droit d'accès.plist que vous avez créé précédemment.
IMPORTANT: vous devez également résilier tous les frameworks inclus dans l'application . Vous les trouverez dans
Payload/MyApp.app/Frameworks
. Si l'application est écrite en Swift ou si elle comprend des frameworks supplémentaires, ceux-ci doivent être résignés ou l'application s'installera mais ne s'exécutera pas.Vous pouvez maintenant rezip de l'application.
Terminé
Vous pouvez maintenant supprimer le
Payload
répertoire puisque vous avez votre application d'origine (MyApp.ipa) et votre version résignée (MyApp-resigned.ipa). Vous pouvez maintenant installer MyApp-resigned.ipa sur n'importe quel appareil inclus dans votre profil d'approvisionnement.la source
J'ai suivi cette réponse avec succès, mais comme les droits ont changé, j'ai simplement supprimé la
--entitlements "Payload/Application.app/Entitlements.plist"
partie de l'avant-dernière déclaration, et cela a fonctionné comme un charme.la source
SecItemCopyMatching: missing entitlement
. Je n'ai pas le fichier Entitlements.plist séparé, afin de préserver les droits que j'ai utilisé @ commentaire de LordT : d' abord créer un fichier de droits:echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>/usr/bin/codesign -d --entitlements - temp/Payload/$APP_NAME | sed -E -e '1d'" > temp/newEntitlements
, puis utilisez lors de la signature:--entitlements temp/newEntitlements
.Vérifié avec Mac OS High Sierra et Xcode 10
Vous pouvez simplement implémenter la même chose en utilisant l'application iResign .
Donnez le chemin de 1) .ipa
2) Nouveau profil de provision
3) Fichier de droits (facultatif, ajoutez seulement si vous avez le droit)
4) Identifiant du bundle
5) Certificat de distribution
Vous pouvez voir le fichier .ipa de sortie enregistré après la reconnexion
Outil simple et puissant
la source
Aucune de ces approches démissionnaires ne fonctionnait pour moi, alors j'ai dû trouver autre chose.
Dans mon cas, j'avais un IPA avec un certificat expiré. J'aurais pu reconstruire l'application, mais comme nous voulions nous assurer que nous distribuions exactement la même version (juste avec un nouveau certificat), nous ne voulions pas la reconstruire.
Au lieu des moyens de démissionner mentionnés dans les autres réponses, je me suis tourné vers la méthode de Xcode de création d'un IPA, qui commence par un .xcarchive d'une build.
J'ai dupliqué un .xcarchive existant et commencé à remplacer le contenu. (J'ai ignoré le fichier .dSYM.)
J'ai extrait l'ancienne application de l'ancien fichier IPA (par décompression; l'application est la seule chose dans le dossier Payload)
J'ai déplacé cette application dans la nouvelle .xcarchive, en
Products/Applications
remplaçant l'application qui s'y trouvait.J'ai édité
Info.plist
, éditéApplicationProperties/ApplicationPath
ApplicationProperties/CFBundleIdentifier
ApplicationProperties/CFBundleShortVersionString
ApplicationProperties/CFBundleVersion
Name
J'ai déplacé le .xcarchive dans le dossier d'archive de Xcode, généralement
/Users/xxxx/Library/Developer/Xcode/Archives
.Dans Xcode, j'ai ouvert la fenêtre de l'Organisateur, choisi cette nouvelle archive et effectué une exportation régulière (dans ce cas Enterprise).
Le résultat est un bon IPA qui fonctionne.
la source
Je pense que le plus simple est d'utiliser Fastlane:
la source
Avec l'option de démission de Fastlane soupir, vous pouvez le faire très facilement.
Vous pouvez également télécharger le profil en utilisant soupir, juste avant la commande.
la source
Merci, Erik, d'avoir publié ceci. Cela a fonctionné pour moi. J'aimerais ajouter une note sur une étape supplémentaire dont j'avais besoin. Dans "Payload / Application.app /", il y avait un répertoire nommé " CACertChains " qui contenait un fichier nommé " cacert.pem ". J'ai dû supprimer le répertoire et le .pem pour terminer ces étapes. Merci encore! -
la source
Si vous avez une application avec des extensions et / ou une application de surveillance et que vous avez plusieurs profils d'approvisionnement pour chaque extension / application de surveillance, vous devez utiliser ce script pour signer à nouveau le fichier ipa.
Re-signature du script sur Github
Voici un exemple d'utilisation de ce script:
Vous pouvez également inclure d'autres profils de provisionnement d'extensions en les ajoutant avec une autre option -p.
Pour moi, tous les profils d'approvisionnement ont été signés par le même certificat / identité de signature.
la source
fastlane sigh resign YourApp.ipa --signing_identity "iPhone Distribution: YourCompanyOrDeveloperName" -p <path_to_provisioning_profile_for_app>.mobileprovision -p <path_to_provisioning_profile_for_watchkitextension>.mobileprovision
plutôt.