TravisCI iOS配置问题:TEST_DESTINATION参数无法正常工作
解决Travis CI中iOS测试的TEST_DESTINATION参数解析问题
这个问题的核心是Shell对带空格参数的解析逻辑在Travis环境里和你本地直接执行命令时的差异。
你遇到的xcodebuild: error: Unknown build action '7'报错,本质是因为当Travis执行你的script命令时,$TEST_DESTINATION变量里的空格没有被正确包裹,导致Shell把参数拆成了多个部分——它把iPhone 7 Plus里的7当成了一个独立的build action参数传给了xcodebuild,自然就报错了。
最简单的修复方案:给script里的变量加引号
直接修改你的script部分,给$TEST_DESTINATION加上双引号,确保Shell把整个变量值作为一个完整的参数传递:
language: objective-c osx_image: xcode9.2 cache: cocoapods before_install: - pod repo update - pod update env: matrix: - TEST_SDK=iphonesimulator11.1 TEST_DESTINATION="platform=iOS Simulator,name=iPhone 7 Plus,OS=11.1" - TEST_SDK=iphonesimulator11.2 TEST_DESTINATION="platform=iOS Simulator,name=iPhone 7 Plus,OS=11.2" script: - xcodebuild test -workspace iOSApp.xcworkspace -scheme iOSApp -sdk $TEST_SDK -destination "$TEST_DESTINATION" | xcpretty
为什么这个能解决问题?
- 你本地直接执行命令时,引号是写在命令行里的,Shell会直接识别这是一个完整的参数;
- 但在Travis的
env配置里,变量值的双引号会被Shell解析时吃掉,传递到script时,$TEST_DESTINATION的实际值是不带引号的platform=iOS Simulator,name=iPhone 7 Plus,OS=11.1; - 这时候如果不给变量加引号,Shell会按空格拆分参数,把
7当成独立的命令参数,导致xcodebuild误解。
另一种可选方案:在env里转义空格
如果你不想修改script部分,也可以在env的TEST_DESTINATION里用转义符处理空格,并用单引号包裹变量值:
env: matrix: - TEST_SDK=iphonesimulator11.1 TEST_DESTINATION='platform=iOS Simulator,name=iPhone\ 7\ Plus,OS=11.1' - TEST_SDK=iphonesimulator11.2 TEST_DESTINATION='platform=iOS Simulator,name=iPhone\ 7\ Plus,OS=11.2'
这种方式是提前告诉Shell,空格是参数的一部分,不要拆分它。不过相对来说,第一种修改script的方式更直观,也更容易维护。
内容的提问来源于stack exchange,提问作者jbehrens94
相关产品推荐
相关产品推荐

