2017-09-26 22 views
0

J'ai Xcode9 installé sur ma machine OSX. J'utilise la ligne de commande xcodebuild pour signer mon application qui utilise bien sûr les derniers outils commalines basés sur Xcode9.Comment utiliser la ligne de commande xcodebuild pour faire une signature automatique avec Xcode9?

Ce qui suit est la façon dont je suis en train de signer mon application:

xcodebuild -project "MyProject.xcodeproj" -scheme "MyProject" -sdk "iphoneos" -configuration Release PROVISIONING_PROFILE="MyProject_ProvisioningProfile" DEVELOPEMENT_TEAM="MY_TEAM_ID" 

Mais, il donne l'erreur suivante.

Code Signing Error: Provisioning profile "profile_name" is Xcode managed, but signing settings require a manually managed profile. 
Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 11.0' 

Mais quand je construis en utilisant la sélection IDE interface utilisateur Xcode9 "signature automatique", cela fonctionne. Je veux répliquer la même chose en utilisant la ligne de commande xcodebuild. J'ai lu qu'avec Xcode 9 installé, nous pouvons faire une signature automatique à partir de la ligne de commande, tout comme Xcode UI fait.

Question:
Comment dois-je modifier commande xcodebuild faire signature automatique juste la façon dont il est fait sur l'interface utilisateur outil Xcode?

Je comprends de official documentation que l'on devrait préférer la signature automatique. Mais comment faire avec xcodebuild ligne de commande

En regardant this discussion, j'ai essayé de le basculer sur le fichier project.pbxproj en utilisant sed.

sed -i '' 's/ProvisioningStyle = Manual;/ProvisioningStyle = Automatic;/' <ProjectName>.xcodeproj/project.pbxproj 

Mais cela n'a pas aidé

Répondre

1

Essayez d'ajouter export_xcargs: "-allowProvisioningUpdates", qui fonctionnera

+0

Dans votre réponse, pouvez-vous modifier la même commande 'xcodebuild' que dans la question? –

+0

alors je ne devrais plus spécifier le profil d'approvisionnement dans la commande 'xcodebuild'? –

+0

'xcodebuild -project" MonProjet.xcodeproj "-scheme" MonProjet "-sdk" iphoneos "-configuration Libérer PROVISIONING_PROFILE =" MonProjet_ProvisioningProfile "DEVELOPEMENT_TEAM =" MY_TEAM_ID "export_xcargs:" -allowProvisioningUpdates "' comme ça? –

1

Sur mon projet, je l'utilise gradle-xcodePlugin utilitaire. Ce n'est pas typique pour le développement iOS d'utiliser Gradle :), mais c'est un instrument plutôt bon. C'est un wrapper sous l'outil xcodebuild. Il est très facile à configurer, la configuration est dans le fichier build.gradle. C'est assez de documentation sur GitHub pour l'installer. Il construit, exporte, fournit automatiquement aux tests bêta de TestFlight et plus encore. Je l'utilise depuis un an.

Vous oublierez la syntaxe de xcodebuild -project ... pour toujours. Gardez ce plugin à jour.

Je lance la construction en exécutant $ ./gradlew xcodebuild

Peut-être que cette outil vous aide à éviter de passer du temps pour résoudre les problèmes avec chaque mise à jour de Xcode, comme il l'a fait pour moi;)

1

Sur la base de l'erreur, il semble que vous havre de paix n'a pas activé la signature automatique dans les paramètres de votre projet. Il n'existe aucun moyen d'effectuer une génération unique signée automatiquement à partir de la ligne de commande lorsque votre projet est configuré pour la signature manuelle. Avec votre projet ouvert en XCode, sélectionnez votre projet racine dans le navigateur de projet sur la gauche. Cliquez sur la cible que vous souhaitez configurer. Cliquez sur l'onglet Général. Dans la section Signing, cochez la case "Gérer automatiquement la signature". Vous devez également choisir une équipe de développement. Si vous avez plusieurs cibles, vous devrez peut-être répéter ces étapes pour chacune d'entre elles.Une fois que vous avez fait cela, XCode crée, gère et utilise automatiquement les profils de provisioning d'équipe. -allowProvisioningUpdates indique à xcodebuild de faire la même gestion de l'approvisionnement que l'EDI XCode fait implicitement. Notez que ces profils ne sont pas visibles dans le portail de développement.

Vous rencontrerez une nouvelle erreur d'approvisionnement parce que vous spécifiez un profil d'approvisionnement. La signature automatique signifie que XCode doit tout comprendre. Il se plaint si vous essayez de lui dire autre chose que votre équipe de développement. Dans votre cas, vous indiquez xcodebuild quel profil d'approvisionnement utiliser. Mais XCode insiste sur l'utilisation du profil de provisionnement d'équipe (s) il gère et jeter ses mains dans le dégoût se dit autrement:

Code Signing Error: MyProject has conflicting provisioning settings. MyProject is automatically signed, but provisioning profile MyProject_ProvisioningProfile has been manually specified. Set the provisioning profile value to "Automatic" in the build settings editor, or switch to manual signing in the project editor. 

La commande xcodebuild que nous utilisons pour la construction avec l'approvisionnement automatique ressemble à ceci:

xcodebuild -configuration Release PLATFORM_NAME=iphoneos SDKROOT=iphoneos11.2 -project myproject.xcodeproj -allowProvisioningUpdates build 

sur la base qui donnent cette version de votre commande un essai après avoir activé la signature automatique dans les paramètres du projet:

xcodebuild -project "MyProject.xcodeproj" -scheme "MyProject" -sdk "iphoneos" -configuration Release DEVELOPEMENT_TEAM="MY_TEAM_ID" 

One Une autre chose à savoir est que xcodebuild ne mettra pas à jour les profils d'approvisionnement gérés, sauf s'il ne peut pas les trouver localement. Sur nos serveurs CI, nous avons une étape de pré-construction qui les supprime pour forcer l'actualisation. XCode stocke ses profils d'approvisionnement gérés sous ~/Library/MobileDevice/Provisioning\ Profiles.