Есть ли способ автоматически создавать схемы для проекта XCode из командной строки

Я пытаюсь настроить конвейер CI и запустить модульные тесты автоматически, но я работаю без схем для текущего рабочего пространства. Я знаю, что могу создавать их, используя Xcode/ Manage Schemes и т. Д., Но, поскольку сама по себе природа автоматизации в процедуре тестов, я выясняю, есть ли способ автоматизировать этап создания схемы.

1 ответ

Решение

Во-первых, для тестирования проекта XCode необходимо использовать хотя бы одну схему, настроенную для запуска тестов. После этого тест следует запустить из командной строки с помощью xcodebuild. Таким образом, необходимо выполнить два шага: сначала автоматически сгенерировать необходимые схемы, а затем запустить тесты для схем, настроенных для тестирования.

1. Используя скрипт Ruby CocoaPods/Xcodeproj в сценарии, я смог выполнить создание схем. Следующий код создает схемы для всех целей:

#!/usr/bin/env ruby
# fix_schemes.rb

require 'xcodeproj'
project_path = '/your_path/your_project.xcodeproj'
project = Xcodeproj::Project.open(project_path)

Шаг 1 (ОК)

2. Создайте сценарий оболочки для запуска тестов из командной строки. Полученные сценарии могут быть отредактированы для включения схемы (схем), в которых должны выполняться тесты, циклически повторяя схему до тех пор, пока все тесты не пройдут или один из них не будет пройден.

#!/bin/bash
#!/bin/bash -e
# build-test.sh

# Set bash script to exit immediately if any commands fail.
set -e

## declare the schemes to test
declare -a arr=("Scheme01UnitTests" "Scheme02UnitTests")

## Parameters
## -s The SDK to use (iphoneos, iphonesimulator) default "iphonesimulator"
## -o The simulator Operating System, default 11.2
## -c Configuration (Debug, Release), default Debug


SDK="iphonesimulator"
OS=11.2
CONFIG="Debug"

#Parsing arguments
while getopts "s:o:c:" option; do
  case $option in
    s ) SDK=$OPTARG
    ;;
    o ) OS=${OPTARG}
    ;;
    c ) CONFIG=${OPTARG}
    ;;
  esac
done

echo "Using OS: $OS"
echo "Using SDK: $SDK"
echo "Using Configuration: $CONFIG"

## now loop through the above array
for s in "${arr[@]}"
    do
        echo "***************************************"
        echo "**   Test $s"
        echo "***************************************"
        cmd="set -o pipefail && env \"NSUnbufferedIO=YES\" xcodebuild -workspace MyWorkspace.xcworkspace -scheme $s -sdk $SDK -destination 'platform=iOS Simulator,name=iPhone 6s,OS=$OS' -configuration $CONFIG test | xcpretty -r junit --no-color -o 'build/reports/TEST-${s}.xml'"

        eval $cmd
    done
exit 0;

Шаг 2 (ОК)

Надеюсь это поможет!

Другие вопросы по тегам