Vous êtes certainement sur la bonne voie en ce qui concerne le fichier .xcscheme - j'ai eu ce problème en mettant en place mes propres projets !
Pour la postérité, ou au moins pour toute personne arrivant ici après une recherche, voici deux versions des choses - la version "Je suis occupé, donc juste les faits s'il vous plaît" et une discussion plus impliquée et un raisonnement. Ces deux versions supposent que vous essayez de construire à partir d'un fichier Workspace ; si ce n'est pas le cas, je vous présente mes excuses car ceci s'applique principalement aux projets basés sur Workspace.
Version condensée du "bricolage".
La cause fondamentale 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 construction lancée en ligne de commande, l'interface utilisateur de Xcode n'est jamais exécutée et l'outil xcoderun ne dispose pas de son propre cache de schémas avec lequel travailler. Le but est de générer, partager et commiter le schéma que vous voulez que Bamboo exécute :
- Sur une copie de travail propre du code, ouvrez l'espace de travail de votre projet.
- Choisissez Schéma > Gérer les schémas... dans le menu Produit.
- La liste des schémas définis pour le projet apparaît.
- Localisez le schéma que Bamboo essaie d'exécuter.
- Assurez-vous que la case "Shared" est cochée pour ce schéma et que le paramètre "Container" est défini sur l'espace de travail et non sur le fichier de projet lui-même.
- Cliquez sur "OK" pour fermer la feuille de gestion des schémas.
- Un nouveau fichier .xcscheme a été créé dans votre projet à WorkspaceName.xcworkspace/xcshareddata/xcschemes.
- Déposez ce fichier dans votre dépôt et lancez une construction Bamboo.
Discussion approfondie et justification
Xcode 4 a introduit les espaces de travail et les schémas comme un moyen d'essayer d'apprivoiser une partie du chaos inhérent à la mécanique du câblage des projets Xcode, des cibles de construction et des configurations de construction ensemble. L'espace de travail lui-même possède son propre ensemble de données de configuration qui décrit chacune des petites "boîtes" de données qu'il contient et agit comme un squelette pour attacher les fichiers .xcodeproj et un ensemble de données de configuration partagées qui sont reflétées sur chaque machine de développement ou système CI. C'est à la fois la puissance et l'inconvénient des espaces de travail : il existe 1) de nombreuses façons de configurer des éléments de manière 100% correcte, mais de les placer dans le mauvais conteneur ou 2) de les placer dans le bon conteneur, mais de les configurer de manière incorrecte, rendant ainsi les données inaccessibles à d'autres parties du système !
Le comportement par défaut des schémas de Xcode 4 est de générer automatiquement de nouveaux schémas lorsque des 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 désordonnée, en particulier lorsque des fichiers de projet sont ajoutés, puis supprimés, et ensuite réinsérés dans le même espace de travail. Tous les schémas, qu'ils soient générés automatiquement ou créés manuellement, deviennent par défaut des schémas "privés" visibles uniquement par l'utilisateur actuel, même si les fichiers .xcuserdata sont livrés avec les données et la configuration du projet. C'est la cause principale de l'erreur de construction énigmatique que Bamboo rapporte à partir de xcodebuild -- Parce que Bamboo opère la construction par la ligne de commande et non par l'interface utilisateur de Xcode, il n'a pas la possibilité de générer automatiquement des schémas et se fie uniquement à ceux qui sont définis dans l'espace de travail lui-même. En supposant que vous avez configuré Bamboo pour construire à partir d'un espace de travail en utilisant une commande comme celle-ci :
xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug
xcodebuild va chercher le fichier <valeur du paramètre 'schéma'>.xcscheme existant dans <valeur du paramètre 'espace de travail'>/xcshareddata/xcschemes.
Il est évident qu'il existe de nombreuses façons de configurer Bamboo et un espace de travail. Gardez donc à l'esprit que votre configuration unique peut ne pas correspondre à 100% à ce qui est présenté ici. Les points essentiels à retenir :
- Certaines tâches automatisées que l'interface utilisateur de Xcode prend magiquement en charge ne sont pas disponibles via la CLI de Xcodebuild.
- Vous pouvez attacher des données de configuration de schéma et de construction à de nombreux endroits dans la "hiérarchie des conteneurs" -- Assurez-vous que vos données se retrouvent dans le bon conteneur (espace de travail, projet et/ou cible de construction).
- Considérez où dans la hiérarchie du conteneur l'outil xcodebuild peut chercher les données de configuration ; un bon indicateur de l'endroit où il commencera à chercher est basé sur l'utilisation des arguments '-workspace' ou '-project'.
La case "Partagé" est déjà cochée... et maintenant ?
J'ai rencontré ce même problème sur ma propre instance de Bamboo ; il s'est avéré que le schéma qui avait été validé dans mon dépôt était obsolète et que la dernière version des outils de ligne de commande ne le gérait pas de manière satisfaisante. Puisque ce problème existait déjà, j'ai jeté un coup d'œil aux paramètres pour m'assurer qu'il n'y avait rien de trop personnalisé dans le schéma, j'ai supprimé et recréé le schéma en m'assurant de le marquer comme "partagé", et j'ai réenregistré le nouveau fichier .xcscheme dans le référentiel.
Si tout semble correct et que la reconstruction ne résout pas le problème, vérifiez à nouveau le paramètre du conteneur. Il est très facile de rattacher ce schéma au mauvais conteneur dans la hiérarchie !
0 votes
Je viens de remarquer que lorsque j'ouvre le projet dans xcode, il crée un fichier .xcscheme, mais dans le dossier xcuserdata/username.xcuserdatad... mais je ne comprends pas pourquoi le schéma est "généré" sous le dossier des utilisateurs... et comment je vais gérer cela dans bamboo...