返回

React Native iOS 应用构建失败?解决配置文件找不到问题!

IOS

解决 React Native iOS 应用在 Fastlane 和 Github Actions 中构建失败的问题

你是否正为 React Native iOS 应用在 Fastlane 和 Github Actions 构建过程中遇到的"找不到匹配的配置文件"错误而苦恼?明明已经安装了.p12 证书和 .mobileprovision 配置文件,却依然在 build_app 环节遭遇滑铁卢?别担心,本文将带你抽丝剥茧,分析问题根源,并提供行之有效的解决方案,助你轻松搞定 iOS 应用的自动化构建。

深入问题根源

"Error: No profiles for 'com.yourcompany.yourapp' were found: Xcode couldn't find any iOS App Development provisioning profiles matching..." 这条错误信息明确指出,Xcode 无法找到与你应用 Bundle Identifier 相匹配的 iOS 开发配置文件。

问题在于,成功将配置文件安装到系统目录并不等于 Xcode 在构建过程中能够顺利访问。导致此问题的常见原因有以下几种:

  • Keychain 访问权限受阻 : Xcode 构建应用需要调用 Keychain 中的证书和私钥,权限不足会导致配置文件无法被识别。
  • 配置文件路径未被识别 : Xcode 默认在特定路径下查找配置文件,如果你的配置文件安装在其他位置,需要手动指定路径。
  • Fastlane 环境差异 : Fastlane 执行环境与本地环境可能存在差异,导致配置文件无法被正确加载。

多管齐下,解决方案

针对上述问题根源,我们可以采取以下几种解决方案:

1. match:证书和配置文件的守护者

match 是 Fastlane 提供的一款强大工具,专为团队协作中的代码签名证书和配置文件同步管理而生。使用 match 可以确保 Xcode 始终能够访问最新的证书和配置文件,从根本上避免"配置文件找不到"的尴尬。

具体操作步骤如下:

  1. 安装利器 :

    fastlane add_plugin match
    
  2. 初始化 :

    cd ios
    fastlane match init
    

    match 会询问证书和配置文件的存储方式,建议选择 Git 仓库。

  3. 同步 :

    fastlane match development # 同步开发证书和配置文件
    fastlane match appstore # 同步发布证书和配置文件
    

    根据构建需求选择同步开发或发布证书和配置文件,match 会自动将其安装到 Keychain 和 Xcode 的指定位置。

  4. 更新 Fastfile :

    Fastfilebuild_app 步骤中,添加 export_method 参数,并根据构建版本类型设置为 app-storedevelopment

    build_app(
      workspace: "Atar.xcworkspace",
      scheme: "Atar",
      export_method: "app-store" # 或 "development"
    )
    

match 的优势 :

  • 简化证书和配置文件管理,告别手动操作带来的潜在风险。
  • 方便团队协作,确保所有开发者使用一致的证书和配置文件。

match 的局限 :

  • 需要额外配置 Git 仓库用于存储证书和配置文件。
  • 初次配置 match 过程相对繁琐。

2. 精准控制:import_certificateimport_provisioning_profile

如果你的证书和配置文件已经存储在特定位置,或者你不想使用 match,可以使用 Fastlane action 中的 import_certificateimport_provisioning_profile 分别导入证书和配置文件。

具体操作步骤如下:

  1. 更新 Fastfile :

    lane :beta do
      setup_ci
    
      # ... 其他步骤 ...
    
      import_certificate(
        certificate_path: "path/to/your/certificate.p12",
        certificate_password: "your_certificate_password"
      )
    
      import_provisioning_profile(
        provisioning_profile_path: "path/to/your/provisioning_profile.mobileprovision"
      )
    
      increment_build_number(xcodeproj: "Atar.xcodeproj")
      build_app(workspace: "Atar.xcworkspace", scheme: "Atar")
      upload_to_testflight
    end
    

    请将 certificate_pathprovisioning_profile_path 替换为你的证书和配置文件的实际路径。

精准控制的优势 :

  • 灵活控制证书和配置文件的导入。
  • 无需依赖额外的工具。

精准控制的局限 :

  • 需要手动管理证书和配置文件。
  • 团队协作时需要确保所有开发者使用一致的证书和配置文件。

3. 一键省心:Xcode 自动签名

Xcode 自动签名功能可以帮助你自动创建和管理证书和配置文件。如果你只是进行开发和测试,或者你的应用无需发布到 App Store,这种方法将是你的最佳选择。

具体操作步骤如下:

  1. 打开项目 : 在 Xcode 中打开你的项目。
  2. 进入签名设置 : 选择你的项目文件,然后选择 "Signing & Capabilities" 标签页。
  3. 开启自动管理 : 在 "Signing" 部分,选择 "Automatically manage signing"。
  4. 选择开发团队 : 选择你的开发团队。

一键省心的优势 :

  • 简单易用,无需手动管理证书和配置文件。
  • 适合开发和测试阶段。

一键省心的局限 :

  • 不适用于发布到 App Store 的应用。
  • 控制粒度较低。

总结

本文介绍了三种解决 React Native iOS 应用在 Fastlane 和 Github Actions 中构建失败的解决方案。match 适用于需要团队协作的项目,import_certificateimport_provisioning_profile 提供更高的灵活性和控制力,而 Xcode 自动签名则适合开发和测试阶段。根据你的项目需求和团队规模选择最合适的方案,让你的 iOS 应用构建流程畅通无阻!