Nach diesen Anweisungen (siehe auch Apples Entwicklerdokumentation und BoltClocks Antwort auf Test iOS App auf einem Gerät ohne Apple Entwicklerprogramm oder Jailbreak ) konnte ich eine iOS App kompilieren (in diesem Fall Provenienz , eine Videospielkonsolen-Emulator-App, die dies nicht tut Erfüllen Sie die Richtlinien von Apple und werden Sie niemals im App Store von Apple in Xcode 7 zugelassen. Signieren Sie es mit meinem persönlichen iCloud-Konto, laden Sie es von der Seite auf mein iPhone (indem Sie es über USB an meinen Mac anschließen und mein iPhone im xcode-Menü auswählen -> Produkt -> Ziel) und erlauben Sie meinem Telefon, es auszuführen, indem Sie Apps mit dieser Signatur unter Einstellungen -> Allgemein -> Profil "vertrauen", wodurch das meinem icloud-Konto zugeordnete Zertifikat auf dem Gerät installiert wird.
Ich möchte diese Schritte mit einem drahtlosen Download replizieren. Kann ich Xcode dazu bringen, eine ausführbare Datei zu erstellen, die ich mit meinem Bruder teilen kann, der ein iPhone hat, aber keinen Zugriff auf einen Mac mit Xcode hat?
Das StackExchange-Netzwerk hat anscheinend für sein Beta-Programm für iOS-Apps so etwas erreicht, indem es die Unternehmensverteilung von Apple über das Mobile Device Management verwendet hat, wie in dieser Frage erwähnt . Es gibt auch den BuildStore ( http://builds.io/ ), der diese Funktionalität für 10 US-Dollar pro Jahr ebenfalls ermöglicht, indem offenbar Benutzer zu einem "Entwicklerteam" hinzugefügt werden, das einem kostenpflichtigen Apple Developer Program-Konto zugeordnet ist (siehe Apple- Entwicklerdokumente ). . Ist es mit Xcode 7 möglich, so etwas ohne ein Unternehmen oder sogar ein regulär bezahltes Entwicklerkonto zu tun?
Update: Dank Stackszas Hilfe habe ich einige Fortschritte gemacht, die ich hier zusammenfassen werde.
- XCode erstellt ein Archiv (Produkt -> Archiv), ermöglicht jedoch nicht das Exportieren eines Archivs in eine IPA-Datei zur Ad-hoc-Verteilung, ohne die bezahlte ADP-Kontoebene zu abonnieren.
- Kein Problem aber, weil die Befehlszeile Xcode - Tool macht eine .ipa ausführbare Datei erstellen, auch ohne bezahlt ADP - Konto. Verwenden Sie einen Befehl wie
xcodebuild -exportArchive -archivePath Provenance-Release\ 11-20-15\,\ 22.24.xcarchive/ -exportOptionsPlist ~/manifest.plist -exportPath ~/Provenance
(siehe Khawars Antwort unter So erstellen Sie ipa in xcode 6 ohne Apple Developer-Konto? ) - Für diesen Befehl müssen Sie jedoch eine Manifest-PLIST-Datei angeben. Die Antwort von Razvan bei Over The Air (OTA) iOS IPA-Dateiverteilung für die Öffentlichkeit? enthält eine Beispielmanifest.plist sowie Anweisungen für das Hyperlink-Format, das zum Bereitstellen eines Download-Links erforderlich ist, der auf einer SSL-Webseite gehostet werden muss. Möglicherweise muss die SSL-URL die Bundle-ID der App berechnen. Ich bin mir nicht sicher.
- Dies funktioniert jedoch nur, wenn die App für das Gerät bereitgestellt wird, das sie herunterlädt, und das Gerät das Entwicklerzertifikat bereits installiert hat. So kann beispielsweise ein Gerät, das zuvor über USB mit meinem Xcode verbunden war, die App jetzt drahtlos herunterladen, was großartig ist. Das ist Fortschritt. Bei sauberen Geräten wird jedoch der Fehler
Could not install embedded profile: 0xe8008012 (This provisioning profile cannot be installed on this device.)
angezeigt (angezeigt in der Gerätekonsole, die unter Xcode -> Fenster -> Geräte oder in der Apple Configurator-App angezeigt werden kann). - Für eine Anwendung für ein Gerät bereitgestellt wird, muss er das Geräts der UDID in der enthaltene
embedded.mobileprovision
Datei finden Sie Wie beurteilen Sie einbetten ein Provisioning - Profil in einem iOS - App , wie ein Feld in einem IPV embedded.mobileprovision automatisieren überprüfen? , Wie finde ich heraus, welches Profil zum Erstellen der * .ipa-Datei verwendet wurde? , und Gibt es eine Möglichkeit zu sehen, welche UDID in einem Build enthalten sind? . Sie können diese Datei jedoch nicht einfach bearbeiten, um die UDID hinzuzufügen, da dann die CODESIGNATURE der App nicht übereinstimmt und das Gerät den Fehler meldetFailed to verify code signature of /private/var/mobile/Library/Caches/com.apple.mobile.installd.staging/temp.7jBjpk/extracted/Payload/Provenance.app : 0xe8008017 (A signed resource has been added, modified, or deleted.)}
- Ok, also müssen wir die App zurücktreten. Xcode bietet ein Befehlszeilentool namens,
codesign
das dies tun kann. Anweisungen finden Sie unter Wie signiere ich die ipa-Datei erneut? und IPA (iPhone) erneut signieren und eine iPhone-App zurücktreten, neue Bundle-ID einfügen und zum Hochladen an Xcode Organizer senden und eine IPA mit einem neuen Bereitstellungsprofil manuell neu signieren . Ich musste mein Entwicklerzertifikat angeben, dessen genauer Name im Schlüsselbundzugriff auf der Registerkarte "Zertifikate" zu finden ist. Es sieht aus wie "iPhone-Entwickler: Benutzername@mac.com (ABCDEFGHIJ)". Dann ist der Befehl wiecodesign -f -s "iPhone Developer: username@mac.com (ABCDEFGHIJ)" Payload/Provenance.app
. Die Beispielbefehle in den obigen Anweisungen enthielten ein aufgerufenes Flag--resource-rules
, aber ich habe keine solche Datei in meiner kompilierten App gefunden, also habe ich dieses Flag entfernt. Ich frage mich, was es tut und ob es notwendig ist. Bearbeiten: Der ausgezeichnete Blog-Beitrag Inside Code Signing von Thomas Kollbach erklärt, dass das--resource-rules
Flag verwendet wurde, um anzugeben, welche Teile einer App signiert werden müssen, aber da iOS8 veraltet ist und die gesamte App signiert werden muss. - Nachdem die App die UDID hinzugefügt und signiert hat, werden beim Herunterladen auf das neue Gerät die Fehler
Could not install embedded profile: 0xe8008003 (This provisioning profile is malformed
und angezeigtA valid provisioning profile for this executable was not found
. Ich vermute, das Problem ist jetzt, dass das Gerät das Entwicklerzertifikat noch nicht installiert hat. Beim Seitenladen über Xcode müssen Sie vor der Ausführung der App das installierte Zertifikat unter Einstellungen -> Allgemein -> Profil suchen, Ihr Zertifikat auswählen und auf "Vertrauen" tippen. Diese Option wird jedoch nach dem drahtlosen Download der Ad-hoc-App nicht angezeigt. Daher bin ich mir nicht sicher, wie ich vorgehen soll. Ich denke, ich brauche eine Möglichkeit, um das Entwicklerzertifikat auf dem Gerät zu installieren. Gemäß Installieren des Bereitstellungsprofils unter iOS 8.0.2Früher war es möglich, das Zertifikat einfach per E-Mail an das Gerät zu senden, aber das funktioniert ab iOS 8 nicht mehr. Ich habe nicht versucht, es zu bestätigen. Wie kann ich mein Entwicklerzertifikat remote auf einem iOS-Gerät installieren? - Ich habe versucht, mein iPhone-Entwicklerzertifikat von Keychain Access zu exportieren und per E-Mail an das Gerät zu senden. Das Gerät konnte das Zertifikat installieren, es wurde jedoch mit einer roten Warnung angezeigt, dass es nicht signiert war, während bei der Installation des Zertifikats über Xcode / USB keine solche Warnung angezeigt wurde. Laut Rhythmic Fistman ist es möglich, eine embedded.mobileprovision-Datei neu zu verschlüsseln? muss das Profil von Apple signiert sein, damit es funktioniert. Dies kann der Knackpunkt sein. Apple unterschreibt Ihr Zertifikat nur, wenn Sie über ein bezahltes ADP-Konto verfügen.
- Dieser Blog-Beitrag über die Bereitstellung durch Sean Heber war sehr aufschlussreich über die allgemeine Theorie der Entwicklerzertifikate und Bereitstellungsprofile (zusammen mit Kollbachs sollten beide gelesen werden müssen). Es enthält diesen Absatz:
Der Grund, warum all dies funktioniert und sicher ist, ist, dass Apple die Bereitstellungsprofile im Portal generiert und sie dann mit ihren eigenen privaten Schlüsseln signiert, bevor sie an Sie gesendet werden. Das Signieren der Bereitstellungsprofile kann nur Apple. Die heruntergeladene Datei kann daher nicht manipuliert werden, ohne sie ungültig zu machen. Ein ungültiges Bereitstellungsprofil wird von iOS nicht akzeptiert. Daher kann Apple genau steuern, was von einem Entwickler bereitgestellt werden kann und was nicht, indem der Zugriff auf die Signatur des Bereitstellungsprofils einfach auf Dinge beschränkt wird, die Sie im Entwicklerportal im ersten konfigurieren dürfen place - obwohl Provisioning-Profile eine beliebige Anzahl anderer großartiger Optionen unterstützen können, die Sie ohne Jailbreaking nicht verwenden können. Aus diesem Grund müssen Sie Testgeräte im Portal registrieren. Fügen Sie Ihre Zertifikate zum Portal usw. hinzu. In einem generierten und ordnungsgemäß signierten Bereitstellungsprofil können nur Elemente im Portal (und damit deren Anzahl von Apple kontrolliert und beliebig begrenzt werden kann) enthalten sein. Auf dem Portal werden die Bereitstellungsrichtlinien und -beschränkungen von Apple tatsächlich durchgesetzt.
Dies scheint meine Frage (kann ich die App ohne ein bezahltes ADP-Konto zum Laufen bringen) definitiv mit einem "Nein" zu beantworten. Obwohl dieser Artikel älter ist als Xcode 7. Anscheinend sendet Xcode 7 die UDID eines Geräts an das Apple-Portal und erhält als Antwort ein von Apple signiertes Bereitstellungsprofil, das diese UDID enthält. Xcode 7 tut dies nur, wenn das Gerät über USB angeschlossen und von Xcode erkannt wird, aber man fragt sich, ob eine manuelle Xcode-Anfrage an Apple erstellt werden könnte? Das geht tiefer in das Reverse Engineering von Apples Sachen hinein, als ich es mag, und verstößt wahrscheinlich gegen ToS oder was auch immer, also denke ich, dass ich mit der "Nein" -Antwort zufrieden bin.
Laut der About-Seite für BuildStore verwalten sie etwas Ähnliches per E-Mail, sodass dies möglicherweise möglich ist.
Xcode "Build and Archive" über die Befehlszeile ist ziemlich alt (ca. Xcode 3), schlägt jedoch vor, xcrun
anstelle dessen zu verwenden, xcodebuild
was ich verwendet habe.