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:
- 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 «Partagé» est cochée pour ce schéma et que le paramètre «Conteneur» 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 Gérer les schémas.
- Un nouveau fichier .xcscheme a été créé dans votre projet sous WorkspaceName.xcworkspace / xcshareddata / xcschemes.
- Validez ce fichier dans votre référentiel et exécutez une version Bamboo.
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 -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug
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:
- Certaines tâches automatisées prises en charge par l'interface utilisateur Xcode par magie ne sont pas disponibles via l'interface de ligne de commande Xcodebuild.
- Vous pouvez attacher un schéma et créer des données de configuration à de nombreux endroits dans la `` hiérarchie de 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 des conteneurs l'outil xcodebuild peut rechercher des données de configuration; un excellent 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 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!