10 votes

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

Suivant ces instructions (voir aussi Documentation pour les développeurs d'Apple et la réponse de BoltClock à Testez l'application iOS sur un appareil sans programme de développement Apple ou Jailbreak. ), j'ai pu compiler une application iOS (dans ce cas-ci provenance (une application d'émulation de console de jeu vidéo qui ne respecte pas les directives d'Apple et ne sera jamais autorisée dans l'App Store d'Apple) dans Xcode 7, le signer avec mon compte personnel iCloud, le charger sur mon iPhone (en le branchant sur mon Mac par USB, et en sélectionnant mon iPhone dans le menu xcode -> Produit -> Destination), et autoriser mon téléphone à l'exécuter en "faisant confiance" aux applications avec cette signature dans Réglages -> Général -> Profil, ce qui installe le certificat associé à mon compte iCloud sur l'appareil.

Je voudrais reproduire ces étapes avec un téléchargement par voie aérienne. Puis-je faire en sorte que Xcode produise un exécutable que je puisse partager avec mon frère, qui a un iPhone, mais n'a pas accès à un Mac avec Xcode ?

Le réseau StackExchange a apparemment réalisé quelque chose de similaire pour son programme bêta d'applications iOS, en utilisant la distribution d'entreprise d'Apple via Mobile Device Management, comme indiqué dans le document cette question . Il existe également 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 de l'Apple Developer Program (voir Documents de développement d'Apple ). Avec Xcode 7, est-il possible de faire une telle chose sans un compte développeur payant d'entreprise ou même régulier ?

mettre à jour : Grâce à l'aide de Stacksza, j'ai fait quelques progrès, que je vais résumer 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 souscrire au niveau payant du compte ADP.
  2. Pas de problème cependant, car l'outil xcode en ligne de commande fait créer un exécutable .ipa, même sans compte ADP payant. 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 à l'adresse Comment créer une ipa dans xcode 6 sans compte Apple Developer ? )
  3. Mais cette commande nécessite de spécifier un fichier manifeste .plist. La réponse de Razvan à Distribution Over The Air (OTA) du fichier iOS IPA pour le public ? contient un exemple de manifest.plist, ainsi que des instructions sur le format d'hyperlien 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 intégrer l'identifiant du paquet de l'application, je n'en suis pas sûr.
  4. Mais ce qui précède ne fonctionne que si l'application est provisionnée pour l'appareil qui la télécharge, et si l'appareil a déjà installé le certificat du développeur. Ainsi, par exemple, un appareil qui était auparavant connecté par USB à mon Xcode peut maintenant télécharger l'application par voie aérienne, ce qui est formidable. C'est un progrès. Mais pour les appareils propres, je reçois l'erreur Could not install embedded profile: 0xe8008012 (This provisioning profile cannot be installed on this device.) (tel qu'affiché dans la console de l'appareil, qui peut être consultée dans Xcode -> Fenêtre -> Appareils, ou encore dans l'application Configurateur Apple).
  5. Pour qu'une application soit provisionnée pour un appareil, elle doit contenir l'UDID de l'appareil dans le champ embedded.mobileprovision voir Comment intégrer un profil d'approvisionnement dans une application iOS ? , Comment automatiser la vérification d'un champ dans l'embedded.mobileprovision d'un ipa ? , Comment savoir quel profil a été utilisé pour construire le fichier *.ipa ? et Existe-t-il un moyen de voir quels UDID sont inclus dans une construction ? . Cependant, vous ne pouvez pas simplement modifier ce fichier pour ajouter l'UDID, car alors la CODESIGNATURE de l'application ne correspond pas, et l'appareil signalera l'erreur suivante Failed 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, donc nous devons démissionner de l'application. Xcode fournit un outil en ligne de commande appelé codesign qui peut le faire. Les instructions sont disponibles à l'adresse suivante Comment re-signer le fichier ipa ? y Re-signer l'IPA (iPhone) y Démissionner une application iPhone, insérer un nouveau Bundle ID et envoyer à Xcode Organizer pour téléchargement y Comment re-signer manuellement un IPA avec un nouveau profil de provisionnement ? . J'ai dû spécifier mon certificat de développeur, dont le nom exact se trouve dans Keychain Access, sous l'onglet Certificats, et ressemble à "iPhone Developer : username@mac.com (ABCDEFGHIJ)". Ensuite, la commande est la suivante codesign -f -s "iPhone Developer: username@mac.com (ABCDEFGHIJ)" Payload/Provenance.app . Les exemples de commandes dans les instructions ci-dessus incluent un drapeau appelé --resource-rules mais je n'ai pas trouvé un tel fichier dans mon application compilée, donc j'ai enlevé ce drapeau. Je me demande ce qu'il fait, et s'il est nécessaire. Edit : L'excellent billet de blog Signature du code interne de Thomas Kollbach explique que le --resource-rules était utilisé pour indiquer quelles parties d'une application doivent être signées, mais depuis iOS8, il est déprécié et l'application entière doit être signée.
  7. Maintenant que l'UDID a été ajouté à l'application et qu'elle est signée, son téléchargement sur le nouvel appareil donne lieu aux erreurs suivantes Could not install embedded profile: 0xe8008003 (This provisioning profile is malformed y A valid provisioning profile for this executable was not found . Je pense que le problème actuel est que l'appareil n'a toujours pas installé le certificat du développeur. Lors du sideloading 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 "trust". Cependant, cette option n'apparaît pas après le téléchargement over-the-air de l'application ad hoc, je ne sais donc pas comment procéder. Je pense que j'ai besoin d'un moyen d'installer le certificat de développeur sur l'appareil. D'après Installation de provisioningprofile sur iOS 8.0.2 Auparavant, il suffisait d'envoyer le certificat par courriel à l'appareil, mais cela ne fonctionne plus depuis iOS 8. Je n'ai pas essayé de le confirmer. Comment puis-je installer mon certificat de développeur sur un appareil iOS à distance ?
  8. J'ai essayé d'exporter le certificat de développeur de mon iPhone depuis Keychain Access et de l'envoyer par e-mail à l'appareil. L'appareil a pu installer le certificat, mais il s'est affiché avec 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 aucun avertissement de ce type. Selon Rhythmic Fistman à est-il possible de ré-encrypter un fichier embedded.mobileprovision ? le profil doit être signé par Apple pour fonctionner. C'est peut-être là que le bât blesse. Apple ne signera votre certificat que si vous avez un compte ADP payant.
  9. Cet article de blog sur le provisionnement de Sean Heber a été très instructif sur la théorie générale des certificats de développeur et des profils d'approvisionnement (ainsi que sur la théorie de l'approvisionnement en ressources). Kollbach ils devraient tous deux être des lectures obligatoires). Il contient ce paragraphe :

    La raison pour laquelle tout cela fonctionne et est sécurisé est qu'Apple génère les profils de provisionnement dans le portail et les signe ensuite avec ses propres clés privées avant de vous les livrer. La signature des profils de provisionnement est une opération que seul Apple peut réaliser. Il est donc impossible de modifier le fichier que vous téléchargez sans le rendre invalide. Un profil de provisionnement invalide ne sera pas accepté par iOS et Apple peut donc contrôler exactement ce qui peut et ne peut pas être provisionné par un développeur en limitant simplement l'accès à la signature du profil de provisionnement aux éléments que le portail des développeurs vous donne la permission de configurer en premier lieu - même si les profils de provisionnement peuvent prendre en charge un grand nombre d'autres options géniales que vous ne pouvez pas utiliser sans jailbreaking. C'est pourquoi vous devez enregistrer des appareils de test dans le portail, ajouter vos certificats au portail, etc. - seuls les éléments du portail (et donc dont le nombre peut être contrôlé et limité arbitrairement par Apple) peuvent être inclus dans un profil de provisionnement généré et correctement signé. Le portail est l'endroit où les politiques et les 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 un compte ADP payant) par 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 de provisionnement signé par Apple, contenant cet UDID. Xcode 7 ne fait cela que lorsque le périphérique est branché via USB et reconnu par Xcode, mais on peut se demander si une demande manuelle de Xcode à Apple ne pourrait pas être fabriquée ? Cela va plus loin dans la rétro-ingénierie du matériel d'Apple que je ne suis à l'aise avec, et viole probablement les ToS ou autre, donc je pense que je suis satisfait avec la réponse "non".

