Ich erstelle derzeit alle meine Anwendungen mit Hudson mit xcodebuild, gefolgt von einem xcrun ohne Probleme
Ich habe einige IPA-Dateien von verschiedenen Personen erhalten, die ich mit einem Unternehmenskonto anstelle des Unternehmenskontos (für den App Store oder manchmal ad-hoc verteilt) erneut signieren möchte.
Mein Problem ist, dass beim Versuch, die App zu kündigen, sie nicht auf meinem Gerät installiert wird (und dies sollte auch der Fall sein, da es sich um ein Enterprise-Build handelt). Die Fehlermeldung befindet sich auf dem Gerät (nicht in iTunes) und sagt mir einfach, dass die App nicht installiert werden konnte. Es werden keine weiteren Informationen angegeben.
Ich habe einige Informationen gefunden ( http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for- Upload / )
Und das könnte möglich sein. Das Problem, mit dem ich konfrontiert bin, ist, dass das mobile Bereitstellungsprofil nicht wie bei meinen normalen Builds (mit xcrun) eingebettet zu sein scheint. Dies kann mit dem Codesign-Tool gesteuert oder mit xcrun erneut signiert werden ?
Mit meinem Rücktrittsskript mache ich derzeit
- entpacke 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"
Ich habe in der resultierenden ipa-Datei nachgesehen und sie scheint der ursprünglichen App sehr ähnlich zu sein. Welche Dateien sollten sich hier wirklich ändern? Ich dachte anfangs, dass sich die _CodeSignature / CodeResources ändern würden, aber der Inhalt sieht ziemlich genau gleich aus.
Zeiger werden sehr geschätzt.
/usr/bin/codesign -d --entitlements :entitlements.plist /Payload/appname.app
Dann während des Rücktritts hinzufügen--entitlements entitlements.plist
Die Antworten auf diese Frage sind etwas veraltet und es fehlen möglicherweise wichtige Schritte. Dies ist also eine aktualisierte Anleitung zum Installieren einer App von einem externen Entwickler.
----- So kündigen Sie eine iOS-App -----
Angenommen, Sie erhalten eine App (z. B. MyApp.ipa) von einem anderen Entwickler und möchten sie auf Ihren Geräten installieren und ausführen können ( z. B. mithilfe von ideviceinstaller ).
Bereiten Sie neue Signatur-Assets vor
Der erste Schritt besteht darin, ein Bereitstellungsprofil zu erstellen, das alle Geräte enthält, auf denen Sie installieren und ausführen möchten. Stellen Sie sicher, dass das Profil ein Zertifikat enthält, das Sie in Ihrem Schlüsselbundzugriff installiert haben (z. B. iPhone Developer: Some Body (XXXXXXXXXX)). Laden Sie das Profil (MyProfile.mobileprovision) herunter, damit Sie das in die App eingebettete Profil ersetzen können.
Als Nächstes bereiten wir eine Berechtigungsdatei vor, die in die Signatur aufgenommen werden soll. Öffnen Sie Ihr Terminal und führen Sie Folgendes aus.
Dadurch wird eine XML-Datei erstellt, die Ihr Bereitstellungsprofil beschreibt . Als nächstes wollen wir die Berechtigungen in eine Datei extrahieren.
Ersetzen Sie das Bereitstellungsprofil und geben Sie die App zurück
Wenn Sie mit einer .ipa- Datei arbeiten, entpacken Sie zuerst die App (wenn Sie stattdessen eine .app haben , können Sie diesen Schritt überspringen).
Ihr Arbeitsverzeichnis enthält jetzt
Payload/
undPayload/MyApp.app/
. Entfernen Sie als Nächstes die alten Codesignaturdateien.Ersetzen Sie das vorhandene Bereitstellungsprofil (dh embedded.mobileprovision) durch Ihr eigenes.
Signieren Sie nun die App mit dem in Ihrem Bereitstellungsprofil enthaltenen Zertifikat und der zuvor erstellten Berechtigungsliste.
WICHTIG: Sie müssen auch alle in der App enthaltenen Frameworks zurücktreten . Sie finden diese in
Payload/MyApp.app/Frameworks
. Wenn die App in Swift geschrieben ist oder zusätzliche Frameworks enthält, müssen diese zurückgetreten werden, sonst wird die App installiert, aber nicht ausgeführt.Sie können die App jetzt erneut komprimieren.
Getan
Sie können das
Payload
Verzeichnis jetzt entfernen, da Sie über Ihre ursprüngliche App (MyApp.ipa) und Ihre zurückgetretene Version (MyApp-resigned.ipa) verfügen. Sie können MyApp-resigned.ipa jetzt auf jedem Gerät installieren, das in Ihrem Bereitstellungsprofil enthalten ist.quelle
Ich habe diese Antwort erfolgreich befolgt, aber da sich die Berechtigungen geändert haben, habe ich einfach den
--entitlements "Payload/Application.app/Entitlements.plist"
Teil der vorletzten Aussage entfernt, und es hat wie ein Zauber funktioniert.quelle
SecItemCopyMatching: missing entitlement
. Ich habe keine separate Datei "Entitlements.plist". Um die Berechtigungen beizubehalten, habe ich den Kommentar von @ LordT verwendet : Erstellen Sie zuerst eine Berechtigungsdatei:echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>/usr/bin/codesign -d --entitlements - temp/Payload/$APP_NAME | sed -E -e '1d'" > temp/newEntitlements
und verwenden Sie sie dann beim Signieren :--entitlements temp/newEntitlements
.Überprüft mit Mac OS High Sierra und Xcode 10
Sie können dasselbe einfach mit der Anwendung iResign implementieren .
Geben Sie den Pfad von 1) .ipa an
2) Neues Rückstellungsprofil
3) Berechtigungsdatei (Optional, nur hinzufügen, wenn Sie berechtigt sind)
4) Bundle-ID
5) Vertriebszertifikat
Sie können sehen, dass die IPA-Ausgabedatei nach dem erneuten Signieren gespeichert wird
Einfaches und leistungsstarkes Werkzeug
quelle
Keiner dieser zurückgetretenen Ansätze funktionierte für mich, also musste ich etwas anderes ausarbeiten.
In meinem Fall hatte ich eine IPA mit einem abgelaufenen Zertifikat. Ich hätte die App neu erstellen können, aber da wir sicherstellen wollten, dass wir genau dieselbe Version vertreiben (nur mit einem neuen Zertifikat), wollten wir sie nicht neu erstellen.
Anstelle der in den anderen Antworten erwähnten Möglichkeiten zum Rücktritt habe ich mich der Methode von Xcode zum Erstellen eines IPA zugewandt, die mit einem .xcarchive aus einem Build beginnt.
Ich habe ein vorhandenes .xcarchive dupliziert und begonnen, den Inhalt zu ersetzen. (Ich habe die .dSYM-Datei ignoriert.)
Ich habe die alte App aus der alten IPA-Datei extrahiert (per Entpacken; die App ist das einzige, was sich im Payload-Ordner befindet).
Ich habe diese App in das neue .xcarchive verschoben,
Products/Applications
indem ich die dort vorhandene App ersetzt habe.Ich habe bearbeitet
Info.plist
, bearbeitetApplicationProperties/ApplicationPath
ApplicationProperties/CFBundleIdentifier
ApplicationProperties/CFBundleShortVersionString
ApplicationProperties/CFBundleVersion
Name
Normalerweise habe ich das .xcarchive in den Archivordner von Xcode verschoben
/Users/xxxx/Library/Developer/Xcode/Archives
.In Xcode habe ich das Organizer-Fenster geöffnet, dieses neue Archiv ausgewählt und einen regulären Export (in diesem Fall Enterprise) durchgeführt.
Das Ergebnis war eine gute IPA, die funktioniert.
quelle
Ich denke, am einfachsten ist es, Fastlane zu verwenden:
quelle
Mit der Rücktrittsoption von Fastlane Seufzer können Sie dies sehr einfach tun.
Sie können das Profil auch direkt vor dem Befehl mit seufzen herunterladen.
quelle
Vielen Dank, Erik, dass du das gepostet hast. Das hat bei mir funktioniert. Ich möchte eine Notiz über einen zusätzlichen Schritt hinzufügen, den ich brauchte. In "Payload / Application.app /" gab es ein Verzeichnis mit dem Namen " CACertChains ", das eine Datei mit dem Namen " cacert.pem " enthielt . Ich musste das Verzeichnis und die .pem entfernen, um diese Schritte abzuschließen. Danke noch einmal! - -
quelle
Wenn Sie eine App mit Erweiterungen und / oder eine Überwachungs-App haben und mehrere Bereitstellungsprofile für jede Erweiterungs- / Überwachungs-App haben, sollten Sie dieses Skript verwenden, um die IPA-Datei erneut zu signieren.
Skript bei Github neu signieren
Hier ist ein Beispiel für die Verwendung dieses Skripts:
Sie können auch andere Erweiterungsbereitstellungsprofile einschließen, indem Sie sie mit einer weiteren Option -p hinzufügen.
Für mich wurden alle Bereitstellungsprofile mit derselben Zertifikat- / Signaturidentität signiert.
quelle
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
stattdessen.