有没有办法从命令行为 Xcode 项目自动创建方案
Is there a way to autocreate schemes for a Xcode Project from command line
我正在尝试自动配置 CI 管道和 运行 单元测试,但我正在处理当前工作区的任何方案。我知道我可以通过使用 Xcode/ Manage Schemes 等来创建它们...但是由于测试例程中自动化的本质,我正在弄清楚是否有一种方法可以使方案创建步骤自动化。
首先要测试一个 Xcode 项目,必须至少使用一个配置为 运行 测试的方案。之后测试应该是 运行 从命令行使用 xcodebuild。所以有两个步骤要完成,首先自动生成所需的方案,其次 运行 测试配置方案的测试。
1- 通过在脚本中使用 ruby gem 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- 创建一个 shell 脚本来 运行 来自命令行的测试。可以编辑此脚本接收以包括测试必须 运行 的方案,逐个方案循环直到所有测试通过或一个失败。
#!/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 步(确定)
希望对您有所帮助!
我正在尝试自动配置 CI 管道和 运行 单元测试,但我正在处理当前工作区的任何方案。我知道我可以通过使用 Xcode/ Manage Schemes 等来创建它们...但是由于测试例程中自动化的本质,我正在弄清楚是否有一种方法可以使方案创建步骤自动化。
首先要测试一个 Xcode 项目,必须至少使用一个配置为 运行 测试的方案。之后测试应该是 运行 从命令行使用 xcodebuild。所以有两个步骤要完成,首先自动生成所需的方案,其次 运行 测试配置方案的测试。
1- 通过在脚本中使用 ruby gem 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- 创建一个 shell 脚本来 运行 来自命令行的测试。可以编辑此脚本接收以包括测试必须 运行 的方案,逐个方案循环直到所有测试通过或一个失败。
#!/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 步(确定)
希望对您有所帮助!