Sie nutzen iOS Enterprise Apps in Ihrem Unternehmen? Dann stehen Sie vor der Herausforderung, dass Ihre Apps jedes Jahr aufs Neue signiert und Ihren Mitarbeitern bereitgestellt werden müssen.

Die Gültigkeitsdauer des Distribution Zertifikats wurde vor einiger Zeit zwar von Apple von einem auf drei Jahre angehoben, die Provisionierungs-Profile haben jedoch weiterhin eine Gültigkeit von einem Jahr.

Für die Unternehmens-IT bedeutet dies entweder, die mobilen Geräte per Mobile-Device-Management (MDM) mit dem neuen Profil zu versorgen, das Profil manuell – z. B. per E-Mail – zu verteilen oder die entsprechenden Apps als neue Version im internen AppStore Ihres Unternehmens bereitzustellen.

Liegen die Sourcen der Business App nicht mehr vor, weil Sie von einem externen Dienstleister erstellt wurde, der Ihnen die Quellen nicht übergeben hat, oder sind die mobilen Apps so stark veraltet, dass Sie in der aktuellen Entwicklungsumgebung nicht mehr compilierbar sind, so stellt sich oft die Frage:

Ist es möglich eine bestehende App (IPA-Datei) neu zu signieren, auch wenn die Sourcen nicht mehr zur Verfügung stehen oder keine neue App-Version erstellt werden soll?

Ja, das ist es und diese Anleitung zeigt Ihnen, wie Sie in einem solchen Fall vorgehen können.

Schritt 0 – Annahmen

Diese Beschreibung geht von folgenden Annahmen aus:

  • Ihre Unternehmens-App hat den Namen „BusinessApp“ und die zugehörige Datei heißt „BusinessApp.ipa„.
    Die Datei ist im aktuellen Verzeichnis abgelegt.
  • Ihr Distribution Zertifikat heisst „iPhone Distribtuion: Business Holding GmbH“ und ist inklusive dem privatem Schlüssel im Schlüsselbund des Benutzers enthalten, mit dem Sie die nächsten Schritte durchführen.
  • Das aktuelle Provisioning-Profil hat den Dateiname „BusinessApp-Distribution.mobileprovision“ und ist im aktuellen Verzeichnis abgelegt.
  • Die Bundle-ID Ihrer App lautet „com.business-holding.businessapp

Schritt 1 – Entpacken der App

Die IPA-Datei ist ein Archiv, welches entpackt werden kann. Das folgende Kommando extrahiert den Inhalt der BusinessApp in ein separates Verzeichnis mit dem Namen „extracted„.

$ unzip -qo BusinessApp.ipa -d extracted

Schritt 2 – Löschen der abgelaufenen Signatur

Löschen Sie zunächst die bisherige Signatur in der entpackten App

$ rm -rf extracted/Payload/BusinessApp.app/_CodeSignature

Schritt 3 – Erneuern bzw. Überschreiben des Provisioning-Profils

Kopieren Sie das aktuelle Provisioning-Profile an die entsprechende Stelle innerhalb der App.

$ cp BusinessApp-Distribution.mobileprovision extracted/Payload/BusinessApp.app/embedded.mobileprovision

Schritt 4 – Setzen der Bundle-ID und erstellen der Entitlements

Die folgenden Kommandos dienen dazu, die Info.plist Datei zu erneuern und die Entitlements für das neue Provisioning-Profile zu erstellen.

$ /usr/libexec/PlistBuddy -c „Set:CFBundleIdentifier com.business-holding.businessapp.BusinessApp“ „extracted/Payload/BusinessApp.app/Info.plist“
$ /usr/bin/security cms -D -i extracted/Payload/BusinessApp.app/embedded.mobileprovision > temp_entitlements_full.plist
$ /usr/libexec/PlistBuddy -x -c ‚Print:Entitlements‘ temp_entitlements_full.plist > temp_entitlements.plist

Schritt 5 – Signieren der iOS App

Mit dem folgenden Kommando wird Ihre App mit Hilfe des aktuelle Zertifikats und des neuen Bereitstellungsprofils signiert.

$ /usr/bin/codesign –continue -f -s „iPhone Distribtuion: Business Holding GmbH“ –entitlements ./temp_entitlements.plist extracted/Payload/BusinessApp.app

Schritt 6 – Packen der App

Abschießend kann die neu signierte IPA-Datei erstellt werden.

$ cd extracted/
$ zip -qry ../BusinessApp-resigned.ipa *

Die neu signierte Version Ihrer Unternehmens-App kann nun an Ihre Mitarbeiter verteilt werden.