In Bezug auf die .xcscheme-Datei sind Sie definitiv auf dem richtigen Weg - dieses Problem trat beim Einrichten meiner eigenen Projekte auf!
Für die Nachwelt oder zumindest für jeden, der von einer Suche hierher kommt, gibt es zwei Versionen von Dingen - die Version "Ich bin beschäftigt, also bitte nur die Fakten" und eine ausführlichere Diskussion und Begründung. In beiden Versionen wird davon ausgegangen, dass Sie versuchen, aus einer Workspace-Datei zu erstellen. Wenn Sie dies nicht tun, entschuldige ich mich, da dies hauptsächlich für arbeitsplatzbasierte Projekte gilt.
Verkürzte 'Fix-it'-Version
Die Hauptursache ist, dass das Standardverhalten von Schemata darin besteht, Schemata "privat" zu halten, bis sie speziell als gemeinsam gekennzeichnet markiert sind. Bei einem von der Befehlszeile initiierten Build wird die Xcode-Benutzeroberfläche nie ausgeführt und das xcoderun-Tool verfügt nicht über einen eigenen Schema-Cache, mit dem gearbeitet werden kann. Das Ziel besteht darin, das Schema zu generieren, zu teilen und festzuschreiben, das Bamboo ausführen soll:
- Öffnen Sie auf einer sauberen Arbeitskopie des Codes den Arbeitsbereich Ihres Projekts.
- Wählen Sie im Produktmenü "Schema"> "Schemata verwalten".
- Die Liste der für das Projekt definierten Schemata wird angezeigt.
- Suchen Sie das Schema, das Bamboo ausführen möchte
- Stellen Sie sicher, dass das Kontrollkästchen "Freigegeben" für dieses Schema aktiviert ist und dass die Einstellung "Container" auf den Arbeitsbereich und nicht auf die Projektdatei selbst festgelegt ist.
- Klicken Sie auf "OK", um das Blatt "Schemata verwalten" zu schließen.
- Eine neue .xcscheme-Datei wurde in Ihrem Projekt unter WorkspaceName.xcworkspace / xcshareddata / xcschemes erstellt.
- Übernehmen Sie diese Datei in Ihr Repository und führen Sie einen Bamboo-Build aus.
Tiefere Diskussion und Begründung
Xcode 4 führte Arbeitsbereiche und Schemata ein, um das Chaos zu zähmen, das mit der Mechanik der Verkabelung von Xcode-Projekten, dem Erstellen von Zielen und dem gemeinsamen Erstellen von Konfigurationen verbunden ist. Der Arbeitsbereich selbst verfügt über einen eigenen Satz von Konfigurationsdaten, der jedes der darin enthaltenen kleineren Datenfelder beschreibt und als Grundgerüst für das Anhängen von .xcodeproj-Dateien und einen Satz gemeinsam genutzter Konfigurationsdaten dient, die auf jeden Entwicklercomputer oder jedes CI-System gespiegelt werden . Dies ist sowohl die Leistung als auch die Gefahr von Arbeitsbereichen - es gibt 1) viele Möglichkeiten, wie Dinge zu 100% korrekt konfiguriert, aber in den falschen Container gestellt oder 2) in den richtigen Container gestellt, aber nicht richtig konfiguriert werden können, wodurch Daten gerendert werden für andere Teile des Systems nicht zugänglich!
Das Standardverhalten von Xcode 4-Schemata besteht darin, automatisch neue Schemata zu generieren, wenn Projekte zur Workspace-Datei hinzugefügt werden. Diejenigen unter Ihnen, die mehrere .xcodeproj-Dateien hinzugefügt haben, haben möglicherweise bemerkt, dass Ihre Schemaliste schnell unruhig wird, insbesondere wenn Projektdateien hinzugefügt, dann entfernt und dann in denselben Arbeitsbereich eingelesen werden. Alle automatisch generierten oder manuell erstellten Schemata sind standardmäßig "private" Schemata, die nur für den aktuellen Benutzer sichtbar sind, selbst wenn .xcuserdata-Dateien mit den Daten und der Konfiguration des Projekts festgeschrieben werden. Dies ist die Hauptursache für diesen kryptischen Build-Fehler, den Bamboo von xcodebuild meldet. Da Bamboo den Build über die Befehlszeile und nicht über die Xcode-Benutzeroberfläche ausführt, haben Schemes keine Möglichkeit, automatisch generiert zu werden, und verlassen sich nur auf diese werden im Arbeitsbereich selbst definiert.
xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug
xcodebuild sucht nach der Datei <'Schema' Parameterwert> .xcscheme, die unter <'Arbeitsbereich' Parameterwert> / xcshareddata / xcschemes vorhanden ist.
Offensichtlich gibt es eine Reihe von Möglichkeiten, wie Sie sowohl Bamboo als auch einen Arbeitsbereich konfigurieren können. Denken Sie also daran, dass Ihre eindeutige Konfiguration möglicherweise nicht zu 100% dem entspricht, was hier dargestellt wird. Die wichtigsten Imbissbuden:
- Bestimmte automatisierte Aufgaben, die die Xcode-Benutzeroberfläche auf magische Weise erledigt, sind über die Xcodebuild-CLI nicht verfügbar.
- Sie können Schema- und Build-Konfigurationsdaten an viele Stellen in der 'Containerhierarchie' anhängen. - Stellen Sie sicher, dass Ihre Daten im richtigen Container (Arbeitsbereich, Projekt und / oder Build-Ziel) gespeichert werden.
- Überlegen Sie, wo in der Containerhierarchie das xcodebuild-Tool möglicherweise nach Konfigurationsdaten sucht. Ein guter Indikator dafür, wo es zu suchen beginnt, basiert auf der Verwendung der Argumente '-workspace' oder '-project'.
Das Kontrollkästchen "Geteilt" ist bereits aktiviert ... was nun?
Ich bin auf dasselbe Problem bei meiner eigenen Bamboo-Instanz gestoßen. Es stellte sich heraus, dass das in meinem Repository festgeschriebene Schema veraltet war und die neueste Version der Befehlszeilentools es nicht ordnungsgemäß handhabte. Da dies zuvor vorhanden war, habe ich die Einstellungen durchgesehen, um sicherzustellen, dass das Schema nicht besonders benutzerdefiniert ist. Ich habe das Schema gelöscht und neu erstellt, um sicherzustellen, dass ich es als "Freigegeben" markiert habe, und die neue .xcscheme-Datei erneut in das Schema übernommen Repository.
Wenn alles gut aussieht und die Neuerstellung das Problem nicht löst, überprüfen Sie die Containereinstellung noch einmal - es ist wirklich einfach, dieses Schema an den falschen Container in der Hierarchie anzuhängen!