Xcode 6 - Comment choisir un certificat de signature / un profil d'approvisionnement pour une distribution Ad-Hoc?


143

Pour distribuer l'application à nos testeurs, nous utilisons Xcode, ce que nous faisons en utilisant le processus suivant:

  • Application d'archivage
  • Distribuer pour Ad-Hoc
  • Choisissez le profil d'approvisionnement
  • Enregistrez le .ipa dans un dossier

Mais avec Xcode 6 , ce flux de travail a un peu changé. Je peux toujours sélectionner l'option de distribution Ad-Hoc, mais je ne peux pas sélectionner le profil d'approvisionnement que je souhaite. Cela ne nous donne aucun contrôle sur le certificat de signature utilisé et la configuration du profil d'approvisionnement (nous utilisons des notifications push).

Par défaut, l' iPhone distributionidentité de signature est utilisée et un certain type de XC Ad Hocprofil de provisionnement est généré, ce qui peut être vu sur l'image ci-dessous: Exporter IPA Si vous cliquez sur la flèche près du profil de provisionnement, il ouvre le dossier avec les profils de provisionnement.

Ma question est donc:

Existe-t-il un moyen dans Xcode 6 pour sélectionner le profil d'approvisionnement utilisé avec la distribution ad hoc?

Merci!


Est-ce que quelqu'un sait si cela a été corrigé? Est-il possible de distribuer une version aux utilisateurs d'iOS 7 pour tester les notifications push?
haupman

en utilisant la version Xcode 6 GM, même problème ...
Chris Chen

Nous n'avons donc toujours pas de bonne solution pour cela? les réponses ci-dessous ne fonctionnent pas pour moi. Peut-on utiliser le profil de provisionnement XC ?? Je ne veux pas perdre une semaine à attendre l'examen Apple. Merci
Miles M.

2
J'ai eu ce problème aujourd'hui et il semble que Xcode n'utilise que des profils de distribution qui utilisent tous les appareils que vous avez enregistrés en ligne.
HackingOtter

1
Sérieusement? Nous ne pouvons pas sélectionner le fichier d'approvisionnement? Je crois que Yossarian vit.
ajbraus

Réponses:


52

J'étais confronté au même problème, résolu en utilisant le script de l'outil de ligne de commande "xcodebuild", qui est préinstallé avec Xcode 6 (je n'avais pas besoin de réinstaller Xcode 5).

http://www.thecave.com/2014/09/16/using-xcodebuild-to-export-a-ipa-from-an-archive/

Script dans le terminal:

xcodebuild -exportArchive -archivePath $projectname.xcarchive -exportPath $projectname -exportFormat ipa -exportProvisioningProfile 'Provisioning Profile Name'

1
cela fonctionne pour moi! les autres réponses utilisant xcodebuildn'avaient pas le -exportProvisioningProfilecommutateur.
bunnyhero

6
Notez que cela ne fonctionnera pas correctement si votre application utilise des extensions, des frameworks intégrés ou des bibliothèques.
clarkcox3

4
Cela m'a aidé. Merci! Apple met donc à jour XCode pour générer des profils XC Prov merdiques, mais oublie XCodeBuild. Nous avons juste eu de la chance cette fois. Oh! Comment Apple nous fait souffrir!
kamyFC du

1
Je mets cela comme la réponse acceptée. La réponse peut ne pas fonctionner dans tous les cas, mais avec certaines modifications, xcodebuild peut être utilisé pour résoudre ce problème (c'est ce que nous faisons sur notre serveur CI).
Legoless

1
J'aurais aimé avoir appris 3 heures plus tôt que xcodebuild peut désormais aussi exporter au format ipa! J'ai perdu autant de temps à essayer de faire en sorte que xcrun intègre un profil d'approvisionnement donné, mais cela ne fonctionnera tout simplement pas sur Xcode 6. xcodebuild fonctionne! Je vous remercie.
Oscar Hierro

31

J'ai eu un problème similaire lors de la soumission à l'App Store. J'ai créé une archive, puis j'ai cliqué sur «Soumettre» et Xcode voulait signer automatiquement avec le profil de provisionnement générique par défaut «XC com. *» Au lieu du profil explicite qui avait déjà.

Pour résoudre ce problème, je viens de générer à nouveau le profil sur le portail des développeurs Apple:

1) Accédez à developer.apple.com et recherchez le profil d'approvisionnement de distribution que vous souhaitez utiliser.
2) Sélectionnez-le, cliquez sur «Modifier», renommez le profil et cliquez sur «Générer».
3) Téléchargez le profil d'approvisionnement sur le bureau et faites-le glisser sur l'icône Xcode 6.
4) Redémarrez Xcode 6.
5) Ouvrez la fenêtre de l'organiseur et cliquez sur «Soumettre» sur l'archive que vous avez créée. Xcode choisira automatiquement votre profil explicite au lieu du profil générique.


