Wie signiere ich die ipa-Datei erneut?

107

Wie signiere ich die IPA-Datei mit einem Bereitstellungsprofil, nachdem ich eine IPA wie die folgende mit einem anderen Bereitstellungsprofil generiert habe? Ich möchte die IPA mit einem Ad-hoc-Bereitstellungsprofil für Betatests signieren und dann die genaue IPA mit einem Bereitstellungsprofil für die App-Übermittlung für den App Store erneut signieren.

/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}"
Johnny
quelle
1
Mögliches Duplikat von IPA (iPhone) neu
signieren

Antworten:

207

Es ist wirklich einfach von der Kommandozeile aus zu tun. Ich hatte einen Kern eines Skripts dafür. Es wurde jetzt in das Skript ipa_sign unter https://github.com/RichardBronosky/ota-tools aufgenommen, das ich täglich verwende. Wenn Sie Fragen zur Verwendung dieser Tools haben, zögern Sie nicht zu fragen.

Das Herzstück ist folgendes:

CODESIGN_ALLOCATE=`xcrun --find codesign_allocate`; export CODESIGN_ALLOCATE
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

Ihre neu signierte App heißt resigned.ipa

Bruno Bronosky
quelle
31
7 Stimmen und keine einzige Frage. Ich denke meine Bash ist genau so klar.
Bruno Bronosky
4
In der Tat ist es nett, Sir.
Rui Peres
3
@ Rahmathullah MPulikkal Ich sehe, ich hatte einen Pfad im Kern fälschlicherweise fest codiert. Sie sollten wirklich github.com/RichardBronosky/ota-tools/blob/master/ipa_sign anstelle des Kerns verwenden. Es ist der gepflegte Code.
Bruno Bronosky
5
Möglicherweise wird eine Warnung / ein Fehler bei --resource-rules-Parametern angezeigt, die in OS X Yosemite (10.10) veraltet sind. Löschen Sie einfach diesen Parameter, um dieses Problem zu beheben.
ıɾuǝʞ
4
Eine kleine Anmerkung: es sieht aus wie CodeResourcesjetzt befindet innerhalb des _CodeSignatureOrdners, so dass Sie nur diesen Ordner entfernen müssen.
dadude999
36

In iResign finden Sie ein einfaches Tool dazu!

[Bearbeiten] Nach einigem Hin und Her fand ich eine Lösung für den schlüsselbundbewussten Rücktritt. Sie können es unter https://gist.github.com/Weptun/5406993 überprüfen

Blitz
quelle
Gibt es ein Tool, das den Anzeigenamen zusammen mit der Bundle-ID während des Rücktritts ändern kann? Dies hilft dabei, unterschiedliche Anzeigenamen für unterschiedliche Umgebungen zu haben. wie App-Dev, App-QA, App-Stage usw.
Nishanth Nair
1
Ja, die Datei floatsign.sh macht genau das.
Blitz
Funktioniert. Einfach und schön.
Arjun Kalidas
13

Eine alte Frage, aber mit dem neuesten XCode, codesignist einfach:

$ codesign -s my_certificate example.ipa 

$ codesign -vv example.ipa
example.ipa: valid on disk
example.ipa: satisfies its Designated Requirement
BryanH
quelle
2
@Pavel Diese Frage wurde beantwortet, als iOS 6.x die neueste Version war. Seitdem hatten wir zwei Hauptversionen, die offensichtlich viele Dinge verändert haben. Möglicherweise möchten Sie Ihre Suche auf Antworten beschränken, die auf die aktuelle Technologie abzielen.
BryanH
Es hat bei mir funktioniert. Sie müssen "my_certificate" durch den Namen des Schlüssels in Ihrer Schlüsselkette ersetzen.
Franziskus Karsunke
2
codesignBefehl wird auch in der Antwort @BrunoBronosky verwendet. Ich kann es nicht direkt für die Datei "* .ipa" verwenden, und die Optionen "-vv" werden immer code object is not signed at allfür Dateien zurückgegeben, von denen ich weiß, dass sie signiert sind ...
Mariano Paniga
12

Die hier geposteten Antworten haben bei mir nicht ganz funktioniert. Sie haben hauptsächlich das Signieren eingebetteter Frameworks (oder einschließlich der Berechtigungen) übersprungen.

Folgendes hat bei mir funktioniert (es wird davon ausgegangen, dass sich eine IPA-Datei im aktuellen Verzeichnis befindet):

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/
Simonseyer
quelle
Nützlicher Kommentar aus dem obigen Beitrag (Rich): stackoverflow.com/questions/5160863/…
Serzas
9

Fastlanes Seufzer bietet eine ziemlich robuste Lösung für den Rücktritt von IPAs.

Aus ihrer README:

Zurücktreten

Wenn Sie Ihre ipaDatei generiert haben , aber eine andere Codesignatur auf die ipa-Datei anwenden möchten, können Sie Folgendes verwenden sigh resign:

fastlane sigh resign

sigh findet die ipa-Datei und das Bereitstellungsprofil für Sie, wenn sie sich im aktuellen Ordner befinden.

Sie können weitere Informationen über die Befehlszeile übergeben:

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

Es werden sogar Bereitstellungsprofile für verschachtelte Anwendungen verarbeitet (z. B. wenn Sie Watchkit-Apps haben).

mattliu
quelle
8

Ich habe Bryans Code für meinen Sierra iMac aktualisiert:

# 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
Pierre Priot
quelle
i git den folgenden Fehler entitlements.plist: unerkannt Blob - Typ (Annahme blind) entitlements.plist: ungültige Länge in Anspruch Blob
Amr Verärgerte
Können Sie den Inhalt Ihrer Berechtigungsdatei freigeben?
Pierre Priot
Lief wie am Schnürchen!
Luis E. Prado
5
  1. Entpacken Sie die .ipa-Datei, indem Sie ihre Erweiterung mit .zip ändern
  2. Gehen Sie zu Payload. Sie finden die App-Datei
  3. Klicken Sie mit der rechten Maustaste auf die App-Datei und klicken Sie auf Paketinhalt anzeigen
  4. Löschen Sie den _CodeSignedOrdner
  5. Ersetzen Sie die embedded.mobileprovisionDatei durch das neue Bereitstellungsprofil
  6. Gehen Sie zu KeyChain Access und stellen Sie sicher, dass das dem vorläufigen Profil zugeordnete Zertifikat vorhanden ist
  7. Führen Sie den folgenden Befehl aus: /usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

  8. Zippen Sie nun den Payload-Ordner erneut und ändern Sie die .zip-Erweiterung mit .ipa

Hoffe das hilfreich.

Als Referenz folgen Sie dem unten angegebenen Link: http://www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-apple-accounts/

Dharmesh Siddhpura
quelle