Fastlane中运行单元测试的Rosetta模拟器名称及Lane编写咨询
解决Fastlane中Rosetta适配模拟器的测试Lane问题
直接使用iPhone 14 (Rosetta)作为设备名称无效,核心原因是服务器上的模拟器名称格式并非如此,且需明确x86_64架构的模拟器(这类模拟器在Apple Silicon服务器上依赖Rosetta运行)。
1. 获取服务器上可用的Rosetta适配模拟器名称
在终端执行以下命令,筛选出所有x86_64架构的iPhone模拟器:
xcrun simctl list devices available | grep -E 'iPhone.*x86_64'
输出示例类似:
iPhone 14 (16.4) (ABC123DEF456) — x86_64
这里的iPhone 14 (16.4)或括号内的设备UUID(ABC123DEF456)均可作为有效设备标识(UUID更稳定,避免名称变动)。
2. 编写Fastlane测试Lane
以下是可直接在服务器运行的测试Lane示例,包含Rosetta校验、模拟器管理和测试执行:
lane :test_with_rosetta do # Apple Silicon服务器强制安装Rosetta(已安装则跳过) sh "softwareupdate --install-rosetta --agree-to-license || true" # 替换为你获取到的模拟器名称/UUID simulator_id = "iPhone 14 (16.4)" # 提前启动模拟器,避免冷启动导致测试超时 sh "xcrun simctl boot '#{simulator_id}'" # 运行Xcode测试,强制指定x86_64架构确保Rosetta生效 run_tests( scheme: "YourAppScheme", device: simulator_id, xcargs: "-arch x86_64" ) # 测试完成后关闭模拟器,释放资源 sh "xcrun simctl shutdown '#{simulator_id}'" end
3. 补充:服务器无对应x86_64模拟器时的创建方法
若上述命令未找到合适的模拟器,可手动创建:
# 先查看服务器可用的iOS运行时版本 xcrun simctl list runtimes # 创建x86_64架构的iPhone模拟器(替换为实际可用的runtime版本) xcrun simctl create "iPhone 14 Rosetta" "iPhone 14" "iOS 16.4" --arch x86_64
创建完成后,重新执行第一步的命令获取设备标识,更新Lane中的simulator_id即可。
内容的提问来源于stack exchange,提问作者Navdeep Singh
相关产品推荐
相关产品推荐