Salut, y a-t-il une déclaration officielle à propos de ce changement?
franc

Pas que je sache de. J'ai essayé de comparer les anciens et les nouveaux profils dans un éditeur de texte pour voir si je pouvais repérer des changements dans le format, mais je n'ai rien remarqué de significatif
GingerBreadMane

2
J'étais sceptique mais cela a fonctionné pour moi. Je viens juste de basculer vers Xcode 6 et j'ai tenté de sortir ma première version ad hoc
Newtz

Jusqu'à présent, j'utilisais le profil de provisionnement de développement. Est-ce toujours utilisable ou dois-je créer un profil de distribution?
Legoless le

Oui Legoless, vous devrez créer un profil de distribution pour exporter une build. Vous pouvez toujours utiliser un profil de développement pour déboguer lorsque votre appareil est connecté à votre Mac.
codeburn

27

Une fois que vous êtes dans l'organisateur

  • Sélectionnez la version ad hoc et cliquez sur "Exporter ..."
  • Sélectionnez "Enregistrer pour un déploiement ad hoc" -> Suivant
  • Au lieu de sélectionner une organisation dans le menu déroulant, sélectionnez "Utiliser l'élément de signature local" -> Choisissez
  • Exportez et enregistrez .ipa comme auparavant.

Bien entendu, vous devez avoir généré, téléchargé et installé le profil d'approvisionnement ad-hoc.


5
Résolu le problème grâce à cette réponse, et cette réponse . Le profil de provisionnement doit être lié à un ID d'application explicite, qui utilise le même identifiant de bundle que votre application. Un ID d'application générique ne fonctionnera pas. Vous devez ensuite sélectionner "Utiliser l'élément de signature local" lors de l'exportation de l'application.
Sarah Elan

@SarahElan combine les deux réponses et écris une nouvelle ... merci
YaBoiSandeep

À mon avis et au regard de mon expérience, je pense que c'est la meilleure réponse. Merci.
Basem Saadawy

17

Il semble que le dernier profil d'approvisionnement généré l'emporte pour le moment. Vous pouvez donc simplement régénérer le profil que vous souhaitez et le télécharger et Xcode l'utilisera.

Une approche légèrement meilleure: définissez le profil prov souhaité dans votre cible et utilisez la ligne de commande pour créer votre ipa, cela fonctionne également.

Voici le script que j'utilise:

#!/bin/sh

# Current as working as of 2014/09/22
# Xcode 6

OUTPUTDIR="$HOME/build"
APPNAME="your-app"
SCHEME="your-app"
APP_WORKSPACE="$HOME/Path/To/your-app.xcworkspace"

rm "$OUTPUTDIR/$APPNAME.ipa" #deletes previous ipa
xcodebuild -workspace "$APP_WORKSPACE" -scheme "$SCHEME" archive -archivePath "$OUTPUTDIR/$APPNAME.xcarchive"
xcodebuild -exportArchive -exportFormat ipa -archivePath "$OUTPUTDIR/$APPNAME.xcarchive" -exportPath "$OUTPUTDIR/$APPNAME.ipa" 

et mes paramètres:

Paramètres Xcode


