Xcode11 Application Loader altool 打包提審 authentication with the app store
情景
最近打包上傳提審中發(fā)現(xiàn)一直卡在 authentication with the app store中,各種辦法試了沒什么效果后試試升級最新的Xcode11,結(jié)果不升級倒好,一升級發(fā)現(xiàn)蘋果把Application Loader給刪除了,除了代碼的archive打包上傳,另外給出的解決方案是用altool工具上傳,于是記錄下如何使用altool上傳ipa包.
解決問題
1 首先看看你的電腦是否支持這個工具,在終端中輸入
$ xcrun altool
如果系統(tǒng)反饋下圖這樣,那么你電腦是支持的,如果沒有反饋請自行搜索如何安裝altool~
圖1.反饋截圖

2 altool只是一個上傳工具,而非打包工具,就跟Application Loader的定位是一樣的,所以需要你用archive打包并導(dǎo)出(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>}
但當(dāng)你憨憨的在命令行里面輸入
$ xcrun altool --validate-app -f 包的絕對路徑 -t ios -u 你的蘋果賬號 -p 你賬號對應(yīng)的密碼
并回車發(fā)現(xiàn),咦報錯了,錯誤原因如下:
"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.}"
這個的大意就是說你的我們現(xiàn)在采用了新的驗證方式,不是你輸入的密碼不對,而是你需要用上面命令中的--apiKey --apiIssuer ,其實你如果用過Application Loader就能想明白為什么非要用這兩者了,因為Application Loader沒法做二次驗證所以,Application Loader需要的密碼是你自己登陸賬號創(chuàng)建的,而你登陸賬號相當(dāng)于經(jīng)過了二次驗證,同理altool本身是沒法二次驗證的,所以他需要你去創(chuàng)建一套密鑰來驗證你的身份,那么這個在哪里創(chuàng)建呢?答案是在app store connect 里面"用戶和訪問"->密鑰->App Store Connect API,如下圖所示

其中藍(lán)色框體框柱的是秘鑰ID,對應(yīng)的文件就是apiKey文件,有幾點需要注意
- 生成時會讓你選擇訪問權(quán)限,請盡量給與最高權(quán)限-管理
- 這個文件只能下載一次,所以下載后請妥善保存.如果丟了那就只能刪除重新生成一個.
- 另外該文件是與紅框內(nèi)的apiIssuer所對應(yīng)
- 盡量不要更改文件名,否則后面在altool中使用時會比較麻煩
OK,現(xiàn)在我們有了--apiKey 以及 --apiIssuer再次執(zhí)行命令發(fā)現(xiàn),又報錯了
......a private key file with the name of 'AuthKey_<api_key>.p8': './private_keys', '~/private_keys', '~/.private_keys', and '~/.appstoreconnect/private_keys'......
這是啥意思呢,其實就是系統(tǒng)在根目錄下找不到你的apiKey放哪了,所以這個時候就需要一件基礎(chǔ)的linux命令,來把這個文件放到根目錄下.
4 根據(jù)提示,首先在根目錄下創(chuàng)建對應(yīng)名稱的文件夾
$ cd ~
$ mk dir .private_keys
#這個時候就在你的根目錄下生產(chǎn)了一個名叫private_keys隱藏文件夾
$ ls -la
#使用這個命令你就可以看到你根目錄下所有的文件,包括剛剛創(chuàng)建的.private_keys
$ cd .private_keys/
$ pwd
#進(jìn)入這個文件夾,并用pwd打印文件夾路徑,記錄這個路徑后面有用
接下來通過以下命令
$ cd 文件夾
來進(jìn)入你存放apiKey所在的文件夾層級,
$ mv apiKey文件全面 .private_keys文件夾的絕對路徑(就是上面讓你打印那個)
OK,到這一步就把你的文件放到了該放的地方
5 執(zhí)行命令
$ xcrun altool --validate-app -f 包的絕對路徑 -t ios -u 你的蘋果賬號 --apiKey 密鑰的ID --apiIssuer Issuer ID
然后等待,如果返回如下圖所示
那就是通過了驗證了,尤其是紅色框體里的話.接下來執(zhí)行上傳命令
$ xcrun altool --upload-app -f 包的絕對路徑 -t ios -u 你的蘋果賬號 --apiKey 密鑰的ID --apiIssuer Issuer ID
執(zhí)行完上傳命令耐心等待后,如果沒有什么error信息那就是上傳成功了,這個時候去App Store Connect中完成你需要填寫的信息就可以提審了.
一點小tips:
- altool這種上傳方法最大好處是每次你失敗后錯誤信息都會告訴你錯哪了,所以每次看到錯誤信息可以翻譯過來認(rèn)真讀下,相信會對你有所啟示~
- 如果你嘗試了各種上傳方法還是沒有效果,最后試試用手機(jī)4G信號開熱點給電腦共享.
- 最后,如有錯誤,懇請斧正.