Selon la page d'accueil de BuildStore Ils gèrent quelque chose de similaire par e-mail, donc c'est possible.

Xcode "Build and Archive" en ligne de commande est assez vieux (circa xcode 3), mais suggère d'utiliser xcrun au lieu de xcodebuild que j'ai utilisé.

3voto

DanSkeel Points 182

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 aussi 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 le dispositif à Xcode au moins une fois . Vous pouvez ensuite installer les nouvelles versions à distance. (Je n'ai pas trouvé le moyen de le faire manuellement en connaissant l'udid)

Lorsque vous connectez l'appareil "inconnu" au xcode 7, il y a une fix issue bouton dans Target general settings . Corrigez le problème et Xcode générera un nouveau profil de provisionnement avec ce dispositif inclus. (vous pouvez le trouver dans ~/Library/MobileDevice/Provisioning Profiles )

Vous pouvez ensuite utiliser ce profil de provisionnement pour distribuer des applications via Fabric.io.

  1. S'inscrire sur Fabric.io
  2. Configurer Fabric pour votre projet (il existe un guide étape par étape)
  3. Assurez-vous que xcode utilise le bon profil prov. pour le signer. Automatic a fonctionné pour moi.
  4. Xcode>projet>archive
  5. fabric helper détectera le build et vous pourrez le 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 profils ipas et prov. !

