Fastlane Boarding采用双因素身份验证

时间:2016-11-14 00:28:06

标签: ios heroku testflight fastlane

我按照"入门"登机github页面上的指南,但我一直在myoku页面上收到此错误We're sorry, but something went wrong.

登机页面确实说双因素身份验证工作正常:https://github.com/fastlane/fastlane/blob/master/spaceship/README.md#2-step-verification但我不确定如何将该Cookie添加到我的heroku网站。

提前致谢。

3 个答案:

答案 0 :(得分:6)

Fastlane 现在(从 2.160.0 版本开始)支持 Apple's App Store Connect API。这避免了 2FA 会话黑客的所有问题。仍然有一些 fastlane 操作没有得到完全支持,但大多数都得到了支持。

https://docs.fastlane.tools/app-store-connect-api/ 解释了如何开始在 fastlane 中使用 API 密钥。

总而言之,您需要执行以下操作(这些示例直接来自该文档):

  1. Create an App Store Connect API Key
  2. 从同一页面,下载新的密钥 .p8 私钥文件并将其保存在安全的地方(警告:您只能下载一次)。记下 Key ID 和 Issuer ID,因为您很快就会再次需要它们。
  3. 使用 app_store_connect_api_key 操作在您的 Fastfile 中指定新键:
lane :release do
  api_key = app_store_connect_api_key(
    key_id: "D383SF739",
    issuer_id: "6053b7fe-68a8-4acb-89be-165aa6465141",
    key_filepath: "./AuthKey_D383SF739.p8",
    duration: 1200, # optional
    in_house: false, # optional but may be required if using match/sigh
  )

  pilot(api_key: api_key)
end

或者,将详细信息写入 JSON 文件:

{
  "key_id": "D383SF739",
  "issuer_id": "6053b7fe-68a8-4acb-89be-165aa6465141",
  "key": "-----BEGIN PRIVATE KEY-----\nMIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHknlhdlYdLu\n-----END PRIVATE KEY-----",
  "duration": 1200, # optional
  "in_house": false, # optional but may be required if using match/sigh
}

并在您的 Fastfile 中引用 JSON 文件:

lane :release do
  pilot( api_key_path: "fastlane/D383SF739.json" )
end

或者通过命令行:

$ fastlane pilot distribute --api_key_path fastlane/D383SF739.json

答案 1 :(得分:0)

请关注https://docs.fastlane.tools/best-practices/continuous-integration/#application-specific-passwords

如果您要从CI机器上将构建版本上载到App Store Connect(动作upload_to_app_store和交付)或TestFlight(动作upload_to_testflight,pilot或testflight),则需要生成应用程序专用密码:

注意:如果您的操作用法除了上传二进制文件以外的其他操作(例如,更新任何元数据,例如设置发行说明或分发给测试人员等。

这是我最近启用2FA时使用Fastlane设置2FA的功能。

  • 导出FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD = <您的应用密码>
  • 在我的车道中使用了upload_to_testflight,没有进行任何其他设置。 Fastlane将使用上面的变量进行身份验证。

与Apple API交互的所有其他操作均不接受应用程序专用密码。

在这里您需要存储在Fastlane中并使用的cookie。我必须通过CI / CD设置来更新changelog。

  1. 解锁钥匙串以存储我的用户密码

    安全性解锁钥匙串-p $ SYSTEM_PASSWORD

  2. 生成cookie重定向到文件(token.txt)。

    bundle exec fastlane spaceauth -u ci-user@company.com>&token.txt

  3. 将Auth令牌提取到文件“会话”

    awk -F“'”'$ 0 = $ 2'token.txt>会话

  4. 在运行Fastlane通道之前设置FASTLANE_SESSION变量,它会从上面创建的“会话”文件中读取值。

    export FASTLANE_SESSION ='$(<会话)'

  5. 照常运行Fastlane testflight车道。

在上面,我同时使用了这两种方法,如果您仅将软件包上传到Testflight,则只需设置FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD变量。

答案 2 :(得分:0)

我在尝试在 pilot/upload_to_testflight 旁边使用 FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD 时遇到问题。它总是在 2FA 步骤上给我错误。事实证明,为了让 pilot 使用该环境变量,必须 传递 2 个参数,apple_idskip_waiting_for_build_processing,否则正常的用户名和密码身份验证将使用。

请注意,这仅适用于上传,对于任何其他交互,推荐的方法是使用 api_key。