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.
- 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.
- 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 ? ) - 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.
- 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). - 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 suivanteFailed 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, 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 suivantecodesign -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. - 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
yA 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 ? - 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.
-
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é.