2015-07-17 32 views
5

nostro comando usato per essere come questoCome usare xcodebuild in Xcode 7 con estensione orologio

xcodebuild -configuration Release -target "xxx" -sdk iphoneos9.0 -scheme "xxx" archive 

ora in Xcode 7, si ottiene questo errore:

Build settings from command line: 
    SDKROOT = iphoneos9.0 

=== BUILD TARGET xxx WatchKit Extension OF PROJECT Mobile WITH CONFIGURATION Release === 

Check dependencies 
target specifies product type 'com.apple.product-type.watchkit2-extension', but there's no such product type for the 'iphoneos' platform 

Come specifichiamo a utilizzare iOS 9.0 SDK e watchos 2.0 SDK?

risposta

20

Se avete bisogno di una build simulatore di eseguire questo:

xcodebuild -workspace WorkspaceName.xcworkspace -scheme SchemeWithWatchOS2Target -destination 'name=iPhone 6' build 

E se avete bisogno di un accumulo dispositivo di eseguire questo:

xcodebuild -workspace WorkspaceName.xcworkspace -scheme SchemeWithWatchOS2Target build 

Il trucco è che per qualsiasi costruire è necessario rimuovere -sdk opzione . Per la compilazione del simulatore è necessario specificare -destination che dovrebbe essere iPhone 6 o iPhone 6 Plus. E per i dispositivi creati salta lo -destination.

+8

Rimuovere l'argomento -sdk è il trucco anche per me. Ottimo suggerimento. +1 – DEAD10CC

+0

in questo modo sto ancora avendo problemi se voglio eseguire test, in particolare ricevo: Si è verificato un problema nell'avvio del pacchetto di test: il test con l'SDK di 'iphoneos' non è ancora supportato. Invece, prova con il simulatore SDK impostando '-sdk iphonesimulator'. –

+0

@dev_mush, è necessario fornire '-destination' per eseguire i test. – Nekto

0

Ci sono diversi motivi per cui si vede questo errore, ma si riduce alle dipendenze. Se selezioni uno schema che costruisce un target iOS, allora non hai problemi usando il seguente comando. Si noti che ho utilizzato iphoneos per selezionare automaticamente l'ultimo SDK.

xcodebuild -configuration Release -target "ios" -sdk iphoneos -scheme "ios" build 

Il problema che si sta verificando viene attivato a causa di una dipendenza dall'estensione watchOS. Ho creato un progetto di esempio e aggiunto un'applicazione watchOS. Nella scheda Fasi di costruzione, vedi la sezione Dipendenze che la destinazione iOS ha una dipendenza dalla destinazione WatchOS.

enter image description here

Questo non è un problema se si specifica un destination nel comando build. Ma dà un problema se dici a xcodebuild di compilare con uno specifico SDK. Perché? Perché la destinazione WatchOS non può essere costruita con l'SDK di iOS. Se si specifica iphoneos come SDK, la compilazione fallirà.

Specificare una destinazione risolve il problema, ma sappi che stai utilizzando un simulatore specifico. Se si utilizza lo stesso comando su una macchina diversa e tale simulatore non è disponibile, la compilazione fallirà.

Per essere onesti, non so se c'è una via di mezzo che consente di selezionare l'ultimo SDK e di utilizzare ancora l'SDK corretto per ciascun target, indipendentemente dalle dipendenze. Se si rimuove la dipendenza della destinazione iOS, il comando di generazione sopra riportato non dovrebbe fallire. Potrebbe anche essere necessario aggiornare lo schema che stai utilizzando.