À 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.
- 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.
- 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? ) - 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.
- 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). - Pour qu'une application soit provisionnée pour un appareil, elle doit contenir l'UDID de l'appareil dans le
embedded.mobileprovision
fichier, 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.)}
- Ok, nous devons donc démissionner de l'application. Xcode fournit un outil de ligne de commande appelé
codesign
qui 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: username@mac.com (ABCDEFGHIJ)". Ensuite, la commande est commecodesign -f -s "iPhone Developer: username@mac.com (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-rules
indicateur é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. - 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 malformed
etA 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? - 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.
- 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 xcrun
place de xcodebuild
ce que j'ai utilisé.