如何确保构建使用 v14.x iOS/tvOS 模拟器?

Posted

技术标签:

【中文标题】如何确保构建使用 v14.x iOS/tvOS 模拟器?【英文标题】:How can I make sure that builds are using v14.x iOS/tvOS simulators? 【发布时间】:2021-03-16 15:42:31 【问题描述】:

我们环境中的某些构建失败,因为这些构建使用的是 13.X ios/tvOS 模拟器,并且由于某种原因导致了问题。我对我们的 Fastfile 进行了更改,以便构建使用 14.2 模拟器,现在构建成功了。

这是我对快速文件所做的更改。

首先,我声明了一个字典:

XCODE_DESTINATION = 
  iphoneos: "generic/platform=iOS",
  iphonesimulator: "platform=iOS Simulator,OS=14.2,name=iPhone 11 Pro Max",
  appletvos: "generic/platform=tvOS",
  appletvsimulator: "platform=tvOS Simulator,OS=14.2,name=Apple TV 4K"

然后,在 iOS 和 tvOS 的 run_tests 通道中,我引用了 iphonesimulator 和 appletvsimulator:

    run_tests(
      destination: XCODE_DESTINATION[:iphonesimulator],
      workspace: WORKSPACE_NAME,
      scheme: options[:scheme_tests]
    )
    run_tests(
      destination: XCODE_DESTINATION[:appletvsimulator],
      workspace: WORKSPACE_NAME,
      scheme: options[:scheme_tests]
    )

尽管这个解决方案解决了问题,但我真的不希望 XCODE_DESTINATION dict 必须专门引用操作系统版本和特定设备。

有没有一种方法可以配置这个 Fastfile,使其仅在 XCode 中存在 14.X 模拟器时才运行测试,而无需在 dict 中明确指出?

谢谢!

【问题讨论】:

【参考方案1】:

目前 fastlane 不支持此功能,请随意创建问题 -> https://github.com/fastlane/fastlane/issues

但是你可以在run_tests中指定模拟器和版本:

run_tests(
      devices: ['iPhone 11 Pro Max (14.2)'],
      workspace: WORKSPACE_NAME,
      scheme: options[:scheme_tests],
      ensure_devices_found: true
    )

此外,您可以将ensure_devices_found 设置为true,因此如果找不到指定的模拟器,测试将失败。

【讨论】:

以上是关于如何确保构建使用 v14.x iOS/tvOS 模拟器?的主要内容,如果未能解决你的问题,请参考以下文章

分享相同的游戏中心排行榜 iOS / tvOS / OS X?

使用 TestFight 构建 Beta 测试版本

Xcode 11.4 发布新特性

模线性方程组

如何确保我的 Xcode UITest 目标仅构建目标应用程序?

如何使用 v-model 和 v-if 使用 Vue.js 构建一个简单的计算器?