Arclin

Advocate Technology. Enjoy Technology.

0%

Application Loader / Fastlane pilot 通过代理上传方案

Application Loader / Fastlane pilot 通过代理上传方案

需求分析

为了避免苹果审核马甲包情况, 我们需要通过其他IP去上传包, 这里提供几种方案并记录踩坑过程.

问题解决思路

  1. 用Application Loader(后面简称uploader)上传包, 电脑使用SS, VPN会导致上传失败, 原因是uploader内部自带开启代理配置, 但是默认是关闭的, 所以需要修改内部代理配置, 路径是/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/itms/java/lib/net.properties, 配置如下(1086是本地ss的端口)

    1
    2
    3
    4
    5
    6
    java.net.useSystemProxies=true
    http.proxyHost=127.0.0.1
    http.proxyPort=1086
    https.proxyHost=127.0.0.1
    https.proxyPort=1086
    jdk.http.auth.tunneling.disabledSchemes=Basic
  2. 本来net.properties内是有socks代理的配置的, Shadowsocks开启socks代理后, 在配置文件中配置好ip(127.0.0.1)和端口(1086)之后测试发现无法连接到苹果服务器, 故只能选用http/https代理

    查询shadowsocks本地端口的方法, 执行lsof -iTCP -sTCP:LISTEN -n -P | grep ss-local, 就可以查到

  3. 现在问题在于怎么将socks代理转成http/https代理, 通过查阅资料得知可以通过安装privoxy解决, 安装之后配置/usr/local/etc/privoxy/config文件, 把forward-socks5t那行注释掉, 加上本地socks ip和端口, 就像下面那段一样, 然后把listen-address 127.0.0.1:8118 改成 listen-address 0.0.0.0:8118就可以实现给局域网内共享你的代理.

    1
    2
    3
    4
    5
    forward           /               127.0.0.1:1086 .
    forward-socks4 / 127.0.0.1:1086 .
    forward-socks4a / 127.0.0.1:1086 .
    forward-socks5 / 127.0.0.1:1086 .
    forward-socks5t / 127.0.0.1:1086 .
  4. 打开系统偏好设置-网络-高级-代理, 把网页代理和安全网页代理勾上, 填上ip 127.0.0.1 端口 8118 , 就可以了. 这里的8118是刚刚说到的listen-address 0.0.0.0:8118里面的端口号, 要改也可以改, 记得同步就行.

校验

  1. 校验privoxy是否代理成功可以通过浏览器访问http://config.privoxy.org/这个网址就能看到成功与否了

  2. 执行netstat -an | grep 8118 查看8188是否全局监听着, 如果是就会看到
    tcp4 0 0 *.8118 *.* LISTEN 执行ps aux | grep privoxy, 则可以看到privoxy进程是否正在运行中. 可以通过sudo /Applications/Privoxy/stopPrivoxy.sh停止privoxysudo /Applications/Privoxy/startPrivoxy.sh启动privoxy

  3. 浏览器访问https://ip.cn,就可以得知网页代理是否成功了

  4. fastlane上传包实际上是调用了/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool, 也就是Xcode自带的命令行工具 , uploader就不用说了, 反正殊途同归, 最后都会根据net.properties去走代理, 那么问题来了 , 如何验证命令行和桌面应用uploader走的都是代理方式呢. 很遗憾苹果并不会弄出一个界面或者打印出一行log告诉你现在是用哪个ip上传, 我现在能想到的办法是通过工具查看上传过程中的流量波动, 通过实验, 两种方式再上传过程中, ss-local进程有过较大数据上传的流量波动(会有100k/s以上的上传流量速度), 因此我判定确实是走了代理上传包的. 如果要再证据确凿的话, 只能想办法抓包查看他的信息收集了, 但是Charles抓包的原理是再开一个代理, 会造成混乱….所以这就很头疼了.

  5. 开启了网页代理之后, 影响的只是网页, 实际上只是为了验证Privoxy的可用性, 开启之后你如果在命令行中使用curl ip.cn得到的结果会是你真实网络的出网ip, 而不是你想要的代理的ip, 实际上uploaderfastlane pilot命令行是否真正走了代理, 目前我只能通过ss-local这个代理的进程查看他的上传流量去判断, 具有一定风险. 或者通过安装命令行工具proxychains, 然后执行proxychains4 fastlane pilot upload传包, 但是这种方式100%上传失败 , 原因猜想是net.properties的配置没改, proxychains怎么转发请求都没用. 所以这是不是从某种意义上证明了fastlane pilot是走net.properties配置的呢, 至少我觉得按照目前情况可以这么认为, 后续如果有想法我会进行更多实验去证明的.