文章目录
  1. 1. 前言
  2. 2. 上传问题
    1. 2.1. 代理方法
    2. 2.2. DNS 方法
  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

DNS 方法


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

contentdelivery.itunes.apple.com 服务 IP 地址(支持 HTTPS,交付传输工具:DAV、Aspera 或 Signiant 等):

1
2
3
17.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
3
17.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
3
17.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 )
文章目录
  1. 1. 前言
  2. 2. 上传问题
    1. 2.1. 代理方法
    2. 2.2. DNS 方法
  3. 3. 参考资料
  4. 4. 文档信息