使用XCUITest框架控制Apple Watch表盘及获取官方手表应用Bundle ID相关问题
问题1:获取Apple官方手表应用Bundle ID的方法
- 运行已启动的watchOS模拟器对应终端命令:
xcrun simctl list apps <watch模拟器UDID>,返回结果会同步展示所有已安装应用的Bundle ID和应用名称,找到表盘/时钟对应条目即可获取对应ID。 - 若使用真机测试,可打开Xcode顶部菜单栏「Window」→「Devices and Simulators」,选中已连接的Apple Watch,在已安装应用列表中导出对应系统应用的详情,也能提取到Bundle ID。
注意:Apple Watch的表盘进程和普通时钟应用不属于同一个Bundle,你之前无法通过时钟应用ID控制表盘属于正常情况,表盘对应的系统进程默认Bundle ID为
com.apple.Carousel,你可以用上述方法验证当前系统版本对应的ID是否匹配。
问题2:更优的表盘控制实现方案
直接通过Bundle ID调用表盘进程的控制权限限制极高,普通UI测试的签名权限无法满足操作要求,推荐两个稳定性更高的实现方案:
- 不需要控制表盘进程的截图方案:直接调用模拟器全局截图命令
xcrun simctl io <watch模拟器UDID> screenshot <本地保存路径.png>,你可以在XCUITest中通过Process()类调用该终端命令,只要模拟器当前处于表盘页面,就能直接截取到完整表盘内容,不需要申请系统应用的操作权限。 - 需切换表盘的测试方案:提前在测试用的watch模拟器/真机中把需要用到的表盘都添加到表盘切换队列,在UI测试中通过模拟表冠旋转、表盘边缘滑动的系统手势切换到目标表盘,再执行截图操作,全程不需要直接和表盘进程交互。
注:watchOS 9及以上版本收紧了第三方测试Bundle对系统应用的操作权限,非系统级签名的测试包都无法直接控制表盘进程,优先选择无需直接交互的方案兼容性更强。
内容的提问来源于stack exchange,提问作者西間木
相关产品推荐
相关产品推荐

