使用xcodebuild运行Swift包测试报错需在具体设备上运行如何解决?
问题解决方案
错误根因
你仅通过-sdk参数指定了构建SDK,没有明确指定测试运行的具体目标模拟器设备,xcodebuild会默认使用「Any iOS Simulator Device」虚拟目标,而该目标不支持运行测试用例,必须绑定真实存在的模拟器实例才能执行测试。
解决步骤
- 第一步:查询本地可用的iOS模拟器列表
执行命令:xcrun simctl list devices available
命令执行后会输出所有可用的模拟器,格式如下示例:
== Devices == -- iOS 14.5 -- iPhone 12 (A123B456-C789-0D12-E345-F67890GHI123) (Available) iPhone 13 (B123C456-D789-0E12-F345-G67890HIJ123) (Available)
你可以选择对应的模拟器名称+系统版本,或者直接复制模拟器的UUID字符串使用。
- 第二步:调整xcodebuild命令,新增
-destination参数
有两种指定方式,二选一即可:
- 按模拟器名称+系统版本指定:
xcodebuild -scheme "package-name-Package" -configuration "Debug" -destination 'platform=iOS Simulator,name=iPhone 12,OS=14.5' -arch x86_64 test
注意把name和OS的取值替换成你第一步查询到的实际可用的模拟器信息。
2. 按模拟器UUID指定(更精准,不会出现重名匹配错误):
xcodebuild -scheme "package-name-Package" -configuration "Debug" -destination 'id=A123B456-C789-0D12-E345-F67890GHI123' -arch x86_64 test
把id后面的字符串替换成第一步查到的对应模拟器UUID即可。
额外说明
- 加了
-destination参数后不需要再额外指定-sdk参数,xcodebuild会自动根据目标设备匹配对应SDK,避免参数冲突。 - 如果是在Apple Silicon架构的Mac上运行测试,需要运行x86架构模拟器时保留
-arch x86_64参数,运行原生Arm架构模拟器可以将参数改为-arch arm64或者直接删除该参数让xcodebuild自动适配。 - 如果需要跑真机测试,才需要指定
-sdk iphoneos,同时需要补充开发者签名、Team ID等相关配置参数。
内容的提问来源于stack exchange,提问作者Ben Butterworth
相关产品推荐
相关产品推荐

