使用Fastlane / CircleCI自动化2FA

时间:2019-04-05 14:44:34

标签: ios circleci fastlane

设置2FA以便将Beta上传到iTunesConnect / TestFlight的正确方法是什么?

有很多链接和论坛答案,但没有一个能解决问题。

当前,我已将环境变量添加到CircleCI中,包括在AppleID上生成的“应用程序专用密码”。

我在Fastlane中有一个这样的车道

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

我在Alpha通道之前运行以下preauth命令

- 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命令,由于等待2FA超时,Circleci失败。

Fastlane网站表示,除非正在使用其他应用程序商店连接API(例如,上传元数据等),否则无需使用spaceauth。它指出,对于上传到testflight的应用程序,仅应用程序专用密码应该足够,尽管这样做不起作用要么。

有人解决了这个问题,可以请教吗?

3 个答案:

答案 0 :(得分:2)

您可以通过 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]
  )

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

使用CI服务器的REST API更新FASTLANE_SESSION配置参数的值。在我们的案例中,我们将其定义在一个地方,并且需要身份验证到Dev Center / App Store Connect的所有作业都可以重用它。我没有研究细节,但是我敢肯定有一种方法可以通过REST调用来更新job / project参数。然后,再次执行一个运行任务,该任务运行spaceauth并使用REST API设置新值。