You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Actions iOS应用单元测试工作流执行失败求助

解决GitHub Actions中Fastlane run_tests找不到模拟器的问题

问题现象

运行GitHub Actions工作流时,run_tests步骤报错,提示无法找到指定的模拟器目标,核心错误日志如下:

xcodebuild: error: Unable to find a destination matching the provided destination specifier:
        { platform:iOS Simulator, id:BDC3DCB4-9BC6-4DBF-93FD-312192818135 }

    Available destinations for the "CICDDemo" scheme:
        { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Any iOS Device }
        { platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Any iOS Simulator Device }

当前使用的配置文件:

GitHub Actions工作流(.yml)

name: Unit Tests
on:
  push:
    branches: [main, develop, feature/*]
  pull_request:
    branches: [main, develop, feature/*]
  
jobs:
  build:
    name: Build and test
    runs-on: macos-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v1
    
    - name: Bundle install
      run: bundle install

    - name: Setup Xcode version
      uses: maxim-lobanov/setup-xcode@v1
      with:
        xcode-version: latest-stable
      
    - name: Run unit tests
      run: bundle exec fastlane unit_tests

Fastfile配置

default_platform(:ios)

platform :ios do
  lane :unit_tests do
    run_tests(build_for_testing: true,
              scheme: "CICDDemo",
              only_testing: "CICDDemo",
              device: "iPhone 14")
  end
end

项目基于Xcode 14.3构建,部署目标为iOS 16.4。

错误原因

  1. Xcode版本不匹配:工作流中指定latest-stableXcode版本,但日志显示实际使用Xcode 14.2,与项目依赖的14.3不一致,导致模拟器版本/设备支持不兼容。
  2. 模拟器不存在:GitHub Actions的macos-latest环境默认未预创建iPhone 14(iOS 16.4)模拟器,Fastlane无法找到对应设备ID。
  3. 设备指定方式不精准:仅用device参数指定设备名称,未明确OS版本,xcodebuild无法匹配有效目标。

解决方案

1. 匹配项目的Xcode版本

修改GitHub Actions工作流中的Xcode版本配置,明确指定项目使用的14.3:

- name: Setup Xcode version
  uses: maxim-lobanov/setup-xcode@v1
  with:
    xcode-version: "14.3"

2. 调整Fastfile的测试配置

有两种可选方案:

方案A:预创建指定模拟器并精准匹配

在run_tests前先创建对应版本的模拟器,并用destination参数明确指定平台、设备名称和OS版本:

platform :ios do
  lane :unit_tests do
    # 创建指定版本的iPhone 14模拟器
    create_simulator(
      device: "iPhone 14",
      os_version: "16.4"
    )
    # 运行测试,精准指定目标
    run_tests(
      build_for_testing: true,
      scheme: "CICDDemo",
      only_testing: "CICDDemo",
      destination: "platform=iOS Simulator,name=iPhone 14,OS=16.4"
    )
  end
end

方案B:使用通用模拟器占位符

如果不需要指定特定设备,直接使用Any iOS Simulator Device占位符,避免设备不存在的问题:

platform :ios do
  lane :unit_tests do
    run_tests(
      build_for_testing: true,
      scheme: "CICDDemo",
      only_testing: "CICDDemo",
      destination: "platform=iOS Simulator,name=Any iOS Simulator Device"
    )
  end
end

3. 可选:调试时查看可用模拟器

若仍有问题,可在工作流中添加步骤查看环境中可用的模拟器列表,方便排查:

- name: List available simulators
  run: xcrun simctl list devices

内容的提问来源于stack exchange,提问作者batman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 21:25:08