Xcode11 Application Loader altool 打包提审 authentication with the app store
情景
最近打包上传提审中发现一直卡在 authentication with the app store中,各种办法试了没什么效果后试试升级最新的Xcode11,结果不升级倒好,一升级发现苹果把Application Loader给删除了,除了代码的archive打包上传,另外给出的解决方案是用altool工具上传,于是记录下如何使用altool上传ipa包.
解决问题
1 首先看看你的电脑是否支持这个工具,在终端中输入
$ xcrun altool
如果系统反馈下图这样,那么你电脑是支持的,如果没有反馈请自行搜索如何安装altool~
2 altool只是一个上传工具,而非打包工具,就跟Application Loader的定位是一样的,所以需要你用archive打包并导出(export)这个ipa包,放在桌面上.
3 其实检查/上传的命令在图1中可以看到
$ altool --validate-app -f <file> -t <platform> -u <username> {[-p <password>] | --apiKey <api_key> --apiIssuer <issuer_id>}
以及
$ altool --upload-app -f <file> -t <platform> -u <username> {[-p <password>] | --apiKey <api_key> --apiIssuer <issuer_id>}
但当你憨憨的在命令行里面输入
$ xcrun altool --validate-app -f 包的绝对路径 -t ios -u 你的苹果账号 -p 你账号对应的密码
并回车发现,咦报错了,错误原因如下:
"Error Domain=ITunesSoftwareServiceErrorDomain Code=-22020 \"We are unable to create an authentication session.\" UserInfo={NSLocalizedDescription=We are unable to create an authentication session., NSLocalizedFailureReason=Unable to validate your application.}"
这个的大意就是说你的我们现在采用了新的验证方式,不是你输入的密码不对,而是你需要用上面命令中的--apiKey --apiIssuer ,其实你如果用过Application Loader就能想明白为什么非要用这两者了,因为Application Loader没法做二次验证所以,Application Loader需要的密码是你自己登陆账号创建的,而你登陆账号相当于经过了二次验证,同理altool本身是没法二次验证的,所以他需要你去创建一套密钥来验证你的身份,那么这个在哪里创建呢?答案是在app store connect 里面"用户和访问"->密钥->App Store Connect API,如下图所示
其中蓝色框体框柱的是秘钥ID,对应的文件就是apiKey文件,有几点需要注意
- 生成时会让你选择访问权限,请尽量给与最高权限-管理
- 这个文件只能下载一次,所以下载后请妥善保存.如果丢了那就只能删除重新生成一个.
- 另外该文件是与红框内的apiIssuer所对应
- 尽量不要更改文件名,否则后面在altool中使用时会比较麻烦
OK,现在我们有了--apiKey 以及 --apiIssuer再次执行命令发现,又报错了
......a private key file with the name of 'AuthKey_<api_key>.p8': './private_keys', '~/private_keys', '~/.private_keys', and '~/.appstoreconnect/private_keys'......
这是啥意思呢,其实就是系统在根目录下找不到你的apiKey放哪了,所以这个时候就需要一件基础的linux命令,来把这个文件放到根目录下.
4 根据提示,首先在根目录下创建对应名称的文件夹
$ cd ~
$ mk dir .private_keys
#这个时候就在你的根目录下生产了一个名叫private_keys隐藏文件夹
$ ls -la
#使用这个命令你就可以看到你根目录下所有的文件,包括刚刚创建的.private_keys
$ cd .private_keys/
$ pwd
#进入这个文件夹,并用pwd打印文件夹路径,记录这个路径后面有用
接下来通过以下命令
$ cd 文件夹
来进入你存放apiKey所在的文件夹层级,
$ mv apiKey文件全面 .private_keys文件夹的绝对路径(就是上面让你打印那个)
OK,到这一步就把你的文件放到了该放的地方
5 执行命令
$ xcrun altool --validate-app -f 包的绝对路径 -t ios -u 你的苹果账号 --apiKey 密钥的ID --apiIssuer Issuer ID
然后等待,如果返回如下图所示那就是通过了验证了,尤其是红色框体里的话.接下来执行上传命令
$ xcrun altool --upload-app -f 包的绝对路径 -t ios -u 你的苹果账号 --apiKey 密钥的ID --apiIssuer Issuer ID
执行完上传命令耐心等待后,如果没有什么error信息那就是上传成功了,这个时候去App Store Connect中完成你需要填写的信息就可以提审了.
一点小tips:
- altool这种上传方法最大好处是每次你失败后错误信息都会告诉你错哪了,所以每次看到错误信息可以翻译过来认真读下,相信会对你有所启示~
- 如果你尝试了各种上传方法还是没有效果,最后试试用手机4G信号开热点给电脑共享.
- 最后,如有错误,恳请斧正.