文章目录
  1. 1. 前言
  2. 2. 问题
  3. 3. 参考资料
  4. 4. 文档信息

前言


当需要将应用包上传至 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
3
DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS="-t HTTP" fastlane beta --verbose

fastlane beta --verbose

当通过代理还是交付失败,比如:提示连接 contentdelivery01.itunes.apple.com(contentdelivery01…contentdelivery10) 超时等,那么就需要手动判断一下服务是否正常(猜测可能与 DNS 服务有关)。由于 contentdelivery 服务地处美国(美国 ip地址),所以在通信的时候可能会受到各种因素的影响。这就需要判断当前所处网络可通过哪些 IP 能够进行正常通信。

contentdelivery.itunes.apple.com 服务 IP 地址(支持 HTTPS* 和 DAV):

1
2
3
4
5
6
7
17.152.19.127
17.154.65.56
17.110.232.68
17.56.0.129
17.56.10.8
17.56.138.14
17.56.10.18

itmsdav.apple.com 服务 IP 地址(仅支持 DAV):

1
2
3
4
5
6
7
17.152.19.125
17.154.65.55
17.110.232.6
17.56.0.130
17.56.10.14
17.56.138.14
17.56.10.18

首先,需要借助 hosts 文件(可通过 sudo vi /etc/hosts 命令编辑文件),将域名与 IP 地址直接进行绑定,由于我遇到是 contentdelivery01.itunes.apple.com 服务连接超时,索性就拿它来举例说明(以后可能是 contentdelivery02或contentdelivery10 或其他服务,大家要举一反三哦):

1
2
3
4
5
6
7
17.110.232.68	contentdelivery01.itunes.apple.com
17.56.0.129 contentdelivery01.itunes.apple.com
17.56.10.8 contentdelivery01.itunes.apple.com
17.56.138.14 contentdelivery01.itunes.apple.com
17.56.10.18 contentdelivery01.itunes.apple.com
17.152.19.127 contentdelivery01.itunes.apple.com
17.154.65.56 contentdelivery01.itunes.apple.com

然后,需要进行测试访问,找出可通信的 IP 地址。由于我访问 https://contentdelivery.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
3
17.110.232.68	contentdelivery01.itunes.apple.com
17.56.138.14 contentdelivery01.itunes.apple.com
17.56.10.8 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

小知识:
缓存路径:/Users/bwjfyf/Library/Caches/com.apple.amp.itmstransporter

参考资料


文档信息


  • 版权声明:自由转载-保持署名-非商用-非衍生 ( CC BY-NC-ND 4.0 )
文章目录
  1. 1. 前言
  2. 2. 问题
  3. 3. 参考资料
  4. 4. 文档信息