【问题标题】:Fastlane match build adhoc and appstoreFastlane 匹配构建 adhoc 和 appstore
【发布时间】:2019-06-01 20:36:27
【问题描述】:

我正在使用 Fastlane matchgym 构建我的应用程序并将其从 CI (Bitrise) 分发到 Fabric。如Fastlane docs中所述,我的 Xcode 设置使用 AdHoc 配置文件设置为手动发布配置。

现在我想从 CI 分发到 Appstore,但它失败了,因为 Xcode Release 配置设置为使用 AdHoc 配置文件并且 Match 安装了 AppStore 配置文件。

+---------------------------------------------------------------+-----------------------------------------------------------------------------+
|                                                           Summary for gym 2.112.0                                                           |
+---------------------------------------------------------------+-----------------------------------------------------------------------------+
| scheme                                                        | AeroNavMap                                                                  |
| export_method                                                 | app-store                                                                   |
| export_xcargs                                                 | -allowProvisioningUpdates                                                   |
| export_options.provisioningProfiles.net.tequilaapps.airnavmap | match AppStore net.tequilaapps.airnavmap                                    |
| workspace                                                     | ./PEMap.xcworkspace                                                         |
| destination                                                   | generic/platform=iOS                                                        |
| output_name                                                   | AeroNavMap                                                                  |
| build_path                                                    | /Users/vagrant/Library/Developer/Xcode/Archives/2019-01-06                  |
| clean                                                         | false                                                                       |
| output_directory                                              | .                                                                           |
| silent                                                        | false                                                                       |
| skip_package_ipa                                              | false                                                                       |
| result_bundle                                                 | false                                                                       |
| buildlog_path                                                 | /var/folders/90/5stft2v13fb_m_gv3c8x9nwc0000gn/T/fastlane_logs957341986/gym |
| skip_profile_detection                                        | false                                                                       |
| xcode_path                                                    | /Applications/Xcode.app                                                     |
+---------------------------------------------------------------+-----------------------------------------------------------------------------+
[13:47:38]: $ set -o pipefail && xcodebuild -workspace ./PEMap.xcworkspace -scheme AeroNavMap -destination 'generic/platform=iOS' -archivePath /Users/vagrant/Library/Developer/Xcode/Archives/2019-01-06/AeroNavMap\ 2019-01-06\ 13.47.38.xcarchive archive | tee /var/folders/90/5stft2v13fb_m_gv3c8x9nwc0000gn/T/fastlane_logs957341986/gym/AeroNavMap-AeroNavMap.log | xcpretty
[13:47:42]: ▸ ❌  error: No profile for team 'XXXXXXXX' matching 'match AdHoc net.tequilaapps.airnavmap' found: Xcode couldn't find any provisioning profiles matching 'G9MA9G2SST/match AdHoc net.tequilaapps.airnavmap'. Install the profile (by dragging and dropping it onto Xcode's dock item) or select a different one in the General tab of the target editor. (in target 'AeroNavMap')
[13:47:42]: ▸ ** ARCHIVE FAILED *

这一切都说得通,但问题是我应该如何设置 Xcode,以便我可以拥有两条 Fastlane 通道,一条用于构建 AppStore,另一个用于 AdHoc。

可以创建一个新的 Xcode 配置 AppStore,我将在其中设置 AppStore 配置文件,但这会引发另一个问题,即我的自定义框架无法构建。类似to this question。我有许多自定义框架,我还需要在他们的 Xcode 项目中创建相同的 AppStore 配置,但这太过分了。

我尝试强制gym 使用 AppStore 配置文件,如下所示,但这无济于事。 Xcode 中设置的 AdHoc 配置文件仍在使用中。

  desc "Builds the app for the AppStore"
  lane :build_appstore do
      match(type: "appstore", readonly: true)
      build_app(
          scheme: "AeroNavMap",
          export_method: "app-store", 
          skip_profile_detection: true,
          export_options: { provisioningProfiles: { "net.tequilaapps.airnavmap" => "match AppStore net.tequilaapps.airnavmap"}}
          )
  end

我目前的解决方案是在构建之前手动更新 xcodeproj,但这也不是很干净

  lane :build_appstore do
      match(type: "appstore", readonly: true)
      if Helper.ci? 
        UI.message "Patching Xcode proj to use AppStore profile"
        `sed -i.bak -e 's/match AdHoc net.tequilaapps.airnavmap/match AppStore net.tequilaapps.airnavmap/g' ../PEMap/PEMap.xcodeproj/project.pbxproj`
      end
      build_app(scheme: "AeroNavMap", export_method: "app-store")
  end

【问题讨论】:

  • 你有没有为这个问题找到任何优雅的解决方案?

标签: ios xcode fastlane fastlane-match fastlane-gym


【解决方案1】:

存档构建时有两个代码签名阶段(使用 Xcode 或 Gym):构建时使用的代码签名身份(在 Xcode 中,这是您的目标的构建设置中设置的内容)和导出存档时使用的一个(通过 Xcode 手动导出存档时,您在管理器的导出对话框中选择的那个)

我们在 Fastfiles 中所做的事情在调用 gym 时被设置为相同的值。我们使用 xcargs 覆盖构建设置,并在那里使用与我们在 export_options 中设置的签名相同的签名:

MY_APP_ID = "com.foo.bar"
MY_PROFILE = "match AppStore com.foo.bar"
MY_TEAM = …

match(
    app_identifier: MY_APP_ID,
    type: "appstore",
    readonly: true
)

settings_to_override = {
  :BUNDLE_IDENTIFIER => MY_APP_ID,
  :PROVISIONING_PROFILE_SPECIFIER => MY_PROFILE,
  :DEVELOPMENT_TEAM => MY_TEAM
}

gym(
    workspace: WORKSPACE_PATH,
    scheme: "Foo",
    configuration: "Production",
    xcargs: settings_to_override,
    export_method: "app-store",
    export_options: {
        provisioningProfiles: { 
            MY_APP_ID => MY_PROFILE
        }
    }
)

感谢https://github.com/AliSoftware

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多