Fastlane 从标识符中检索配置文件路径

Fastlane retrieve provisioning profile path from identifier

是否有任何 fastlane/CLI 工具可以根据 UDID 找到配置文件的路径和名称?


我正在尝试设置 fastlane 来进行代码签名。我正在使用 match,但它不适用于我的用例,因为配置文件需要更改。

我有 2 条通道,都使用 RELEASE 配置:

我正在尝试调用 update_project_provisioning,但我需要给它一个配置文件的路径,而且我只有配置文件的说明符,例如 match AdHoc APP_ID

我想要一个将此说明符转换为路径的命令。


快车道代码:

lane :deploy_qa_prod do
  configuration = "Release"
  app_identifier = ...
  provisioning_profile = "match AdHoc #{app_identifier}"
  # In the other lane: provisioning_profile = "match AppStore #{app_identifier}"

  sync_code_signing(
    type: "adhoc",
    app_identifier: app_identifier,
    readonly: true
  )

  update_project_provisioning(
     xcodeproj: ...,
     target_filter: ...,
     # profile: provisioning_profile, <--- This is the problematic line
     build_configuration: configuration
  )

  build_app(
     scheme: ...,
     workspace: ...,
     configuration: configuration
     export_options: {
       method: "ad-hoc",
       provisioningProfiles: {
         app_identifier => provisioning_profile
       }
     }
   )

   pilot(......)
   # In the other lane: upload_to_qa(......)

推荐的解决方案:

我不再只使用 DEBUGRELEASE 配置。

相反,我定义了 5 种不同的配置:

  • 开发(测试版)
  • 开发(生产)
  • 即席(测试版)
  • 临时(产品)*
  • AppStore(产品)*

* 我原来的RELEASE配置,发这个问题的时候

这样,我可以为每个配置定义单独的证书和配置文件,我不再需要从 fastlane 更改它们。

如果您在 Build Settings 中定义了一些用户定义的属性,请避免使用 .xcconfig 文件重复它们 5 次。您可以阅读更多关于它们的信息 here for example.


Hacky解决方案,直接回答我的问题

我不建议这样做,而是使用单独的配置。但是如果你需要一个临时的快速修复,那么:

不幸的是(或者幸运的是)没有非 hacky 的方法可以做到这一点。

我注意到 sync_code_signing(又名 match)在幕后调用 sigh,这将为下载的配置文件创建环境变量。

这些变量的名称遵循以下格式:sigh_#{app_identifier}_#{match_type}_profile-path(例如:sigh_com.yourDomain.yourAppName_adhoc_profile-path

然后您可以在调用 update_project_provisioning:

时使用此变量
    app_identifier = ...
    match_type = "adhoc"
    configuration = "Release"

    sync_code_signing(
        type: match_type,
        app_identifier: app_identifier,
        readonly: true
    )

    profile_path = ENV["sigh_#{app_identifier}_#{match_type}_profile-path"]
 
    update_project_provisioning(
      xcodeproj: ...,
      target_filter: ...,
      profile: profile_path,
      build_configuration: configuration
    )
    
    ...