web-dev-qa-db-fra.com

Comment re-signer le fichier ipa?

Comment signer le fichier .ipa avec un profil de provisioning après avoir généré un IPA comme suit avec un profil de provision différent? J'aimerais signer l'IPA avec un profil d'approvisionnement ad hoc pour les tests bêta, puis re-signer l'IPA exacte avec un profil d'approvisionnement de soumission d'application pour le magasin d'applications.

/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app" -o "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa" --sign "${DEVELOPER_NAME}" --embed "${PROVISONING_PROFILE}"
101
Johnny

C'est vraiment facile à faire depuis la ligne de commande. J'ai eu un résumé d'un script pour le faire. Il a maintenant été intégré au script ipa_sign dans https://github.com/RichardBronosky/ota-tools que j'utilise quotidiennement. Si vous avez des questions sur l'utilisation de ces outils, n'hésitez pas.

Le coeur de ceci est ceci:

IPA="/path/to/file.ipa"
PROVISION="/path/to/file.mobileprovision"
CERTIFICATE="Name of certificate: To sign with" # must be in keychain
# unzip the ipa
unzip -q "$IPA"
# remove the signature
rm -rf Payload/*.app/_CodeSignature
# replace the provision
cp "$PROVISION" Payload/*.app/embedded.mobileprovision
# sign with the new certificate (--resource-rules has been deprecated OS X Yosemite (10.10), it can safely be removed)
/usr/bin/codesign -f -s "$CERTIFICATE" Payload/*.app
# Zip it back up
Zip -qr resigned.ipa Payload

Votre nouvelle application signée s'appelle resigned.ipa

189
Bruno Bronosky

Vérifiez iResign pour un outil simple sur la façon de le faire!

[modifier] après quelques remarques, j'ai trouvé une solution pour démissionner avec un trousseau. Vous pouvez le vérifier à https://Gist.github.com/Weptun/540699

35
LordT

C'est un peu la vieille question, mais avec le dernier XCode, codesign est facile:

$ codesign -s my_certificate example.ipa 

$ codesign -vv example.ipa
example.ipa: valid on disk
example.ipa: satisfies its Designated Requirement
13
BryanH

J'ai mis à jour le code de Bryan pour mon Sierra iMac:

# this version was tested OK vith macOs Sierra 10.12.5 (16F73) on oct 0th, 2017
# original ipa file must be store in current working directory 

IPA="ipa-filename.ipa"
PROVISION="path-to.mobileprovision"
CERTIFICATE="hexadecimal-certificate-identifier" # must be in keychain
# identifier maybe retrieved by running: security find-identity -v -p codesigning

# unzip the ipa
unzip -q "$IPA"

# remove the signature
rm -rf Payload/*.app/_CodeSignature

# replace the provision
cp "$PROVISION" Payload/*.app/embedded.mobileprovision

# generate entitlements for current app
cd Payload/
codesign -d --entitlements - *.app > entitlements.plist
cd ..
mv Payload/entitlements.plist entitlements.plist

# sign with the new certificate and entitlements
/usr/bin/codesign -f -s "$CERTIFICATE" '--entitlements' 'entitlements.plist'  Payload/*.app

# Zip it back up
Zip -qr resigned.ipa Payload
7
Pierre Priot

Les réponses affichées ici ne fonctionnent pas tout à fait pour moi. Ils ont principalement ignoré la signature des frameworks intégrés (ou des droits).

Voici ce qui a fonctionné pour moi (cela suppose qu'un fichier ipa existe dans le répertoire en cours):

PROVISION="/path/to/file.mobileprovision"
CERTIFICATE="Name of certificate: To sign with" # must be in the keychain

unzip -q *.ipa
rm -rf Payload/*.app/_CodeSignature/

# Replace embedded provisioning profile
cp "$PROVISION" Payload/*.app/embedded.mobileprovision

# Extract entitlements from app
codesign -d --entitlements :entitlements.plist Payload/*.app/

# Re-sign embedded frameworks
codesign -f -s "$CERTIFICATE" --entitlements entitlements.plist Payload/*.app/Frameworks/*

# Re-sign the app (with entitlements)
codesign -f -s "$CERTIFICATE" --entitlements entitlements.plist Payload/*.app/

Zip -qr resigned.ipa Payload

# Cleanup
rm entitlements.plist
rm -r Payload/
7
simonseyer

Fastlane's sigh fournit une solution assez robuste pour démissionner des agents d’investissement indépendants.

De leur fichier README:

Démissionner

Si vous avez généré votre fichier ipa mais que vous souhaitez appliquer un code différent lors de la signature sur le fichier ipa, vous pouvez utiliser sigh resign:

fastlane sigh resign

sigh trouvera le fichier ipa et le profil de provisioning s'il se trouve dans le dossier actuel.

Vous pouvez transmettre plus d'informations à l'aide de la ligne de commande:

fastlane sigh resign ./path/app.ipa --signing_identity "iPhone Distribution: Felix Krause" -p "my.mobileprovision"

Il va même gérer profils de provisioning pour les applications imbriquées (par exemple, si vous avez des applications de kit de surveillance)

5
mattliu
  1. Décompressez le fichier .ipa en modifiant son extension avec .Zip
  2. Aller à la charge utile. Vous trouverez le fichier .app
  3. Cliquez avec le bouton droit sur le fichier .app, puis cliquez sur Afficher le contenu du package.
  4. Supprimer le dossier _CodeSigned
  5. Remplacez le fichier embedded.mobileprovision Par le nouveau profil de provision
  6. Accédez à KeyChain Access et assurez-vous que le certificat associé au profil provisoire est présent.
  7. Exécutez la commande mentionnée ci-dessous: /usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

  8. Maintenant, compressez à nouveau le dossier Payload et modifiez l'extension .Zip avec .ipa

J'espère que cela vous aidera.

Pour référence, suivez le lien ci-dessous: http://www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-Apple-accounts/

5
Dharmesh Siddhpura

Essayez cette application http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-upload /

Il est supposé vous aider à démissionner du fichier IPA. J'ai essayé moi-même mais je n'ai pas réussi à obtenir une erreur avec Entitlements.plist. Pourrait juste être un problème avec mon projet. Tu devrais essayer.

1
honcheng