Невозможно выполнить тесты из командной строки через xcodebuild

Я пытаюсь создать и запустить тестовые примеры, используя командную строку для тестовых случаев iOS. Я дал следующую команду:

xcodebuild -target AppEngineTests -configuration Debug -sdk iphonesimulator TEST_AFTER_BUILD=YES clean build

Он создает приложение, но тестовые примеры не запускаются.

может кто-нибудь помочь? Спасибо


person Sunny    schedule 27.11.2013    source источник
comment
Какие сообщения об ошибках вы получили?   -  person ULazdins    schedule 13.01.2014


Ответы (5)


Я обнаружил, что свойство name требует дополнительной спецификации.

xcodebuild test -workspace #{WORKSPACE_FILE} -scheme #{TEST_SCHEME} -destination 'platform=iOS Simulator,name=iPhone Retina (4-inch),OS=7.0'

Это то, что, наконец, сработало для меня. iPhone был ограниченным и/или непредсказуемым.

Как упоминал другой плакат (не могу найти цитату), «платформа» примерно соответствует разделителю в целевом списке, «имя» соответствует подвыбору, а параметр OS соответствует правой стороне шеврона в тот же список за вычетом «iOS».

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

Удивительно, какие это были хлопоты. И насколько хорошо это сработало после того, как был достигнут правильный вызов.

person tooluser    schedule 11.03.2014
comment
Спасибо за редактирование, Гийом, но у меня было несколько строк, потому что для прочтения требуется прокрутка! - person tooluser; 20.05.2014
comment
как сделать сборку для реального устройства - person Qadir Hussain; 04.05.2016
comment
Это одно из значений, доступных для параметра «назначение», @QadirHussain. - person tooluser; 06.05.2016
comment
На всякий случай, если кто-то просматривает это, в наши дни гораздо проще управлять тестами с помощью полосы быстрого доступа и тестовых действий scan или multi_scan. - person Lyndsey Ferguson; 06.06.2018

Вы не сказали, какую версию Xcode вы используете, но, поскольку вы отметили свой вопрос «xctest», кажется безопасным предположить, что у вас есть Xcode 5 или более поздняя версия.

Xcode 5 значительно расширяет поддержку запуска тестов в xcodebuild с помощью глагола test. Вам нужно будет указать схему и назначение вместо цели при использовании этой команды, потому что она действует так же, как команда Test в Xcode IDE.

Так, например, если у вас есть общая схема в вашем проекте или рабочей области с именем AppEngine, в которой правильно настроено действие тестовой схемы, вы сможете просто использовать

xcodebuild test -scheme AppEngine -destination 'platform=iOS Simulator,name=iPad'

для запуска всех модульных тестов, настроенных для схемы AppEngine, в симуляторе iOS, настроенном как iPad с последней версией iOS. Дополнительные сведения о синтаксисе спецификатора назначения см. в xcodebuild man. страница. (Вы даже можете использовать его для запуска тестов на подключенных устройствах iOS!)

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

person Chris Hanson    schedule 02.12.2013
comment
на 5 этот синтаксис назначения дает: xcodebuild: error: для опции «Destination» требуется хотя бы один параметр в форме «ключ = значение». Вы имели в виду «платформа = Симулятор iOS, имя = iPad»? - person Dan Bennett; 31.12.2013
comment
Я обнаружил, что это просто проверяет сборку и не запускает модульные тесты. Пробовал с тестом xcodebuild ‹args› и тестом xcodebuild ‹args›... не повезло. - person ether_joe; 10.03.2014
comment
Интересно, что на странице руководства утверждается, что версию ОС можно указать с помощью latest, но, похоже, это вообще не работает. - person ThomasW; 25.06.2014
comment
Привет, я использовал xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone', получая следующую ошибку: xcodebuild: error: Не удалось найти пункт назначения, соответствующий аргументам флага -destination: запрошенное устройство не может быть найдено, поскольку нет доступных устройств, соответствующих запросу. - person Raghav; 11.07.2014

Следует отметить, что вы можете использовать instruments -s devices для получения списка всех доступных устройств.

Вы также должны передать строку как -destination 'platform=iOS Simulator,id=ID_OF_THE_SIMULATOR', так как по какой-то причине она не любит пробелы между парами ключ = значение.

person topLayoutGuide    schedule 28.07.2017

У меня была аналогичная проблема со сборкой Xcode. В моем случае проблема заключалась в том, что у меня не было тестов, связанных с моей схемой.

См. мой ответ SO (с диаграммой) здесь

person David Hunt    schedule 18.03.2016

Приземлился здесь в поисках решения для аналогичной ошибки xcodebuild. В качестве дополнения вы также можете передать один ключ = val в -destination, например, -destination 'platform=iOS', и xcodebuild сообщит вам все альтернативы, доступные для схемы.

λ ~/Development/app-ios/ task/JIOS-400-Earl-Grey-Spike* xcodebuild -workspace app.xcworkspace -scheme app -destination 'platform=iOS'  -derivedDataPath "build" build-for-testing

User defaults from command line:
    IDEDerivedDataPathOverride = /Users/schoudhary/Development/app-ios/build

xcodebuild: error: Unable to find a destination matching the provided destination specifier:
        { platform:iOS }

    Missing required device specifier option.
    The device type “Generic iOS Device” requires that either “name” or “id” be specified.
    Please supply either “name” or “id”.

    Available destinations for the "App" scheme:
        { platform:iOS Simulator, id:D248DB01-A852-4360-A9C0-2D71AFE478D7, OS:10.3, name:iPad Air }
        { platform:iOS Simulator, id:CE87AF5A-141C-43DA-AE61-AF53593F37F7, OS:10.3, name:iPad Air 2 }
        { platform:iOS Simulator, id:E93B43E4-D24E-4927-B9EE-0375E15DCBD5, OS:10.3, name:iPad Pro (9.7 inch) }
        { platform:iOS Simulator, id:6D71DB17-0FE2-4D5E-BEE6-CC696445BA11, OS:10.3, name:iPad Pro (12.9 inch) }
        { platform:iOS Simulator, id:F7E37EF4-5E72-438A-A286-216C20158B47, OS:10.3, name:iPhone 5 }
        { platform:iOS Simulator, id:24653844-AE99-4B5B-8332-9FFD2208172F, OS:10.3, name:iPhone 5s }
        { platform:iOS Simulator, id:FD2089A4-BF3F-4F98-8E33-B7EFDCFE5B4D, OS:10.3, name:iPhone 6 }
        { platform:iOS Simulator, id:6EF0DFBD-E99E-4EB3-9C51-6E749F41B6E7, OS:10.3, name:iPhone 6 Plus }
        { platform:iOS Simulator, id:846E631C-6285-4B91-9BA6-1AB6E66C88DB, OS:10.3, name:iPhone 6s }
        { platform:iOS Simulator, id:A6943ADC-F6EF-42F6-9958-D966DFC419FC, OS:10.3, name:iPhone 6s Plus }
        { platform:iOS Simulator, id:B41ABED0-7554-438A-97AC-F34943ED4D79, OS:10.3, name:iPhone 7 }
        { platform:iOS Simulator, id:20F1582C-0D19-4F42-9DAD-43138FB923B9, OS:10.3, name:iPhone 7 Plus }
        { platform:iOS Simulator, id:683BB5CA-E0A8-4CE4-B0DD-AED4C4295B90, OS:10.3, name:iPhone SE }

    Ineligible destinations for the "App" scheme:
        { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
        { platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Generic iOS Simulator Device }

просто еще один полезный способ добраться до нужного пункта назначения.

person Sushant    schedule 30.05.2017