使用 Fastlane/CircleCI 自动化 2FA

Automating 2FA using Fastlane/CircleCI

为测试版上传到 iTunesConnect/TestFlight 设置 2FA 的正确方法是什么?

有很多链接和论坛答案,但 none 解决了问题。

目前我已经在CircleCI中添加了环境变量,包括在AppleID上生成的Application Specific Password

我在快车道中有一条看起来像这样的车道

desc "Alpha build"
  lane :alpha do
    match(type: "adhoc")
    gym(export_method: "ad-hoc")
    upload_to_testflight(skip_submission: true)
  end

我运行 下面的 preauth 命令在 alpha 通道之前

- run:
    name: Spaceship pre-auth for 2FA
    command: bundle exec fastlane spaceauth -u [redacted].com

即使密码正确,Fastlane 似乎也无法通过身份验证

Please check your credentials and try again.
This could be an issue with App Store Connect,
Please try unsetting the FASTLANE_SESSION environment variable

如果我删除 spaceauth 命令,circleci 会因等待 2FA 超时而失败。

Fastlane 网站表示,除非使用额外的应用商店连接 API(例如上传元数据等),否则无需使用 spaceauth。它指出,对于上传到 testflight 的内容,仅应用程序特定密码就足够了,尽管这也不行。

有谁解决了这个问题,请指教?

那里的文档有误 - 这是我的错。在合并启用此功能的实际代码之前,我更新了文档文章。

目前最好的办法是创建第二个未启用 2FA 的帐户,或者在本地使用 spaceauth,然后将返回值复制到 CI 提供商的 ENV 变量中,尽管它可能只能工作 24 小时。我们目前正在研究如何改进这一点。

使用 CI 服务器的 REST API 更新 FASTLANE_SESSION 配置参数的值。在我们的例子中,我们将它定义在一个地方,它被所有需要授权到 Dev Center / App Store Connect 的作业重用。我没有查看详细信息,但我确信有一种方法可以通过 REST 调用更新 job/project 参数。然后,有一个运行 spaceauth 并使用 REST API 设置新值的计划作业。

您可以通过 API 密钥向 Apple 进行身份验证。您可以在此处生成密钥:https://appstoreconnect.apple.com/access/api.

获得 key.p8 文件后,您可以使用 fastlane 命令进行身份验证:app_store_connect_api_key 如下:

app_store_connect_api_key(
  key_id: "ABCDEFG",
  issuer_id: "Your_issuer_id",
  key_content: File.read("./key.p8").chomp,
  duration: 1200,
  in_house: false
)

执行命令后,密钥会话存储在以下环境变量中:APP_STORE_CONNECT_API_KEY 因此您上传到 testflight 的内容应如下所示:

upload_to_testflight(
    groups: ["Friends & Family","Mytest-Group"], 
    ipa: "./build/myapp.ipa",
    api_key: Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY]
  )