为啥需要将配置文件设置为用于调试和发布的分发?

Posted

技术标签:

【中文标题】为啥需要将配置文件设置为用于调试和发布的分发?【英文标题】:Why does provisioning profile need to be set to distribution for both debug and release?为什么需要将配置文件设置为用于调试和发布的分发? 【发布时间】:2019-10-15 21:57:13 【问题描述】:

我正在尝试通过 CircleCI 上的 fastlane 构建我的 react 本机应用程序。我正在使用 match 来管理证书/配置文件并使用这些指南:

Fastlane: CircleCI Integration

CircleCI: Example configuration for using Fastlane on CircleCI

CircleCI: Preparing your Xcode project for use with Fastlane Match

fastlane ios beta 在本地工作。

然而,在 CI 上,我发现安装程序无法构建,并出现以下错误:

错误:找不到与“match Development app.my”匹配的团队“...”的配置文件:Xcode 找不到任何匹配“.../match Development app.my”的配置文件。安装配置文件(通过将其拖放到 Xcode 的停靠项上)或在目标编辑器的 Signing & Capabilities 选项卡中选择不同的配置文件。 (在项目“MyApp”的目标“MyApp”中)`

我觉得这很奇怪,因为我没有使用开发配置文件进行构建,而是使用 distribution 配置文件。这在调用 match/gym 时在构建输出中得到确认,其中没有提及开发配置文件。

在 Xcode 中,在“签名和功能”下,我按照上述指南“自动管理签名”未勾选,“调试”设置为使用开发配置文件,“发布”设置为使用分发配置文件。

在“调试”部分下将配置文件更改为“发布”是修复我的 CI 构建的原因,但这是为什么呢?我的调试版本肯定应该始终使用开发证书吗?

【问题讨论】:

【参考方案1】:

我在 iOS 版本中遇到了类似的问题,最后意识到我需要将 Xcode 中的配置文件与我的 Fastfile 中的配置文件相匹配:

lane :beta do
  begin
    build_number = increment_build_number(...)
    slack(message: "Starting new build " + build_number)

    *** match(type: "appstore") ***

    build_app(
      ...

      *** export_method: "app-store", ***

      build_path: "./builds",
      output_directory: "./builds"
    )
    upload_to_testflight(
      skip_waiting_for_build_processing: true
    )

    slack(
      message: "App successfully published to TestFlight"
    )

  end

Match 会将所需的配置文件下载到机器上,但如果 Xcode 中的“Provisioning Profile”(在 Build Settings -> Signing 中找到)与 Fastfile 不匹配,Xcode 将无法从 Match 中获得所需的配置文件。

【讨论】:

以上是关于为啥需要将配置文件设置为用于调试和发布的分发?的主要内容,如果未能解决你的问题,请参考以下文章

苹果推送通知——分发和开发同时进行

为啥分发配置文件过期后,iOS App Store 应用程序仍会启动?

未找到用于应用商店分发的配置文件

如何将设备添加到 Adhoc 分发配置文件

为引用的子项目选择构建配置

用于 Ad-Hoc 分发的 Xcode 6 GM 配置文件