Distribuer à distance une application iOS compilée dans Xcode 7 sans App Store, sous-programme développeur ou jailbreak?

10

À la suite de ces instructions (voir aussi la documentation pour les développeurs d'Apple et la réponse de BoltClock à l' application de test iOS sur l' appareil sans programme de développement de pomme ou de jailbreak ), je suis en mesure de compiler une application iOS (dans ce cas , la provenance , une application de l' émulateur de console de jeux vidéo qui ne respecter les directives d'Apple et ne sera jamais autorisé dans l'App Store d'Apple) dans Xcode 7, signez-le avec mon compte iCloud personnel, chargez-le sur mon iPhone (en le branchant sur mon Mac par USB et en sélectionnant mon iPhone dans le menu xcode -> Produit -> Destination), et permettre à mon téléphone de l'exécuter en "faisant confiance" aux applications avec cette signature dans Paramètres -> Général -> Profil, qui installe le certificat associé à mon compte icloud sur l'appareil.

Je voudrais reproduire ces étapes avec un téléchargement en direct. Puis-je obtenir Xcode pour produire un exécutable que je peux partager avec mon frère, qui a un iPhone, mais n'a pas accès à un Mac avec Xcode?

Le réseau StackExchange a accompli quelque chose comme cela apparemment pour son programme bêta d'application iOS, en utilisant la distribution d'entreprise d'Apple via Mobile Device Management, comme mentionné dans cette question . Il y a aussi le BuildStore ( http://builds.io/ ), qui pour 10 $ / an permet également cette fonctionnalité, apparemment en ajoutant des utilisateurs à une "équipe de développeurs" associée à un compte payant du programme pour développeurs Apple (voir documentation de développement Apple ) . Avec Xcode 7, est-il possible de faire une telle chose sans entreprise ni même compte développeur régulier?

mise à jour: Grâce à l'aide de Stacksza, j'ai fait quelques progrès, que je résumerai ici.

  1. XCode créera une archive (Produit -> Archive), mais il ne vous permet pas d'exporter une archive vers un fichier .ipa pour une distribution ad hoc sans vous abonner au niveau du compte ADP payant.
  2. Aucun problème cependant, car l'outil de ligne de commande Xcode ne créer un exécutable .ipa, même sans compte ADP payé. Utilisez une commande comme xcodebuild -exportArchive -archivePath Provenance-Release\ 11-20-15\,\ 22.24.xcarchive/ -exportOptionsPlist ~/manifest.plist -exportPath ~/Provenance(voir la réponse de Khawar sur Comment créer ipa dans xcode 6 sans compte de développeur Apple? )
  3. Mais cette commande vous oblige à spécifier un fichier manifeste .plist. La réponse de Razvan à Over The Air (OTA) iOS IPA File Distribution For Public? contient un exemple de manifest.plist, ainsi que des instructions pour le format de lien hypertexte nécessaire pour fournir un lien de téléchargement, qui doit être hébergé sur une page Web SSL. Il se peut que l'URL SSL doive calculer l'ID du bundle de l'application, je ne suis pas sûr.
  4. Mais ce qui précède ne fonctionne que si l'application est configurée pour l'appareil qui la télécharge et que l'appareil a déjà installé le certificat de développeur. Ainsi, par exemple, un appareil précédemment connecté via USB à mon Xcode peut maintenant télécharger l'application par liaison radio, ce qui est génial. C'est un progrès. Mais pour les appareils propres, j'obtiens l'erreur Could not install embedded profile: 0xe8008012 (This provisioning profile cannot be installed on this device.)(telle que vue dans la console de l'appareil, qui peut être consultée dans Xcode -> Fenêtre -> Appareils, ou bien dans l'application Apple Configurator).
  5. Pour qu'une application soit provisionnée pour un appareil, elle doit contenir l'UDID de l'appareil dans le embedded.mobileprovisionfichier, voir Comment intégrer un profil de provisioning dans une application iOS , Comment automatiser la vérification d'un champ dans le fichier intégré.mobileprovision d'un ipa? , Comment savoir quel profil a été utilisé pour créer le fichier * .ipa? et Existe - t-il un moyen de voir quels UDID sont inclus dans une version? . Cependant, vous ne pouvez pas simplement modifier ce fichier pour ajouter l'UDID, car alors le CODESIGNATURE de l'application ne correspond pas et l'appareil signalera l'erreurFailed 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, nous devons donc démissionner de l'application. Xcode fournit un outil de ligne de commande appelé codesignqui peut le faire. Les instructions sont à Comment re-signer le fichier ipa? et Re-signer IPA (iPhone) et Resign an iPhone App, insérer un nouvel ID de bundle et envoyer à Xcode Organizer pour le téléchargement et comment re-signer manuellement un IPA avec un nouveau profil d'approvisionnement . J'ai dû spécifier mon certificat de développeur, dont le nom précis peut être trouvé dans Keychain Access, sous l'onglet Certificats, et ressemble à "iPhone Developer: [email protected] (ABCDEFGHIJ)". Ensuite, la commande est comme codesign -f -s "iPhone Developer: [email protected] (ABCDEFGHIJ)" Payload/Provenance.app. Les exemples de commandes dans les instructions ci-dessus comprenaient un indicateur appelé--resource-rules, mais je n'ai trouvé aucun fichier de ce type dans mon application compilée, j'ai donc supprimé cet indicateur. Je me demande ce que cela fait et si c'est nécessaire. Edit: L'excellent article de blog Inside Code Signing de Thomas Kollbach explique que l' --resource-rulesindicateur était utilisé pour indiquer quelles parties d'une application doivent être signées, mais puisque iOS8 est obsolète et que l'application entière doit être signée.
  7. Maintenant que l'application a ajouté l'UDID et qu'elle est signée, le télécharger sur le nouvel appareil donne les erreurs Could not install embedded profile: 0xe8008003 (This provisioning profile is malformedet A valid provisioning profile for this executable was not found. Je suppose que le problème est que l'appareil n'a toujours pas installé le certificat de développeur. Lors du chargement latéral via Xcode, avant que l'application ne s'exécute, vous devez trouver le certificat installé dans Paramètres -> Général -> Profil, sélectionnez votre certificat et appuyez sur "Faire confiance". Cependant, cette option n'apparaît pas après le téléchargement en direct de l'application ad hoc, donc je ne sais pas comment procéder. Je pense que j'ai besoin d'un moyen d'installer le certificat de développeur sur l'appareil. Selon Installation du profil d'approvisionnement sur iOS 8.0.2, cela était possible en envoyant simplement le certificat par e-mail à l'appareil, mais cela ne fonctionne plus depuis iOS 8. Je n'ai pas essayé de confirmer. Comment installer à distance mon certificat de développeur sur un appareil iOS?
  8. J'ai essayé d'exporter mon certificat de développeur iPhone à partir de Keychain Access et de l'envoyer par e-mail à l'appareil. L'appareil a pu installer le certificat, mais il a affiché un avertissement rouge indiquant qu'il n'était pas signé, alors que lorsque le certificat a été installé via Xcode / USB, il n'y avait pas un tel avertissement. Selon Rhythmic Fistman, il est possible de rechiffrer un fichier embedded.mobileprovision? , le profil doit être signé par Apple pour fonctionner. Cela peut être le point de friction. Apple ne signera votre certificat que si vous avez un compte ADP payant.
  9. Ce billet de blog sur l'approvisionnement par Sean Heber était très éclairant sur la théorie générale des certificats de développeur et des profils d'approvisionnement (avec Kollbach, ils devraient tous deux être tenus de lire). Il contient ce paragraphe:

    La raison pour laquelle tout cela fonctionne et est sécurisé est qu'Apple génère les profils d'approvisionnement dans le portail, puis les signe avec leurs propres clés privées avant de vous les fournir. Seule Apple peut faire la signature des profils d'approvisionnement. Le fichier que vous téléchargez ne peut donc pas être falsifié sans le rendre invalide. Un profil d'approvisionnement non valide ne sera pas accepté par iOS et Apple peut donc contrôler exactement ce qui peut ou ne peut pas être approvisionné par un développeur en limitant simplement l'accès à la signature du profil d'approvisionnement aux éléments que le portail des développeurs vous autorise à configurer dans le premier place - même si les profils d'approvisionnement peuvent prendre en charge un certain nombre d'autres options impressionnantes que vous ne pouvez pas utiliser sans jailbreak. C'est pourquoi vous devez enregistrer les appareils de test sur le portail, ajoutez vos certificats au portail, etc. - seules les choses dans le portail (et donc les nombres qui peuvent être contrôlés et limités arbitrairement par Apple) peuvent être incluses dans un profil d'approvisionnement créé et correctement signé. Le portail est l'endroit où les politiques et limitations de provisionnement d'Apple sont réellement appliquées.

Cela semble répondre définitivement à ma question (puis-je faire fonctionner l'application sans compte ADP payant) avec un "non". Bien que cet article soit antérieur à Xcode 7. Apparemment, Xcode 7 enverra l'UDID d'un appareil au portail Apple et recevra en réponse un profil d'approvisionnement signé par Apple, contenant cet UDID. Xcode 7 ne fait cela que lorsque l'appareil est branché via USB et reconnu par Xcode, mais on se demande si une demande manuelle de Xcode à Apple pourrait être élaborée? Cela va plus loin dans l'ingénierie inverse d'Apple que je ne suis pas à l'aise, et viole probablement le ToS ou autre, donc je pense que je suis satisfait de la réponse "non".

Selon la page à propos de BuildStore , ils gèrent quelque chose de similaire par e-mail, donc cela peut être possible.

Xcode "Build and Archive" à partir de la ligne de commande est assez ancien (environ xcode 3), mais suggère d'utiliser à la xcrunplace de xcodebuildce que j'ai utilisé.

ziggourisme
la source
1
Veuillez envisager de diviser cela. La question doit être courte, simple et facile à comprendre. Toutes les réponses / processus comment vous avez obtenu votre réponse et votre article de blog doivent être dans la section des réponses.
bmike

Réponses:

2

La réponse est presque OUI!

J'ai réussi à installer de nouvelles versions de la même application sur les appareils via Fabric.io sans abonnement Apple Dev. (Je suppose que vous pouvez également les distribuer avec iTunes. Envoyez l'ipa au testeur, et il devrait pouvoir l'installer via iTunes.)

Le seul inconvénient est que vous devez connecter l'appareil à Xcode au moins une fois . Ensuite, vous pouvez installer à distance de nouvelles versions. (Je n'ai pas trouvé le moyen de le faire manuellement en connaissant l'udid)

Lorsque vous connectez le périphérique "inconnu" à xcode 7, un fix issuebouton apparaît Target general settings. Résolvez le problème et Xcode générera un nouveau profil d'approvisionnement avec cet appareil inclus. (vous pouvez le trouver dans ~/Library/MobileDevice/Provisioning Profiles)

Vous pouvez ensuite utiliser ce profil d'approvisionnement pour distribuer des applications via Fabric.io

  1. Inscription sur Fabric.io
  2. Configurez Fabric pour votre projet (il y a un guide étape par étape)
  3. Assurez-vous que xcode utilise la bonne prov. profil pour le signer. Automatictravaillé pour moi.
  4. Xcode> projet> archive
  5. l'assistant de tissu détectera la construction et vous pourrez la distribuer.

Désolé les gars qui ne sont pas assez compétents avec Xcode, je n'ai pas beaucoup de temps pour ajouter un guide moins sujet aux erreurs, mais j'espère que cette réponse aidera quelqu'un avec des idées.

CONSEIL: utilisez ce plugin Quicklook pour voir l'intérieur des ipas et prov. profils!

DanSkeel
la source
1
Oui, cette réponse est conforme à ce que j'ai découvert lors de mes tests. Je me demande toujours s'il serait possible de contourner cette "connexion de l'appareil à xcode au moins une fois" en usurpant le message que Xcode envoie aux serveurs Apple avec le nouvel appareil UDID
ziggourisme
2

À partir d'une version d'iOS 9.x publiée depuis la publication de ma réponse, ce n'est même plus une possibilité. Apple limite désormais les téléchargements OTA aux comptes non gratuits, comme le montrent les erreurs dans les journaux de l'appareil en cas d'échec de l'installation.

J'ai testé cela intensivement, car cela serait également incroyable pour mes applications.

Puis-je distribuer mes applications OTA sans abonnement au programme développeur (coûte de l'argent)?

Vous pouvez créer et signer un IPA et créer le fichier manifeste pour celui-ci, mais il ne pourra pas être installé sur l'appareil. La raison en est que Xcode doit configurer l'IPA pour cet appareil (censé le signer correctement avec l'UDID). Vous pouvez même voir cela se produire si vous essayez de connecter un nouvel appareil au Mac et d'exécuter votre application via Xcode dessus. La réponse courte est non.

Que puis-je faire pour que cela fonctionne?

Vous pouvez vous inscrire au programme développeur avec Apple (coûte de l'argent) et ajouter l'UDID de son appareil à votre profil, puis créer une IPA et un fichier manifeste, les télécharger sur un serveur Web et lui envoyer l'URL.

C'est vraiment pour la sécurité, car la barrière des prix est généralement ce qui empêche la diffusion d'applications malveillantes sur le Web. Sans oublier de garder la majorité des téléchargements d'applications dans l'App Store.

Je me suis inscrit au programme développeur? Comment puis-je le distribuer maintenant?

Vous devez disposer d'un serveur Web HTTPS (et d'un certificat SSL pour lequel vous pouvez créer votre propre racine). Vous devez également avoir ajouté leur UDID à votre profil de développeur (je ne sais pas exactement comment procéder). Vous devez utiliser Xcode pour créer l'IPA (Produit> Archives> Exporter> Enregistrer pour un déploiement ad hoc> Connectez-vous avec l'identifiant Apple> Suivez les instructions) et vous obtiendrez un Plist et un fichier IPA. Mettez ces deux sur votre serveur et modifiez les valeurs dans le fichier Plist pour correspondre aux URL HTTPS sur votre serveur. Ensuite, vous utilisez un lien spécial pour créer un lien vers le manifeste Plist, et il apparaîtra demandant à l'utilisateur d'installer votre application. Si tout se passe bien, l'utilisateur aura votre application. Vous devez également coder votre propre méthode de mise à jour si vous le souhaitez.

S'il s'agit d'une application que vous souhaitez distribuer à ce stade, il peut être plus judicieux de la mettre sur l'App Store, ou si c'est pour les tests bêta, utilisez TestFlight. Si vous avez un compte développeur, vous pouvez utiliser TestFlight et ignorer tout cela pour tester les applications. Tout ce dont vous avez besoin, c'est de leur e-mail et de les amener à installer l'application TestFlight depuis l'App Store. TestFlight peut être géré depuis iTunes Connect.

AppleBetas
la source
Et une fois que vous vous êtes inscrit pour le développeur, comment distribuez-vous l'application?
ziggourisme du
Mis à jour mon message avec les instructions.
AppleBetas
Merci, c'est ce que je cherchais. Je sais que vous avez dit qu'il était nécessaire d'avoir un compte de développement payant et de provisionner les UDID, mais j'aimerais essayer cette méthode sans d'abord. Je rendrai compte des résultats.
ziggourisme du
En suivant vos instructions pour créer une archive, mais les boutons "Télécharger sur l'App Store", "Valider" et "Exporter" étaient tous grisés, avec un lien ci-dessous qui disait "La distribution nécessite une inscription au programme pour développeurs Apple" qui a démarré moi à une page Web pour vous inscrire à l'ADP. Donc, d'une part, c'est comme vous l'aviez promis: un abonnement de 99 $ au programme pour développeurs Apple semble être nécessaire, même si vous ne souhaitez que la distribution ad hoc en direct (OTA) de votre application. L'interface graphique XCode ne créera pas l'IPA et le profil d'approvisionnement.
ziggourisme du
D'un autre côté, sur stackoverflow.com/questions/26928721/…, l' utilisateur Khawar prétend que cela peut être fait sans le sous-ADP en utilisant la xcodebuildligne de commande qui créera l'archive .ipa ainsi que signera et approvisionner l'application si vous utilisez l' -exportProvisioningProfileindicateur (voir commentaire de Pankaj Rathor).
ziggourisme du
1

Fondamentalement, quelqu'un doit signer l'application. Vous pouvez obtenir le fichier IPA, mais il ne fonctionnera pas sur des appareils arbitraires. Concentrez-vous sur cela et vous déciderez rapidement si vous voulez supporter les tracas de chaque personne utilisant Xcode ou si payer pour qu'Apple signe vos applications est logique.

Si vous comptez sur une signature non développeur iOS 9 avec un ancien identifiant Apple, vos testeurs doivent tous se connecter avec votre identifiant Apple pour exécuter l'application.

Vous pouvez payer pour qu'Apple gère les comptes et la signature en payant un an de comptes de développeur. Ensuite, vous pouvez envoyer un e-mail, afficher l'application sur n'importe quel serveur, utiliser TestFlight ou des méthodes plus simples pour vous, autres que la distribution de votre identifiant Apple à vos testeurs / utilisateurs de l'application.

Vous pouvez toujours envoyer le code source à votre frère s'il a Xcode, mais vous avez mentionné que c'était le point de ne pas demander à quelqu'un d'avoir un Mac pour installer et signer l'application.

Il est plus facile de briser la prison que de forger la chaîne de certificats d'Apple, mais je ne le recommande pas.

bmike
la source
Où les testeurs devraient-ils se connecter avec mon identifiant Apple pour exécuter les applications signées non-développeur?
ziggourisme du
Dans Xcode, utiliser votre Mac est le plus simple. Je leur demanderais de vous envoyer leur téléphone pour charger l'application si elle n'arrive pas à Xcode ...
bmike
Oui, l'installation de Xcode sur USB fonctionne très bien. Ma question portait sur la possibilité de distribution / installation à distance. StackExchange l'a fait pour leur application bêta. Je veux le faire aussi.
ziggourisme du
@ziggurism SE a payé un certificat d'entreprise. Vous aurez besoin d'un peu de paperasse juridique pour y arriver. Plus plusieurs centaines de dollars annuellement. TestFlight est l'option la moins chère et moins de zone grise. Ce que SE a fait n'est pas probable "d'après le livre" selon la licence pour les certificats qu'ils ont utilisés, mais je ne suis pas avocat ...
bmike