使用 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]
)
为测试版上传到 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]
)