2voto

AppleBetas Points 124

À partir d'une version d'iOS 9.x publiée depuis que ma réponse a été postée à l'origine, ce n'est même plus une possibilité. Apple restreint désormais les téléchargements OTA aux comptes non libres, comme le montrent les erreurs dans les journaux de l'appareil lorsque l'installation échoue.

Je l'ai testé de manière approfondie, car ce serait formidable pour mes applications également.

Puis-je distribuer mes applications en OTA sans adhérer au programme de développement (payant) ?

Vous pouvez créer et signer un IPA et créer le fichier Manifest pour celui-ci, mais il ne s'installera pas sur l'appareil. La raison en est que Xcode doit configurer l'IPA pour ce périphérique (en le signant correctement avec l'UDID). Vous pouvez même voir cela se produire si vous essayez de brancher un nouveau périphérique au Mac et d'exécuter votre application via Xcode sur celui-ci. La réponse courte est non.

Que puis-je faire pour que ça marche ?

Vous pouvez vous inscrire au programme de développement d'Apple (payant) et ajouter l'UDID de son appareil à votre profil, puis créer un fichier 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 du prix est généralement ce qui empêche les applications malveillantes d'être distribuées sur le web. Sans compter que la majorité des téléchargements d'applications restent dans l'App Store.

Je me suis inscrit au programme de développement ? 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 faire). Vous devez utiliser Xcode pour créer l'IPA (Product > Archive > Export > Save for Ad-hoc Deployment > Sign in with Apple ID > Follow instructions) et vous obtiendrez un Plist et un fichier IPA. Placez-les tous les deux sur votre serveur et modifiez les valeurs du fichier Plist pour qu'elles correspondent aux URL HTTPS de votre serveur. Ensuite, utilisez un lien spécial pour accéder au manifeste Plist, qui s'affichera pour demander à l'utilisateur d'installer votre application. Si tout se passe bien, l'utilisateur disposera de 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, s'il s'agit d'un test bêta, d'utiliser TestFlight. Si vous disposez d'un compte de développeur, vous pouvez utiliser TestFlight et sauter toutes ces étapes pour tester l'application. Tout ce dont vous avez besoin, c'est de leur adresse électronique et de leur demander d'installer l'application TestFlight depuis l'App Store. TestFlight peut être géré à partir d'iTunes Connect.

1voto

Oskar Points 1242

En fait, quelqu'un doit signer l'application. Vous pouvez obtenir le fichier IPA, mais il ne fonctionnera pas sur des appareils arbitraires. Concentrez-vous sur ce point et vous déciderez rapidement si vous voulez endurer les tracas de chaque personne utilisant Xcode ou si payer pour qu'Apple signe vos applications a du sens.

Si vous comptez sur la signature des non-développeurs d'iOS 9 avec n'importe quel ancien identifiant Apple, vos testeurs doivent tous se connecter avec votre identifiant Apple pour exécuter l'application.

Vous pouvez payer pour qu'Apple s'occupe des comptes et de la signature en payant un an de comptes de développeur. Vous pouvez alors envoyer des courriels, placer l'application sur n'importe quel serveur, utiliser TestFlight ou toute autre méthode plus facile pour vous que de donner 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 but de ne pas avoir quelqu'un qui a un Mac pour installer et signer l'application.

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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X