使用 api 密钥时的 Apple Application Loader altool 问题

Posted

技术标签:

【中文标题】使用 api 密钥时的 Apple Application Loader altool 问题【英文标题】:Apple Application Loader altool issue when using api key 【发布时间】:2020-09-02 06:48:40 【问题描述】:

我目前正在尝试使用 ALTool 将我的应用程序 IPA 作为构建脚本的一部分上传到 App Store Connect。 这些是我正在使用的命令:

xcrun altool --validate-app -f my-ipa-file.ipa -t ios --apiKey "MYAPIKEY" --apiIssuer "MYISSUERID"
xcrun altool --upload-app -f my-ipa-file.ipa -t ios --apiKey "MYAPIKEY" --apiIssuer "MYISSUERID"

我的私钥 (p8) 位于

./private_keys/AuthKey_MYAPIKEY.p8

根据 altool --help 命令,该工具将在以下目录中(按顺序)查找名为 AuthKey_.p8 的 p8 文件:

 ./private_keys
 ~/private_keys
 ~/.private_keys
 ~/.appstoreconnect/private_keys

考虑到 p8 文件位于该列表的第一个文件夹中,这应该可以工作。 对于 --validate-app 调用,它确实有效。调用 App Store Connect,应用验证,如果 App Store Connect 出现任何错误,它们会按预期返回。

但是,由于某种原因,--upload-app 命令总是返回相同的错误:

2020-09-01 14:24:40.934 altool[28265:119010] * Error: Error uploading 'my-ipa-file.ipa'.
2020-09-01 14:24:40.934 altool[28265:119010] * Error: code -18000 (Could not locate the private key file: AuthKey_MYAPIKEY.p8)

由于某种原因,似乎 --upload-app 没有正确加载 ./private_keys/ 中的 p8 文件,而 --validate-app 可以。

将 p8 文件放在其他 3 个文件夹之一(~/private_keys 等)对于验证和上传都是一种临时解决方法。但我更喜欢使用 ./private_keys,因为我的构建脚本如何将文件注入构建过程。

这是 altool 中的错误还是我遗漏了什么?

【问题讨论】:

【参考方案1】:

这可能是一个错误。

上传应用时,altool 似乎在后台调用iTMSTransporter 来进行实际上传。 后者在运行前会更改当前目录,因此当它在当前目录中查找./private_keys/AuthKey_MYAPIKEY.p8 时,会检查错误的位置。

/Applications/Xcode.app/Contents/SharedFrameworks/ContentDeliveryServices.framework/itms/bin/iTMSTransporter 中查看cd

我猜altool 在验证应用程序时不会调用iTMSTransporter

【讨论】:

我已设法与 Apple 支持确认这是一个错误。目前,Apple 建议使用其他 3 个文档文件夹。 这已在 XCode 13.1 中得到修复! @LeonLucardie 我刚刚在更新到 XCode 13.1 后开始出现错误。我正在使用 GitHub Action 运行 Altool,有什么想法为什么我会突然看到这个错误? @foamy 您是否设法通过 Github Actions 找到 XCode 13.1 问题的根源?我也遇到了麻烦,似乎在任何地方都找不到有关它的文档 @Miiie 据我记得,我决定直接在我的 Action 中运行该命令,而不是使用另一个 Action,否则会失败。一旦我直接在我的 Action 中执行了 altool,它就起作用了

以上是关于使用 api 密钥时的 Apple Application Loader altool 问题的主要内容,如果未能解决你的问题,请参考以下文章

使用places api键时的空白地图

Azure:使用存储模拟器时的帐户名称和访问密钥是啥?

重复密钥更新时的 PDO 插入

Apple 开发中心的证书、标识符和配置文件部分中的“密钥”是啥

多个用户同时读取密钥时的 web.config 问题

如何在 NativeScript 中使用原生 API?