【问题标题】:How should the keychain option be used for altool?altool 应该如何使用 keychain 选项?
【发布时间】:2016-01-03 18:49:45
【问题描述】:

我正在尝试在 altool 中使用 @keychain 选项和 -p 开关,以便从钥匙串中加载我的 iTunes Connect 密码:

altool --validate-app -f "${IPA}" -u "redacted" -p "@keychain:?????"

我正在尝试找出在@keychain: 之后需要输入的内容。我尝试的所有操作(钥匙串文件的路径、钥匙串条目的名称、钥匙串条目中的用户名)都会产生以下错误:

*** 错误:在钥匙串中找不到指定的项目。

altool 提供有关-p 参数的以下信息:

-p, --password  Password. Required if username specified.  Password is read from stdin if one is not supplied.
                May use @keychain: or @env: prefixes followed by the keychain or environment variable lookup name.
                e.g. -p @env:SECRET which would use the value in the SECRET environment variable.

【问题讨论】:

    标签: xcode app-store-connect application-loader


    【解决方案1】:

    正确的用法是输入钥匙串项的名称(不是钥匙串本身的名称,也不是钥匙串项的“帐户”字段)。

    我的问题实际上与访问控制有关。我必须在 Keychain Access 中编辑钥匙串项并调整访问控制设置以允许 altool 看到钥匙串项。

    【讨论】:

    • 您介意详细说明一下吗?我试过altool --validate-app -f "${IPA}" -u "redacted" -p "@keychain:iPhone Distribution: Example Company, LLC",但它永远无法找到身份。我试过解锁钥匙串并提供完全的访问控制,但没有成功。 `
    • 抱歉,我不清楚。老实说,我不记得了,并且不再在该代码库上工作,所以我无法检查……如果您弄明白了,请随时编辑此问题和/或回答。
    • 正常工作一年多后,它停止工作。问题也是访问控制。出于某种原因,钥匙串只有 iCloud 版本的凭据,您无法在其中修改权限。我最终使用相同的密码创建了一个新条目,我可以在其中更改访问控制以允许altool
    【解决方案2】:

    对我有用的方法是使用 Application Loader 本身登录(选中“让我保持登录”选项)并使用 Application Loader 的钥匙串条目>.

    所以我的命令看起来像这样:

    altool --validate-app -f APPLICATION.ipa -u my@apple.id -p @keychain:"Application Loader: my@apple.id"
    

    【讨论】:

    • 我打开了 Xcode 的 ApplicationLoader,Windows > 退出。在我再次登录并检查“[x] Keep Me Signed In”后一切都很好。我使用 altool 的命令行 Jenkins 构建作业现在可以再次运行。谢谢!
    • 这可能不应该是公认的答案,但它仍然非常有用!
    【解决方案3】:

    先决条件:

    • 显然,您需要一个 Apple 开发者帐户。那是AC_USERNAME
    • 您需要该帐户的密码。如果您可以启用双重身份验证,则需要创建一个 应用专用密码(超出此答案的范围)。密码是AC_PASSWORD
    • 钥匙串项需要一个通过altool@keychain 参数引用的名称。我们称之为ITEM_NAME

    在下面的说明中,将AC_USERNAMEAC_PASSWORDITEM_NAME 替换为您需要的值。不要逐字输入这些名称。

    现在:

    1. 在您的钥匙串中创建一个通用密码。
      • 您可以通过Keychain Access.app 文件> 新密码项... 来完成。在 Keychain Item Name 中,输入您想要的 ITEM_NAME 名称,Account Name 是您的 AC_USERNAMEAC_PASSWORD 进入 密码 字段。
      • 或者你可以通过命令行:security add-generic-password -a "AC_USERNAME" -w "AC_PASSWORD" -s "ITEM_NAME"
    2. altool 的参数中,您现在传递 -u AC_USERNAME -p "@keychain:ITEM_NAME" 以使其从钥匙串中获取密码。
    3. 第一次运行altool 时,您会看到一个安全确认对话框,询问您是否允许altool 读取密码。输入您的钥匙串密码并点击Always allow

    要防止出现安全确认对话框,请单击Always allow 或修改相应的钥匙串条目。像这样工作:

    • 通过打开 shell 并输入 xcrun -find altool 来定位到 altool 的路径。
    • 在使用security add-generic-password 命令创建密码时,要么将此路径用作参数-T <path>,要么:
      • 打开Keychain Access.app
      • 选择密码条目,选择菜单File > Get Info(或按Cmd+I或点击图标)。
      • 在此对话框中,选择Access Control 选项卡并按下+ 按钮。将打开一个文件选择对话框。
      • 打开 Finder 并选择菜单 Go > Go to Folder… 并将路径粘贴到 altool(目录部分,没有 altool 本身,例如 /Applications/Xcode.app/Contents/Developer/usr/bin/)。
      • altool拖到Keychain Access的打开面板,然后按下Add按钮。

    【讨论】:

    • 可以避免对话框询问钥匙串密码吗? (第 3 步)我想自动化流程
    • @RuLoViC:请参阅我的编辑以了解它应该如何工作的详细信息。
    • 我需要使用命令行来实现,因为它是自动构建的一部分。这可能吗?
    • “实现”是指哪一部分?在没有安全对话框的情况下使用altool?这就是我的编辑内容。
    • a) 你错过了将-T <path> 传递给security 的部分。 b) 如果您在自动构建期间确实生成了钥匙串条目,那么您必须已经拥有明文密码,并且应该完全跳过钥匙串。只需使用-p <myrawpassword> 而不是-p @keychain:<keychainitemname> 将密码传递给altool
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多