Eine in Xcode 7 kompilierte iOS-App ohne App Store, Entwicklerprogramm-Sub oder Jailbreak remote verteilen?

10

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.

  1. 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.
  2. 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? )
  3. 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.
  4. 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).
  5. Für eine Anwendung für ein Gerät bereitgestellt wird, muss er das Geräts der UDID in der enthaltene embedded.mobileprovisionDatei 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.)}
  6. Ok, also müssen wir die App zurücktreten. Xcode bietet ein Befehlszeilentool namens, codesigndas 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: [email protected] (ABCDEFGHIJ)". Dann ist der Befehl wie codesign -f -s "iPhone Developer: [email protected] (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-rulesFlag verwendet wurde, um anzugeben, welche Teile einer App signiert werden müssen, aber da iOS8 veraltet ist und die gesamte App signiert werden muss.
  7. 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 malformedund angezeigt A 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?
  8. 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.
  9. 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, xcrunanstelle dessen zu verwenden, xcodebuildwas ich verwendet habe.

Zikkurismus
quelle
1
Bitte überlegen Sie, dies aufzuteilen. Die Frage sollte kurz, einfach und leicht zu verstehen sein. Die gesamte Antwort / der gesamte Prozess, wie Sie zu Ihrer Antwort und Ihrem Blog-Beitrag gekommen sind, sollte sich im Antwortbereich befinden.
bmike

Antworten:

2

Die Antwort ist fast JA!

Ich habe es geschafft, neue Builds derselben App über Fabric.io ohne Apple Dev-Abonnement auf den Geräten zu installieren. (Ich denke, Sie können sie auch mit iTunes vertreiben. Senden Sie ipa an den Tester, und es sollte in der Lage sein, es über iTunes zu installieren.)

Der einzige Nachteil ist, dass Sie das Gerät mindestens einmal mit Xcode verbinden müssen . Anschließend können Sie neue Versionen remote installieren. (Ich habe den Weg nicht gefunden, es manuell zu tun, wenn ich die udid kenne)

Wenn Sie das "unbekannte" Gerät an xcode 7 anschließen, befindet sich eine fix issueSchaltfläche in Target general settings. Beheben Sie das Problem und Xcode generiert ein neues Bereitstellungsprofil mit diesem Gerät. (Sie finden es in ~/Library/MobileDevice/Provisioning Profiles)

Dann können Sie dieses Bereitstellungsprofil verwenden, um Apps über Fabric.io zu verteilen

  1. Anmeldung bei Fabric.io
  2. Setup Fabric für Ihr Projekt (es gibt eine Schritt-für-Schritt-Anleitung)
  3. Stellen Sie sicher, dass xcode den richtigen Beweis verwendet. Profil, um es zu unterschreiben. Automaticarbeitete für mich.
  4. Xcode> Projekt> Archiv
  5. Der Fabric Helper erkennt den Build und Sie können ihn verteilen.

Tut mir leid, Leute, die Xcode nicht gut genug beherrschen. Ich habe nicht viel Zeit, um weniger fehleranfällige Anleitungen hinzuzufügen, aber ich hoffe, diese Antwort hilft jemandem mit Ideen.

TIPP: Verwenden Sie dieses Quicklook-Plugin , um in ipas und prov zu sehen. Profile!

DanSkeel
quelle
1
Ja, diese Antwort stimmt mit dem überein, was ich bei meinen Tests herausgefunden habe. Ich frage mich immer noch, ob es möglich wäre, das "Verbinden des Geräts mit xcode mindestens einmal" zu umgehen, indem die Nachricht gefälscht wird, die Xcode mit der neuen UDID des Geräts an Apple Server sendet
Zikkurismus
2

Ab einer Version von iOS 9.x, die seit der Veröffentlichung meiner Antwort veröffentlicht wurde, ist dies nicht einmal mehr möglich. Apple beschränkt jetzt OTA-Downloads auf nicht kostenlose Konten. Dies wird durch Fehler in den Geräteprotokollen angezeigt, wenn die Installation fehlschlägt.

Ich habe dies ausgiebig getestet, da dies auch für meine Apps erstaunlich wäre.

Kann ich meine Apps OTA ohne Mitgliedschaft im Entwicklerprogramm vertreiben (kostet Geld)?

Sie können eine IPA erstellen und signieren und die Manifest-Datei dafür erstellen, die Installation auf dem Gerät schlägt jedoch fehl. Der Grund dafür ist, dass Xcode die IPA für dieses Gerät konfigurieren muss (angeblich ordnungsgemäß mit der UDID signieren). Sie können dies sogar sehen, wenn Sie versuchen, ein neues Gerät an den Mac anzuschließen und Ihre App über Xcode darauf auszuführen. Die kurze Antwort lautet nein.

Was kann ich tun, damit dies funktioniert?

Sie können sich bei Apple für das Entwicklerprogramm anmelden (kostet Geld) und die UDID seines Geräts zu Ihrem Profil hinzufügen, dann eine IPA- und Manifestdatei erstellen, diese auf einen Webserver hochladen und ihm die URL senden.

Es dient wirklich der Sicherheit, da die Preisbarriere normalerweise verhindert, dass bösartige Apps über das Internet verbreitet werden. Ganz zu schweigen davon, dass die meisten App-Downloads im App Store aufbewahrt werden.

Ich habe mich für das Entwicklerprogramm angemeldet. Wie verteile ich es jetzt?

Sie müssen über einen HTTPS-Webserver (und ein SSL-Zertifikat, für das Sie Ihr eigenes Root erstellen können) verfügen. Sie müssen auch ihre UDID zu Ihrem Entwicklerprofil hinzugefügt haben (ich bin mir nicht ganz sicher, wie das geht). Sie müssen Xcode verwenden, um die IPA zu erstellen (Produkt> Archivieren> Exportieren> Für Ad-hoc-Bereitstellung speichern> Mit Apple ID anmelden> Anweisungen befolgen), und Sie erhalten eine Plist- und eine IPA-Datei. Legen Sie beide auf Ihrem Server ab und ändern Sie die Werte in der Plist-Datei so, dass sie mit den HTTPS-URLs auf Ihrem Server übereinstimmen. Anschließend verwenden Sie einen speziellen Link, um eine Verknüpfung zum Plist-Manifest herzustellen. Daraufhin wird der Benutzer aufgefordert, Ihre App zu installieren. Wenn alles richtig läuft, hat der Benutzer Ihre App. Sie müssen auch Ihre eigene Aktualisierungsmethode codieren, wenn Sie dies möchten.

Wenn es sich um eine App handelt, die Sie zu diesem Zeitpunkt verteilen möchten, ist es möglicherweise sinnvoller, sie tatsächlich in den App Store zu stellen, oder wenn dies für Betatests gedacht ist, verwenden Sie TestFlight. Wenn Sie ein Entwicklerkonto haben, können Sie TestFlight verwenden und all diese Dinge für App-Tests überspringen. Sie benötigen lediglich ihre E-Mail-Adresse, um die TestFlight-App aus dem App Store zu installieren. TestFlight kann über iTunes Connect verwaltet werden.

AppleBetas
quelle
Und wie verteilen Sie die App, nachdem Sie sich für den Entwickler angemeldet haben?
Zikkurismus
Mein Beitrag wurde mit den Anweisungen aktualisiert.
AppleBetas
Danke, das habe ich gesucht. Ich weiß, dass Sie gesagt haben, es sei notwendig, ein bezahltes Entwicklerkonto zu haben und UDIDs bereitzustellen, aber ich würde diese Methode gerne ohne vorher ausprobieren. Ich werde die Ergebnisse zurückmelden.
Zikkurismus
Befolgen Sie Ihre Anweisungen zum Erstellen eines Archivs, aber die Schaltflächen "In App Store hochladen", "Validieren" und "Exportieren" wurden alle abgeblendet. Ein Link mit der Aufschrift "Verteilung erfordert Registrierung im Apple Developer Program" wurde ausgelöst mich auf eine Webseite, um mich für den ADP anzumelden. Auf der einen Seite ist es so, wie Sie es versprochen haben: Ein Abonnement für das Apple Developer Program im Wert von 99 US-Dollar scheint erforderlich zu sein, selbst wenn Sie Ihre App nur über Funk (OTA) ad hoc verteilen möchten. Die XCode-Benutzeroberfläche erstellt weder die IPA noch das Bereitstellungsprofil.
Zikkurismus
Auf der anderen Seite behauptet Benutzer Khawar unter stackoverflow.com/questions/26928721/…, dass dies ohne das ADP-Sub über xcodebuilddie Befehlszeile möglich ist, mit der das IPA-Archiv erstellt sowie die App signiert und bereitgestellt wird, wenn Sie das -exportProvisioningProfileFlag verwenden (siehe Kommentar von Pankaj Rathor).
Zikkurismus
1

Grundsätzlich muss jemand die App signieren. Sie können die IPA-Datei abrufen, sie wird jedoch nicht auf beliebigen Geräten ausgeführt. Wenn Sie sich darauf konzentrieren, werden Sie schnell entscheiden, ob Sie den Ärger jeder Person mit Xcode ertragen möchten oder ob es sinnvoll ist, für Apple zu bezahlen, um Ihre Apps zu signieren.

Wenn Sie sich darauf verlassen, dass iOS 9-Nichtentwickler mit einer alten Apple ID signieren, müssen sich alle Tester mit Ihrer Apple ID anmelden, um die App auszuführen.

Sie können für Apple bezahlen, um die Konten zu verwalten und zu unterschreiben, indem Sie für ein Jahr Entwicklerkonten bezahlen. Dann können Sie E-Mails senden, die App auf einem beliebigen Server platzieren, TestFlight verwenden oder ganz einfach für Ihre Methoden, außer Ihre Apple ID an Ihre Tester / Benutzer der App weiterzugeben.

Sie können den Quellcode jederzeit an Ihren Bruder senden, wenn er über Xcode verfügt. Sie haben jedoch erwähnt, dass dies der Grund dafür war, dass niemand einen Mac zum Installieren und Signieren der App hat.

Das Brechen von Gefängnissen ist einfacher als das Fälschen der Zertifikatskette von Apple, aber ich empfehle das nicht.

bmike
quelle
Wo müssten sich die Tester mit meiner Apple ID anmelden, um die nicht vom Entwickler signierten Apps auszuführen?
Zikkurismus
In Xcode ist die Verwendung Ihres Mac am einfachsten. Ich würde sie dir ihr Handy schicken lassen, um die App zu laden, wenn sie nicht zu Xcode gelangen kann ...
bmike
Ja, die Installation von Xcode über USB funktioniert hervorragend. Meine Frage betraf die Möglichkeit der Fernverteilung / -installation. StackExchange hat es für ihre Beta-App getan. Ich möchte es auch tun.
Zikkurismus
@ziggurism SE hat für ein Unternehmenszertifikat bezahlt. Dazu benötigen Sie einige rechtliche Unterlagen. Plus mehrere hundert Dollar pro Jahr. TestFlight ist die billigere Option und weniger grau. Was SE getan hat, ist wahrscheinlich nicht "nach dem Buch" gemäß der Lizenz für die von ihnen verwendeten Zertifikate, aber ich bin kein Anwalt ...
bmike