Y a-t-il un moyen plus simple?
Timur Bernikovich

Je pense que c'est parce que MacOS 10.0. est toujours en version bêta.
Timur Bernikovich

1
Le problème avec l'utilisation des profils XC Ad Hoc est qu'ils incluent toujours tous les périphériques - enlève la possibilité de désactiver certains périphériques que vous pouvez faire avec des profils manuels.
Jonny

Le profil XC Ad Hoc n'est qu'un exemple. Vous pouvez utiliser le profil de votre choix.
Thorsten

Vous devez supprimer l'extension '.ipa' de l'argument de -exportPath, car elle est déjà ajoutée automatiquement par xcodebuild.
Oscar Hierro

8

Je ne pouvais pas comprendre cela non plus - j'ai été mordu lors de la soumission à l'AppStore, où il était par défaut un profil générique.

J'ai fini par créer Xcode 6, puis je suis retourné à la fenêtre Organisateur de Xcode 5 pour la soumission. De cette façon, vous serez invité à choisir un profil avec lequel vous connecter.


C'est la solution de contournement que je fais. Mais je veux vraiment me débarrasser de Xcode 5 maintenant. Je pense utiliser maintenant xcrun et la ligne de commande.
Legoless le

J'ai essayé toutes les solutions suggérées que j'ai trouvées, mais c'est la seule qui fonctionne réellement.
HunTer DRF

8

