Как использовать 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?


person Jason Hocker    schedule 17.07.2015    source источник


Ответы (2)


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

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.

person Nekto    schedule 11.08.2015
comment
Удаление аргумента -sdk помогает и мне. Отличный намек. +1 - person DEAD10CC; 25.08.2015
comment
Таким образом, у меня все еще есть проблема, если я хочу запустить тесты, в частности, я получаю: Возникла проблема с запуском тестового пакета: Тестирование с помощью SDK «iphoneos» еще не поддерживается. Вместо этого протестируйте SDK симулятора, установив параметр «-sdk iphonesimulator». - person dev_mush; 23.09.2015
comment
@dev_mush, вам нужно предоставить -destination для запуска тестов. - person Nekto; 24.09.2015
comment
@dev_mush На момент написания (Xcode 7) запуск модульных тестов на физическом устройстве не поддерживается. Это означает, что вы не можете использовать iphoneos вместо sdk. Это то, что ошибка говорит вам. - person Bart Jacobs; 11.12.2015

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

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

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

введите здесь описание изображения

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

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

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

person Bart Jacobs    schedule 11.12.2015