J'ai un problème de curiosité.
J'ai un projet sur lequel j'ai travaillé et toujours construit à partir de l'IDE XCode, et cela a bien fonctionné. Maintenant, je configure Bamboo pour construire le projet et en tant que tel, je le construis à partir de la ligne de commande.
Le problème est que si je vérifie mon code hors de GIT puis que j'utilise xcodebuild pour le construire, cela indique que le schéma ne peut pas être trouvé, mais si j'ouvre le projet, il se construit et si j'essaye de le construire à nouveau à partir de la ligne de commande avec la même commande, ça marche.
Quelle magie fait XCode lorsque j'ouvre le projet ou est-ce que je fais quelque chose de stupide, peut-être en excluant un fichier dans mon .gitignore que je ne devrais pas?
la source
Réponses:
Vous êtes définitivement sur la bonne voie en ce qui concerne le fichier .xcscheme - j'ai eu ce problème lors de la configuration de mes propres projets!
Pour la postérité, ou du moins pour quiconque vient ici d'une recherche, voici deux versions des choses - la version «Je suis occupé, donc juste les faits s'il vous plaît» et une discussion et une justification plus complexes. Ces deux versions supposent que vous essayez de créer à partir d'un fichier Workspace; si ce n'est pas le cas, je m'excuse car cela s'applique principalement aux projets basés sur l'espace de travail.
Version condensée 'Fix-it'
La cause première est que le comportement par défaut des schémas est de garder les schémas «privés» jusqu'à ce qu'ils soient spécifiquement marqués comme partagés. Dans le cas d'une génération initiée par la ligne de commande, l'interface utilisateur Xcode ne s'exécute jamais et l'outil xcoderun n'a pas son propre cache de schémas avec lequel travailler. L'objectif est de générer, partager et valider le schéma que vous souhaitez que Bamboo exécute:
Discussion et justification plus approfondies
Xcode 4 a présenté les espaces de travail et les schémas comme un moyen d'aider à essayer d'apprivoiser une partie du chaos inhérent à la gestion des mécanismes de câblage des projets Xcode liés, de créer des cibles et de construire des configurations ensemble. L'espace de travail lui-même a son propre ensemble de données de configuration qui décrit chacune des plus petites `` boîtes '' de données qu'il contient et agit comme un squelette pour attacher des fichiers .xcodeproj et un ensemble de données de configuration partagées qui sont reflétées sur chaque machine de développeur ou système CI . C'est à la fois la puissance et le piège des espaces de travail - il y a 1) de nombreuses façons dont on peut configurer les choses correctement à 100%, mais les mettre dans le mauvais conteneur ou 2) les placer dans le bon conteneur, mais mal configuré, ce qui rend les données inaccessible par d'autres parties du système!
Le comportement par défaut des schémas Xcode 4 est de générer automatiquement de nouveaux schémas à mesure que les projets sont ajoutés au fichier Workspace. Ceux d'entre vous qui ont ajouté plusieurs fichiers .xcodeproj ont peut-être remarqué que votre liste de schémas devient rapidement indisciplinée, d'autant plus que les fichiers de projet sont ajoutés, puis supprimés, puis lus dans le même espace de travail. Tous les schémas, générés automatiquement ou créés manuellement, sont par défaut des schémas «privés» visibles uniquement par l'utilisateur actuel, même lorsque les fichiers .xcuserdata sont validés avec les données et la configuration du projet. C'est la cause première de cette erreur de construction cryptique. Bamboo rapporte de xcodebuild - Étant donné que Bamboo exploite la construction via la ligne de commande et non l'interface utilisateur Xcode, il n'a pas la possibilité pour les schémas d'être générés automatiquement et ne repose que sur ceux qui sont définis dans l'espace de travail lui-même.
xcodebuild recherche le fichier <Valeur du paramètre 'schéma'> .xcscheme existant dans <Valeur du paramètre 'espace de travail'> / xcshareddata / xcschemes.
De toute évidence, il existe de nombreuses façons de configurer à la fois Bamboo et un espace de travail, alors gardez à l'esprit que votre configuration unique peut ne pas correspondre à 100% à ce qui est présenté ici. Les principaux points à retenir:
La case «Partagé» est déjà cochée ... et maintenant?
J'ai rencontré ce même problème sur ma propre instance Bamboo; il s'est avéré que le schéma qui était engagé dans mon référentiel était obsolète et que la dernière version des outils de ligne de commande ne le gérait pas correctement. Comme cela existait auparavant, j'ai jeté un coup d'œil dans les paramètres pour m'assurer qu'il n'y avait rien de vraiment personnalisé dans le schéma, j'ai supprimé et recréé le schéma en veillant à le marquer comme `` partagé '', et en réengageant le nouveau fichier .xcscheme au dépôt.
Si tout semble bon et que la reconstruction ne résout pas le problème, vérifiez à nouveau ce paramètre de conteneur - il est vraiment facile d'attacher ce schéma au mauvais conteneur dans la hiérarchie!
la source
Déboguez le problème comme ceci:
ou si vous utilisez un espace de travail (par exemple avec des pods)
Si votre schéma n'est pas répertorié, procédez comme suit:
la source
xcodebuild -list
... merci!La plupart des réponses vous suggèrent de partager votre schéma à l'aide de Xcode, puis de valider les modifications dans le dépôt. Cela fonctionne, bien sûr, mais uniquement si vous avez accès au code source et avez le droit de valider les modifications, et quelques autres hypothèses.
Mais il y a un certain nombre de «et si » à considérer
Cela arrive en fait assez souvent. Si vous utilisez un framework d'automatisation de test, comme Calabash, vous finirez normalement par dupliquer une cible existante, qui duplique également automatiquement un schéma, et le nouveau schéma n'est pas partagé, même si le schéma d'origine l'était.
Gemme Ruby & Xcodeproj
Je recommanderais d'utiliser xcodeproj Ruby gem. C'est un outil open source vraiment cool qui peut vous aider à automatiser des tonnes de tâches liées à Xcode.
Btw, c'est le joyau utilisé par CocoaPods pour jouer avec vos projets et espaces de travail Xcode.
Alors installez-le
Ensuite, écrivez un simple script Ruby pour re-partager tous les schémas, le gem a la méthode receate_user_schemes à cet effet
Il ne copie pas seulement les fichiers de schéma du dossier de l'utilisateur dans xcshareddata / xcschemes , il crée également ces fichiers d'abord en analysant le fichier pbxproj .
la source
recreate_user_schemes
cela ne gère pas correctement les cibles de test. J'ai déposé un rapport de bogue à ce sujet .xcodebuild -project Finance.xcodeproj -scheme "Finance" -configuration Release clean archive CODE_SIGN_IDENTITY="My Identity"
j'ai demandé à Scheme <IDEScheme: 0x7fc9ea5e5fd0: 'Finance'> de construire et d'archiver, mais la destination d'exécution <IDERunDestination: 0x7fc9eb47c6c0: 'iPad 2'> n'est pas une plate-forme de déploiement et cette action ne devrait pas avoir été autorisé ». Mais quand j'ouvre XCode, tout fonctionne bienarchive
l'action implique toujours la signature et la destination doit être définie sur un appareil réel. Dans votre cas, la destination estiPad 2
, ce que je pense être un simulateur, donc aucun archivage n'est possible. Il manque une option importante dans votre commande, c'est-sdk iphoneos
Essayez d'abord et voyez comment cela se passe. Lorsque vous l'exécutez à partir de Xcode IDE, vous avez probablement défini la destinationiOS Device
ou peut-être avez-vous un périphérique réel branché pour qu'il soit défini comme destination. C'est pourquoi l'archivage fonctionne à partir de l'IDE. La ligne de commande est plus «stupide» et peut parfois utiliser des options «incorrectes» par défaut, vous devez donc être plus précis.Ok, je sais que c'est 2 minutes plus tard, mais j'ai trouvé un autre débordement de pile qui dit que le schéma doit être défini sur partagé ... Où Xcode 4 stocke-t-il les données du schéma?
la source
Une raison courante pour laquelle le schéma manque est d'oublier de pousser les commits à l'origine. Si vous obtenez un message de schéma manquant, vous devez d'abord vérifier que le schéma est partagé, puis vérifiez que vous avez validé les modifications ET les avez transmises au serveur d'origine.
la source
J'ai eu cette erreur lors de l'implémentation de CI.La question ci-dessus est identique à mes problèmes sauf que j'utilise le propre outil CI de Gitlab.Vous pouvez vérifier s'il existe un tel fichier dans Bamboo.
Je l'ai résolu en apportant quelques modifications au
gitlab-ci.yml
fichier.Après avoir fait votre
scheme
disponibilité en partageant. Dans Xcode, accédez àProducts>Scheme>Manage Scheme
et cochez partager pour partager.Changements
la source
J'ai eu le même problème mais lors de la construction avec xcode comme sous-projet du principal. Sous-projet construit en autonome xcode - après cela, cette erreur a disparu.
la source
J'ai été confronté à ce problème et même si certaines des réponses ici fournissent réellement la solution, je ne l'ai pas trouvée très claire. Je vais donc en ajouter un de plus. En un mot, comment partager un schéma depuis excode.
Accédez à
Product
>Scheme
>Manage Schemes
Vous verrez alors une liste de schémas, chacun étant indiqué comme étant partagé ou non. Cochez simplement ceux que vous souhaitez partager (ils peuvent être différents pour les versions de développement et de production)
Images tirées de cet article https://developer.nevercode.io/docs/sharing-ios-project-schemes
la source
Je souhaite ajouter une solution pour mon cas lié à ce fil. Celui-ci est pour vous qui clonez un projet existant, avec tous les schémas dont vous avez besoin sont déjà partagés:
, avec
fastlane lanes
afficher correctement toutes vos voies y compris tous vos schémas:, mais
fastlane gym
affiche uniquement les schémas principaux (pas les schémas de développement et de test):La solution consiste à décocher l'option partagée pour les schémas non répertoriés par
fastlane gym
, puis à la cocher à nouveau . Il générera .xcscheme pour les schémas:Maintenant, si vous vérifiez avec
fastlane gym
, tous les schémas seront listés:Ensuite, vous devez valider ces fichiers .xcshemes dans le référentiel, afin que les autres développeurs qui clonent le projet obtiennent les fichiers.
la source
Pour toute personne avec Xcode 11.4 essayant de trouver le bouton "Partagé" sur le schéma, il est maintenant déplacé dans le schéma individuel.
la source