通过命令行同时运行iPhone与配对Apple Watch模拟器XCUITests的问题
问题根因
WatchKit App 的测试目标在命令行执行时,不能直接指定配对的iPhone模拟器作为destination,必须显式指定watchOS Simulator类型的运行目标。Xcode图形界面点击测试时会自动关联配对设备,但xcodebuild命令没有该隐式适配逻辑,因此会出现设备明明在可用列表却匹配失败的报错。
解决步骤
首先查询当前已配对的Apple Watch模拟器信息
执行命令:xcrun simctl list devices watchOS
从输出中找到和目标iPhone 11配对的Watch设备,记录它的名称、系统版本或设备ID。单独运行Apple Watch端UITests
将命令中的destination替换为你查到的Watch设备信息即可,示例:xcodebuild -workspace MyApp.xcworkspace -scheme 'MyApp WatchKit App' -destination 'platform=watchOS Simulator,name=Apple Watch Series 6 (44mm),OS=7.5' test
推荐直接用设备ID指定目标,可避免名称/版本匹配误差,示例:-destination 'id=你的Watch设备ID'同时运行iPhone和Apple Watch两端UITests
xcodebuild支持传入多组-scheme和-destination参数同时执行测试,示例命令:
xcodebuild -workspace MyApp.xcworkspace \ -scheme 'MyApp' \ -destination 'name=iPhone 11' \ -scheme 'MyApp WatchKit App' \ -destination 'platform=watchOS Simulator,name=你查到的Watch设备名称' \ test
注意事项
如果执行后仍然报错,先打开Xcode检查「MyApp WatchKit App」scheme的测试配置,确认支持的watchOS版本和你使用的模拟器版本一致,且没有勾选仅对特定设备可用的限制。
内容的提问来源于stack exchange,提问作者zhanch

