Sei decisamente sulla strada giusta rispetto al file .xcscheme: ho riscontrato questo problema durante l'impostazione dei miei progetti!
Per i posteri, o almeno per chiunque sia arrivato qui da una ricerca, ecco due versioni delle cose: la versione "Sono impegnato, quindi solo i fatti per favore" e una discussione più complessa e motivata. Entrambe queste versioni presumono che tu stia tentando di creare da un file Workspace; se non lo sei, mi scuso in quanto applicabile principalmente ai progetti basati sull'area di lavoro.
Versione ridotta "Fix-it"
La causa principale è che il comportamento predefinito di Schemes è mantenere gli schemi "privati" finché non vengono specificatamente contrassegnati come condivisi. Nel caso di una compilazione avviata dalla riga di comando, l'interfaccia utente di Xcode non viene mai eseguita e lo strumento xcoderun non dispone della propria cache di schemi con cui lavorare. L'obiettivo è generare, condividere e eseguire il commit dello schema che desideri venga eseguito da Bamboo:
- Su una copia pulita e funzionante del codice, apri l'area di lavoro del tuo progetto.
- Scegli Schema> Gestisci schemi ... dal menu Prodotto.
- Viene visualizzato l'elenco degli schemi definiti per il progetto.
- Individua lo schema che Bamboo sta tentando di eseguire
- Assicurati che la casella "Condiviso" sia selezionata per quello schema e che l'impostazione "Contenitore" sia impostata sull'area di lavoro e non sul file di progetto stesso.
- Fare clic su "OK" per chiudere il foglio Gestisci schemi.
- Un nuovo file .xcscheme è stato creato nel tuo progetto in WorkspaceName.xcworkspace / xcshareddata / xcschemes.
- Salva questo file nel tuo repository ed esegui una build Bamboo.
Discussione più approfondita e motivazione
Xcode 4 ha introdotto Workspaces and Schemes come un modo per cercare di domare un po 'del caos inerente alla gestione dei meccanismi di cablaggio di progetti Xcode correlati, creazione di obiettivi e costruzione di configurazioni insieme. L'area di lavoro stessa ha il proprio set di dati di configurazione che descrive ciascuna delle "scatole" più piccole di dati che contiene e funge da scheletro per allegare file .xcodeproj e un set di dati di configurazione condivisi che vengono rispecchiati su ogni macchina dello sviluppatore o sistema CI . Questo è sia il potere che la trappola degli spazi di lavoro: ci sono 1) molti modi in cui si possono configurare le cose al 100% correttamente, ma metterle nel contenitore sbagliato o 2) metterle nel contenitore corretto, ma configurate in modo improprio, rendendo così i dati inaccessibile da altre parti del sistema!
Il comportamento predefinito degli schemi Xcode 4 consiste nel generare automaticamente nuovi schemi quando i progetti vengono aggiunti al file Workspace. Quelli di voi che hanno aggiunto diversi file .xcodeproj potrebbero aver notato che il proprio elenco di schemi diventa rapidamente indisciplinato soprattutto quando i file di progetto vengono aggiunti, quindi rimossi e quindi reinseriti nello stesso spazio di lavoro. Tutti gli schemi, generati automaticamente o creati manualmente, per impostazione predefinita sono schemi "privati" visibili solo all'utente corrente anche quando i file .xcuserdata vengono salvati con i dati e la configurazione del progetto. Questa è la causa principale di quell'errore di compilazione criptico che Bamboo riporta da xcodebuild - Poiché Bamboo gestisce la compilazione tramite la riga di comando e non l'interfaccia utente di Xcode, non ha l'opportunità per gli schemi di essere generati automaticamente e si basa solo su quelli che sono definiti nell'area di lavoro stessa.
xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug
xcodebuild cerca il file <'scheme' Parameter Value> .xcscheme esistente in <'workspace' Parameter Value> / xcshareddata / xcschemes.
Ovviamente ci sono molti modi in cui è possibile configurare sia Bamboo che un'area di lavoro, quindi tieni presente che la tua configurazione unica potrebbe non mappare al 100% ciò che viene presentato qui. I punti chiave:
- Alcune attività automatizzate di cui si occupa magicamente l'interfaccia utente di Xcode non sono disponibili tramite la CLI di Xcodebuild.
- Puoi allegare schemi e creare dati di configurazione in molti punti della "gerarchia del contenitore": assicurati che i tuoi dati finiscano nel contenitore corretto (area di lavoro, progetto e / o destinazione della build)
- Considera dove nella gerarchia del contenitore lo strumento xcodebuild potrebbe cercare i dati di configurazione; un ottimo indicatore di dove inizierà a cercare è basato sull'uso degli argomenti "-workspace" o "-project".
La casella "Condiviso" è già selezionata ... e adesso?
Ho riscontrato lo stesso problema sulla mia istanza Bamboo; si è scoperto che lo schema che era stato eseguito il commit nel mio repository era obsoleto e l'ultima versione degli strumenti della riga di comando non lo gestiva con garbo. Dal momento che esisteva in precedenza, ho esaminato le impostazioni per assicurarmi che non ci fosse nulla di evidentemente personalizzato sullo schema, ho eliminato e ricreato lo schema assicurandomi di averlo contrassegnato come "Condiviso" e ricominciando il nuovo file .xcscheme nel repository.
Se tutto sembra a posto e la ricostruzione non risolve il problema, ricontrolla l'impostazione del contenitore: è davvero facile collegare lo schema al contenitore sbagliato nella gerarchia!