Transporter 上传指南
前言
当需要将应用包上传至 App Store Connect 时,可能遇到通信失败,从而无法交互。由于 Apple 上传服务借助 Transporter 完成交付的,因此在这里记录一下与此相关的问题。
来了解一下 Transporter 是什么?
Transporter 是 Apple 基于 Java 的命令行工具,用于进行大量目录交付。您可以使用 Transporter 将预生成的内容以 Store 数据包的形式交付至 iTunes Store、Apple Books 和 App Store。
上传问题
大多数上传交付失败问题,可能与当前所处的网络有关,比如联通网络上传快,移动网络上传比较慢等。
[Transporter Error Output]: Communication error. Please use diagnostic mode to check connectivity. You need to have outbound access to TCP port 443.
[Transporter Error Output]: An exception has occurred: Connect to contentdelivery01.itunes.apple.com:443 [contentdelivery01.itunes.apple.com/17.56.10.18] failed: Operation timed out (Connection timed out)
Could not connect to Apple’s web service.
当遇到类似上面提示通信超时或连接服务失败时,可能原因有两个:
原因一:App Store Connect 服务处于维护或关闭状态,但这种情况一般很少遇到。
原因二:当前网络与 App Store Connect 通信交互失败,那么可以通过代理或其他方式进行交付。
代理方法
首先介绍一下如何通过代理进行交付,由于日常上传中使用 fastlane,所以就以此来说明。1
DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS="-t HTTP -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8001" fastlane beta --verbose
注意 -t
参数(指定传输方式)是 HTTP,为啥不是 DAV 呢?因为 HTTP 传输比 DAV 传输更快,且无需重新配置防火墙,这里可根据自己情况选择。
当不需要代理时,那么命令变为:1
2
3DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS="-t HTTP" fastlane beta --verbose
或
fastlane beta --verbose
DNS 方法
当通过代理还是交付失败,比如:提示连接 contentdelivery01.itunes.apple.com(contentdelivery01…contentdelivery10) 超时等,那么就需要手动判断一下服务是否正常(猜测可能与 DNS 服务有关)。由于 contentdelivery 服务地处美国(美国 IP 地址),所以在通信的时候可能会受到各种因素的影响。这就需要判断当前所处网络可通过哪些 IP 能够进行正常通信。
contentdelivery.itunes.apple.com 服务 IP 地址(支持 HTTPS,交付传输工具:DAV、Aspera 或 Signiant 等):1
2
317.110.232.68
17.56.138.14
17.56.10.18
itmsdav.apple.com 服务 IP 地址(仅 DAV):1
17.110.232.6
上面服务对应的IP地址,可能会发生变化,可在 此页面 获得最新对应关系。
首先,需要借助 hosts 文件(可通过 sudo vi /etc/hosts
命令编辑文件),将域名与 IP 地址直接进行绑定,由于我遇到是 contentdelivery01.itunes.apple.com 服务连接超时,索性就拿它来举例说明(以后可能是 contentdelivery02、contentdelivery10 或其他服务,大家要举一反三哦):1
2
317.110.232.68 contentdelivery01.itunes.apple.com
17.56.138.14 contentdelivery01.itunes.apple.com
17.56.10.18 contentdelivery01.itunes.apple.com
然后,需要进行测试访问,找出可通信的 IP 地址。由于我访问 https://contentdelivery01.itunes.apple.com/transporter/repositories/j2se7/latest/repository.xml
服务失败,那么就以此进行测试。这里我通过 wget
命令进行访问,大家可以选择自己命令:1
2
3
4
5
6
7> wget https://contentdelivery01.itunes.apple.com/transporter/repositories/j2se7/latest/repository.xml
--2020-09-12 14:04:34-- https://contentdelivery01.itunes.apple.com/transporter/repositories/j2se7/latest/repository.xml
正在解析主机 contentdelivery01.itunes.apple.com (contentdelivery01.itunes.apple.com)... 17.56.10.8, 17.110.232.68, 17.56.138.14
正在连接 contentdelivery01.itunes.apple.com (contentdelivery01.itunes.apple.com)|17.56.10.8|:443... 失败:Connection refused。
正在连接 contentdelivery01.itunes.apple.com (contentdelivery01.itunes.apple.com)|17.110.232.68|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:236817 (231K) [text/xml]
经过多次尝试实验,终于找到可通信的 IP 地址(虽然偶尔还会超时,记录回应 200 的即可),然后将不可用的 IP 地址在 host 文件中删除,下面是当时我所处网络能够通信的IP:1
2
317.110.232.68 contentdelivery01.itunes.apple.com
17.56.138.14 contentdelivery01.itunes.apple.com
17.56.10.18 contentdelivery01.itunes.apple.com
也可以借助 iTMSTransporter 进行测试定位问题(前提是已装 Transporter ),但此方法不会显示与之通信的 IP 。1
2
3/Applications/Transporter.app/Contents/itms/bin/iTMSTransporter -m diagnostic
或 (传输方式 -t HTTP 或 -t DAV)
/Applications/Transporter.app/Contents/itms/bin/iTMSTransporter -m diagnostic -t HTTP -u [email protected] -p xxx-xxx-xxx-xxx
小知识:
iTMSTransporter 缓存路径:1
~/Library/Caches/com.apple.amp.itmstransporter
参考资料
文档信息
- 版权声明:自由转载-保持署名-非商用-非衍生 ( CC BY-NC-ND 4.0 )