*.ipa neu signieren - Wenn der Entwickler entwickelt und der Kunde veröffentlicht

 

TL;DR:

1. ipa entzippen
2. _CodeSignature löschen
3. Profil austauschen
4. Bundle und Info.plist austauschen
5. App mit codesign --entitlements entitlements.xml -f -s "iPhone Distribution: Company (YXZ)“ Payload/YourAppName.app signieren
6. alles wieder zippen: zip -qr app-resigned.ipa Payload/  

 

In welchen Fällen ist eine Neu-Signierung notwendig?

Normalerweise wird eine App von einem Entwickler für einen Kunden programmiert. Dieser Entwickler kann unabhängig vom Kunden Zertifikate und Profile verwenden und die App fertigstellen.

Da der Kunde die App aber meist nicht unter dem Entwicklername, sondern unter dem Kundenname im AppStore veröffentlichen möchte, müssen die Zertifikate und Profile ausgetauscht werden, weil Apple die App sonst nicht akzeptiert –  die App muss neu signiert werden.

 

Die Neu-Signierung ist nicht notwendig, wenn der Auftraggeber dem Entwickler Zugriff auf sein Profile und die Zertifikate gewährt.

 

Was ist eine ipa-Datei?

Die ipa-Datei ist das Produkt, dass bei der Entwicklung einer iOS-App entsteht. Diese Datei ist eigentlich ein gezippter Ordner, der

  • Programmiercode
  • Sprachdateien
  • Inhalte wie Bilder, Videos und PDF
  • Infos zu Zertifikaten und Profilen
  • Infos zu verwendeten Capabilities (z.B. NFC, Siri, PushNotifications, In-App-Käufe)

enthält.

Übermittelt wird diese Datei anschließend per Xcode, Application Loader oder Transporter an AppStoreConnect, wo sie weiterverarbeitet und letztendlich in den Apple AppStore hochgeladen wird.

 

Voraussetzungen

  • Apple Entwickler Account
  • iOS Distribution (App Store and Ad Hoc) Zertifikat, dass mit einem Certificate Signing Request (CSR)  erstellt wurde
    Das CSR muss mit dem MAC erstellt werden, auf dem später die ipa neu signiert wird. Zertifikat muss heruntergeladen und im Schlüsselbund hinterlegt sein (geht per Doppelklick)
  • gültige App ID
  • App Store Distribution Profil, dass mit der App ID und dem Distribution Zertifikat generiert wurde. Profil muss heruntergeladen werden

 

Anleitung

codesign --entitlements entitlements.xml -f -s "iPhone Distribution: Company (YXZ)“ Payload/YourAppName.app

  • ipa entzippen
    Verwende hierzu ein Programm das Ordner entzippen kann
  • Payload-Ordner öffnen
  • *.app öffnen
    Rechtsklick auf *.app-Datei und Paketinhalt anzeigen
  • _CodeSignature
    Der Ordner "_CodeSignature" muss gelöscht werden. Dieser Ordner wird später neu erstellt
  • App Store Distribution Profil
    Neu erstelltes App Store Distribution Profil in "embedded.mobileprovision" umbenennen und das Vorhandene Profil ersetzten
  • Info.plist
    Info.plist öffnen und Bundle Identifier austauschen -> Speichern
  • Terminal
    mit dem Terminal in den entzippten ipa-Ordner navigieren
    liegt der ipa-Odner z.B. auf dem Desktop, get das mit cd Desktop/DeinOrdner
  • Entitlements übernehmen
    Verwendete die App z.B. NFC oder Push Nachrichten ist das in den Entitlements hinterlegt. Diese Datei wird somit auch beim neuen Signieren benötigt. Der Befehl
    codesign -dv --entitlements :- YouAppName.app
    zeigt die Entitlements an.
  • Entitlements.xml
    - Gibt es Entitlements muss mit
    codesign -d --entitlements entitlements.xml Payload/YourAppName.app 
    eine neue entitlements.xml generiert werden
    - entitlements.xml öffnen und application-identifier und team-identifier (wenn vorhanden) austauschen
  • App signieren
    - Mit codesign --entitlements entitlements.xml -f -s "iPhone Distribution: Company (YXZ)“ Payload/YourAppName.app
    wird eine neue App signiert
    - mit security find-identity werden alle installierten Zertifikate angezeigt
  • neue ipa erstellen
    Damit wir wieder eine Apple-konforme Datei haben, muss alles gezippt und eine ipa erstellt werden
    zip -qr app-resigned.ipa Payload/ neue ipa erstellen

 

 

Nächste Schritte

Die ipa kann nun mit dem Application Loader bzw Transporter auf AppStore Connect hochgeladen werden.

Beim Upload wird überprüft, ob Entitlements, App Identifier, etc mit den im Profil gespeicherten Informationen übereinstimmen.

 

Credits

Die Anleitung basiert auf dem Medium-Artikel von Saad El Oulladi und dem Stackoverflow-Beitrag von Erik Engheim.

 

Im Herzen Süddeutsch. Im Handeln Weltoffen.

Kontakt aufnehmen