Xcode11 或 Transporter 上传app store 一直卡在Authenticating with the App Store 的解决方案
适用于Xcode11.3.1 和Transporter.app
有时候上传iOS app 到app store 时 一直卡在Authenticating with the App Store,不管适用Xcode11 或是Transporter,等了2天一夜,都无法得到解决,就这样一直处于这个状态。
下图是使用Transporter遇到的问题:
此问题,一般是在Mac 使用某些清理工具清理后,亦或是Xcode 的组件需要更新时出现,这都要归功于Xcode 中上传ipa的组件iTMSTransporter
。不管是被Apple 移除的Application Loader 还是新成员Transporter,都要使用到iTransporter。
Mac 中iTMSTransporter的位置
如果你的mac 中安装了Transporter.app,iTMSTransporter会有三个位置存在
- iTransporter 在Xcode11 的位置,这是个可执行文件
/Applications/Xcode.app/Contents/SharedFrameworks/ContentDeliveryServices.framework/itms/bin/iTMSTransporter
- iTransporter 在Transporter 中的位置,这是个可执行文件
/Applications/Transporter.app/Contents/itms/bin/iTMSTransporter
- 缓存文件 在当前用户的Caches 目录下
~/Library/Caches/com.apple.amp.itmstransporter
此前,我尝试卸载Xcode.app,问题还是无法得到解决,根据以往的经验我猜测是iTMSTransporter出了问题,在stackoverflow找到了解决方案。
iTmstransporter
无法上传app的原因是因为iTMSTransporter
需要下载一组jar包,并缓存到~/Library/Caches/
目录下。可想而知,问题出在了缓存缓存文件。
解决方法
根据上面的分析,罪魁祸首就是~/Library/Caches/
目录下的com.apple.amp.itmstransporter
缓存文件导致iTmstransporter
无法上传ipa,我们尝试删除~/Library/Caches/com.apple.amp.itmstransporter
,然后执行(iTransporter 在Xcode11 的位置) 或者 (iTransporter 在Transporter 中的位置)的可执行文件。
在终端执行下面两步,以完成新的缓存文件下载
# 删除缓存文件
$ rm -r ~/Library/Caches/com.apple.amp.itmstransporter/
# 执行iTransporter的可执行文件(将iTMSTransporter的可执行文件拖入终端),Transporter.app 或者 Xcode.app 目录下的都可以
$ /Applications/Transporter.app/Contents/itms/bin/iTMSTransporter
一旦在终端执行完成后,重启你的Transporter.app,既可以成功上传ipa。
注意事项
目前仅限于Xcode11
在执行/Applications/Transporter.app/Contents/itms/bin/iTMSTransporter
时,可能会很慢,甚至在终端你感受不到是否正在下载。此时莫要慌,我们已经明确了执行是为了下载缓存文件,那么我们看一下~/Library/Caches/com.apple.amp.itmstransporter
这个文件夹的大小就知道正在下载的状态了,实在还不行,换成4G也是可以解决的哦。
以下是终端一直没有变化的截图,但是文件的大小却一直在变:
下载完成后的截图,总大小56.4m:
解决完成后,使用和Transporter.app 上传ipa 的速度还是很快的
参考资料
以下翻译自[stackoverflow](https://stackoverflow.com/questions/22443425/application-loader-stuck-at-authenticating-with-the-itunes-store-when-uploadin/59261475#59261475
旧的应用程序加载程序或最新的Xcode使用Java程序iTMSTransporter来处理ipa文件上载。
要正常工作,iTMSTransporter需要一组从Internet下载并缓存在本地文件夹中的jar文件。
如果你的缓存以某种方式被破坏,或者根本不存在,直接调用iTMSTransporter函数参数,比如--upload app在我们的例子中,iTMSTransporter不会警告你,也不会自己修复缓存,它只是被卡在那里,什么都不说!(不管是谁写的这个iTMSTransporter,你都需要提高你的编程意识)。
在不使用任何参数的情况下调用iTMSTransporter可以修复缓存