You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:04:40