Dans Xcode 6 (au moins 6.1 j'utilise maintenant), lorsque vous effectuez l'exportation pour ad hoc, xcode 6 analysera automatiquement s'il existe un profil de provisioning contenant tous les appareils enregistrés dans le compte développeur et en même temps correspondre à l'ID du bundle . Si non, il utilisera le profil de mise à disposition XC. Par conséquent, si vous souhaitez utiliser votre propre profil, par exemple à des fins de notification push, vous devrez sélectionner tous les appareils de votre profil sur le portail des développeurs Apple. Je suppose que c'est la raison pour laquelle certaines personnes recréer un profil fonctionneraient et d'autres non.

btw, utiliser le script peut exporter et télécharger vers testflight, mais l'appareil ne peut tout simplement pas le télécharger. probablement quelque part je me suis trompé. si quelqu'un sait pourquoi c'est, merci de me le faire savoir. tks


Merci! Cela a fait l'affaire pour moi. J'ai modifié le profil pour inclure tous les appareils, réarchivé l'application et l'alto, il a utilisé le bon profil.
Erik Villegas

C'est exactement cela et cela me semble être un bogue ou que maintenant qu'Apple présente TestFlight pour distribuer des versions bêta, la distribution AdHoc n'a pas reçu l'attention appropriée. Ce qui m'est arrivé était exactement ce que @AlexHsieh décrit; J'ai créé mon profil d'approvisionnement comme je l'ai toujours fait auparavant, sélectionné uniquement un sous-ensemble de tous mes appareils enregistrés et lorsque j'ai essayé de générer l'IPA, Xcode n'a pas trouvé de profil d'approvisionnement valide et a essayé d'utiliser ce XC généré automatiquement (qui a également échoué dans mon cas). Le correctif consistait à ajouter tous mes appareils enregistrés au profil d'approvisionnement.
jjramos

7

Cela a fonctionné pour moi:

  1. cliquez sur "Afficher les comptes .." dans la boîte de dialogue "..sélectionner une équipe de développement ..".
  2. cliquez sur "Afficher les détails .." et recherchez le profil de provisionnement XC Ad Hoc.
  3. faites un clic droit sur ce profil et choisissez "Afficher dans le Finder".
  4. supprimer le profil sélectionné.
  5. revenez à la boîte de dialogue de l'étape 1.
  6. cliquez sur "Chose".
  7. cliquez sur la flèche à côté du profil d'approvisionnement pour ouvrir le répertoire des profils d'approvisionnement.
  8. supprimez à nouveau le profil générique comme à l'étape 4.
  9. cliquez sur le bouton "Précédent" dans la boîte de dialogue "Envoyer [nom de l'application] à Apple:".
  10. sélectionnez à nouveau "Enregistrer pour un déploiement ad hoc"
  11. cliquez à nouveau sur le bouton "choisir".

maintenant, vous devriez voir le bon nom de profil d'approvisionnement.


Je n'ai pas essayé le premier. Mais celui-ci a fonctionné pour moi. Merci. =]
Glauco Neves

5
Cela n'a pas fonctionné pour moi. Même après avoir supprimé les profils aux étapes 4 et 8, les profils sont recréés et automatiquement sélectionnés à nouveau à l'étape 11.
Chun

1
Cela ne fonctionne pas pour moi, car chaque fois que je dois cliquer sur choisir un compte (j'ai plusieurs comptes pour fournir des applications à mes clients), le profil généré par XC est recréé. PITA d'Apple.
wuf810

J'ajouterais qu'avant de suivre ces étapes avec XCode 6, vous devez supprimer les profils de provisionnement XC: * de votre compte de développeur Apple. Après l'étape 4, je reviendrais à la boîte de dialogue Afficher les détails et cliquais sur le bouton Actualiser pour m'assurer que ces profils XC: * ne sont plus là. Utilisez également les paramètres de construction de Thorsten pour vous assurer de sélectionner le bon profil. A travaillé pour moi deux fois.
Android Noob

J'ai eu le même problème que @Chun et (@) wuf810. Ces putains de dispositions .mobile continuent à être recréées. Ce que j'ai fait, c'est de garder la fenêtre du répertoire "Provisioning Profiles" ouverte et de continuer à suivre les étapes de (@) user3382891 - supprimer les enregistrements .mobileprovision aussi vite qu'ils étaient recréés. Finalement, Xcode a sélectionné mon profil d'approvisionnement correct. Maintenant, je suis sur le prochain problème ...
kris

6

J'ai une solution de contournement pour cela qui fonctionne pour moi.

J'ai installé Xcode 6 et Xcode 5.1.1, Xcode 6 est dans Applications et Xcode 5.1.1 est dans un autre répertoire. Lorsque je veux faire une compilation, j'utilise Xcode 6 pour créer l'archive. Mais vous pouvez également voir l'archive créée dans Xcode 5.1.1, donc j'utilise Xcode 5.1.1 pour distribuer le .ipa Ad Hoc en utilisant le profil d'approvisionnement que je veux utiliser. Donc, construisez avec Xcode 6 mais distribuez avec Xcode 5.1.1.


Je ne suis pas en mesure de télécharger la version pour testflight de cette façon.
hardik hadwani

Si vous utilisez le même profil d'approvisionnement pour la création et la distribution, vous devriez être en mesure de télécharger votre build pour tester le vol de cette façon. Vérifiez que le profil d'approvisionnement que vous utilisez pour la création est le même que celui que vous utilisez pour la distribution.
Adam Freeman

4

L'utilisation d'actifs de signature locaux lors de l'exportation a résolu le problème pour moi:entrez la description de l'image ici


3

La réponse de @MrPatol n'a pas fonctionné pour moi. Mon scénario de travail pour Xcode 6.3.2

Dans le Centre des membres -> Profils de provisionnement iOS

  • Supprimez le profil d'approvisionnement qui a été défini par défaut lorsque vous tentiez de créer l'application (par exemple, «XC ...»). Créez un profil d'approvisionnement ad hoc (pas de production) avec un nom court.

Dans l'utilitaire de configuration de l'iPhone -> Profils de provisionnement

  • Supprimer le même profil de provisioning (par exemple "XC ...")

Dans Xcode -> Organisateur

  • Sélectionnez la version ad hoc et cliquez sur "Exporter ...." Sélectionnez "Enregistrer pour un déploiement ad hoc" -> Suivant
  • Sélectionnez une organisation dans la liste déroulante
  • Vérifiez que votre nouveau profil d'approvisionnement ad hoc est sélectionné automatiquement
  • Exportez et enregistrez .ipa comme auparavant.

2

Voici les deux points clés qui ont résolu le problème pour moi.

  • Lorsque vous générez le profil de provisionnement, il doit être lié à un ID d'application explicite qui utilise le même identifiant de bundle que votre application. Un ID d'application générique ne fonctionnera pas.
  • Lorsque vous exportez l'application pour un déploiement ad hoc, sélectionnez Utiliser l'élément de signature local dans la liste déroulante et cliquez sur Choisir.

Xcode trouvera ensuite le profil d'approvisionnement correct en faisant correspondre l'ID d'application avec l'identifiant de l'ensemble de l'application.


1

En fait, vous devez créer un nouveau profil de distribution, spécifique pour le déploiement ad hoc. Cela peut être trouvé dans le centre des membres classique, mais il s'agit d'un nouveau type de certificat.

Vous pouvez ensuite sélectionner les appareils à utiliser pour tester l'application comme vous le feriez avec un profil de développeur.

Et le certificat nouvellement créé sera disponible lorsque vous exporterez votre package depuis l'Organisateur de la manière habituelle.

Vous pouvez également utiliser la solution TestFlight fournie par Apple avec iOS 8 pour permettre à votre utilisateur d'accéder à la version préliminaire.

entrez la description de l'image ici


Oui, mais comme vous le faites remarquer, cela signifie uniquement iOS8. Apple a été particulièrement stupide de forcer les utilisateurs de Testflight à iOS8 uniquement. Pendant un bon moment, la plus grande base installée sera toujours iOS7, alors Apple aurait dû permettre cela.
wuf810

1

J'ai eu le même problème, finalement je l'ai résolu en régénérant le profil que je voulais utiliser dans Xcode 6, y compris tous les appareils que j'ai enregistrés sur mon compte iOS Dev, en le faisant de cette façon, lors de la sélection de l'exportation, il affiche le profil correct et je peut effectuer l'exportation ad hoc avec Xcode 6 sans utiliser de script. J'espère que ça aide.


1
Cela fonctionne, mais uniquement si vous êtes d'accord avec le profil d'approvisionnement contenant tous les appareils enregistrés avec votre compte de développement iOS. Pour utiliser uniquement un sous-ensemble des appareils dans le profil d'approvisionnement, j'ai dû utiliser cette technique: stackoverflow.com/a/26296138/71262
Oran Dennison

0

Cela fait un moment que je suis bloqué avec cela, mais en utilisant Crashlytics , cela a résolu le problème, la construction distribuée en utilisant le profil sélectionné dans les paramètres de construction de votre projet Xcode.

j'espère que cela aide quelqu'un.


0

Presque le même problème. Après avoir créé une archive pour la distribution (Produit> Archive), vous exportez l'archive (cliquez sur Exporter ...) et choisissez "Enregistrer pour le déploiement en entreprise"; Ensuite". Vous sélectionnez ensuite la valeur par défaut "Équipe de développement" (par exemple le nom de l'organisation) et cliquez sur "Choisir". Enfin, une vue récapitulative vous sera présentée qui répertorie également le profil d'approvisionnement que Xcode a trouvé automatiquement (peut-être créé à la volée) pour vous. Cela PEUT être le mauvais profil d'approvisionnement (généralement un profil d'approvisionnement générique, comme "XC: *") et PEUT se produire car il existe déjà un profil d'approvisionnement générique sur le portail des développeurs.

J'ai utilisé un ticket d'assistance pour cela et je n'ai récupéré ce lien que https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/ConfiguringPushNotifications/ConfiguringPushNotifications.html#//apple_ref/doc/uid/TP40012582 -CH32-SW1 . Pas vraiment d'une grande aide.

J'ai constaté que la solution de MrPatol fonctionne également pour le déploiement en entreprise et résout le problème pour nous. Je me suis d'abord connecté au portail des développeurs et j'ai créé manuellement un profil d'approvisionnement adapté à mon application. Ensuite, téléchargé et installé le nouveau profil d'approvisionnement créé manuellement.


0

Dans xcode 7, je ne pouvais pas choisir le provisionnement ad hoc via

Organisateur -> Télécharger sur l'App Store et l'Organisateur -> Valider

Mais je pourrais choisir via Organisateur -> Exporter

Édité:

Le téléchargement de l'application après l'exportation pour adhoc vers l'App Store pour testFlight a causé un autre problème abordé ici . Ainsi, la solution à ces deux problèmes est une. Créez le provisionnement AppStore pour pouvoir le sélectionner via l'organisateur et utiliser testFlight en le téléchargeant sur l'Appstore.


0
  1. Je pense que c'est une bonne façon de spécifier une option -exportOptionsPlist après Xcode 7. Il choisira les bons fichiers de provision comme dans l'exportation GUI, peu importe ce que vous spécifiez dans les paramètres du projet.

xcodebuild -exportArchive -archivePath $ Archive_Path -exportPath $ LOCAL_PACKAGE_DIR -exportOptionsPlist $ Export_Plist_Path

Le fichier optionPlist est comme ça,

<dict>
  <key>teamID</key>
        <string>MYTEAMID123</string>
        <key> teamID </key>
        <string>app-store</string>
        <key>uploadSymbols</key>
        <true/>
</dict>


<plist>

app-store, entreprise, ad-hoc, le développement est une alternative

  1. Mais vous pouvez rencontrer une autre erreur après ci-dessus.

Domaine d'erreur = IDEDistributionErrorDomain Code = 14 "Aucun périphérique applicable trouvé." UserInfo = {NSLocalizedDescription = Aucun appareil applicable trouvé.}

C'est un problème rubis. Essayez ce script shell,xcbuild-safe.sh

xcbuild-safe.sh xxxxNormalOptionsInXcodebuild bla...
  1. Attendez un moment, une autre erreur étrange survient.

xcbuild-safe.sh: ligne 62: shell_session_update: commande introuvable

C'est quoi ce bordel shell_session_update? Contournons-le. Définissez simplement une fonction avant la vraie cmd xcodebuild, à savoir à la ligne 60 ou 61.

function shell_session_update() { :; }

-4

En réponse à votre question spécifique, non, il n'y a aucun moyen de sélectionner le profil d'approvisionnement à utiliser. Qu'essayez-vous de faire? (c'est-à-dire que permet le profil que vous souhaitez sélectionner que celui généré automatiquement?)


1
Par exemple, avoir une liste spécifique des UDID disponibles pour cette application. Je développe des applications pour plusieurs clients et je ne peux pas les confondre. Il existe des moyens de contourner ce problème, bien sûr, mais ils sont tous beaucoup plus compliqués que de simplement sélectionner le profil de provisionnement que je souhaite utiliser
Lope

Il existe certainement un moyen de sélectionner le profil d'approvisionnement à utiliser. stackoverflow.com/a/26296138/71262
Oran Dennison

1
@Lope Si un client a installé l'une de vos applications et le profil associé, il peut installer n'importe laquelle de vos applications (même si les profils des autres applications ne contiennent pas leur appareil). Cette confusion est l'une des principales raisons pour lesquelles nous voulons éloigner les développeurs de la spécification manuelle de leurs profils et listes d'appareils. (c'est-à-dire que beaucoup de gens semblent se fier à un faux sentiment de sécurité comme raison principale pour vouloir spécifier manuellement des profils)
clarkcox3

@ clarkcox3 et bien c'est encore pire, je veux empêcher le client de se voir les applications
Lope

@Lope: Je ne connais pas un moyen de distribuer des fichiers ipa ad hoc qui rendraient toutes vos applications disponibles à vos testeurs. En d'autres termes, vous devez fournir explicitement à vos testeurs l'application que vous souhaitez qu'ils testent, non? Cette séparation physique les empêcherait d'utiliser d'autres applications. (Ce n'est pas comme s'ils pouvaient aller sur le magasin et les obtenir tous, oui?) Existe-t-il un autre moyen permettant à vos testeurs d'accéder à toutes vos applications sans votre permission ???
leanne
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.