2015-07-17 1 views
5

Наша команда используется, чтобы быть как этотКак использовать xcodebuild в Xcode 7 с расширением часов

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

Сейчас в Xcode 7, мы получаем эту ошибку:

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 

Как мы указываем на использовать iOS 9.0 SDK и watchos 2.0 SDK?

ответ

20

Если вам нужен симулятор сборки запустить это:

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

И если вам нужно построить устройство запуска этого:

xcodebuild -workspace WorkspaceName.xcworkspace -scheme SchemeWithWatchOS2Target build 

Хитрость заключается в том, что для любой сборки необходимо удалить -sdk вариант , Для сборки симулятора вам необходимо указать -destination, который должен быть iPhone 6 или iPhone 6 Plus. А для устройств строит вы пропускаете -destination.

+8

Удаление аргумента -sdk делает трюк для меня. Отличный намек. +1 – DEAD10CC

+0

в этом случае у меня все еще возникает проблема, если я хочу запускать тесты, в частности получаю: Не удалось запустить тестовый комплект: тестирование с помощью SDK «iphoneos» еще не поддерживается. Вместо этого протестируйте с помощью SDK симулятора, установив «-sdk iphonesimulator». –

+0

@dev_mush, вам нужно предоставить '-destination' для запуска тестов. – Nekto

0

Существует несколько причин, по которым вы видите эту ошибку, но это сводится к зависимостям. Если вы выберете схему, которая создает цель iOS, то у вас нет проблемы, используя следующую команду. Обратите внимание, что я использовал iphoneos для автоматического выбора последнего SDK.

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

Проблема, с которой вы столкнулись, вызвана из-за зависимости от расширения watchOS. Я создал образец проекта и добавил приложение watchOS. На вкладке фазы сборки вы видите в разделе Зависимости, что цель iOS имеет зависимость от цели WatchOS.

enter image description here

Это не проблема, если вы укажете в вашей команде построить destination. Но это создает проблему, если вы скажете xcodebuild для создания с определенным SDK. Зачем? Поскольку цель WatchOS не может быть построена с помощью SDK iOS. Если вы укажете iphoneos в качестве SDK, сборка завершится неудачно.

Задание адресата решает проблему, но знайте, что вы используете конкретный симулятор. Если вы используете ту же команду на другом компьютере и этот симулятор недоступен, сборка завершится неудачно.

Если честно, я не знаю, есть ли средняя дорога, которая позволяет вам выбрать последний SDK и по-прежнему использовать правильный SDK для каждой цели независимо от зависимостей. Если вы удалите зависимость цели iOS, то приведенная выше команда сборки не должна прерываться. Вам также может потребоваться обновить используемую вами схему.

Смежные вопросы