本文发自 http://www.binss.me/blog/compile-shadowsocks-ios-running-all-the-time/,转载请注明出处。

由于在手机上调试的应用需要连接google,因此需要科学上网。因为电脑用的方案是私有服务器的shadowsocks,所以希望在手机上也用这个。

在AppStore下载了Shadowsocks的IOS版本,其有两个功能,一个是作为科学上网的浏览器,二是作为全局代理来科学上网。第二个功能正是我需要的。

如何使用全局代理?

打开设置-无限局域网-你正在使用的热点最右边的“i”按钮-HTTP代理-选择自动,并在URL输入栏里填入:

http://127.0.0.1:8090/proxy.pac

然后其他软件就可以愉快地科学上网了~

然而由于ios的后台机制,程序进入后台最多3分钟后就把你干掉,这样我们的全局代理就断掉了。科学上网3分钟怎么够!为了实现长时间上网,我们希望shadowsocks能在后台一直存活。

作者给出了方法:

If you are an iOS developer, you can find some commented code in the source code, which keeps playing silence music in the background. Thus the app can keep running all the time. But this prevents us from getting approved on the App Store. You have to build the app for yourself, and use the app yourself.

https://github.com/shadowsocks/shadowsocks-iOS拉下源代码,找到源代码的SWBViewController.m的viewDidLoad函数的最后一行注释掉的[self play];删除注释。

然后打开shadowsocks-Info.plist文件,插入行Required background modes,在item0填入audio后保存。

注:编译shadowsocks的过程会报错说You must install Crashlytics to continue。找到shadowsocks的build phases,删除Run Script中的内容“./Crashlytics.framework/run fa65e4ab45ef1c9c69682529bee0751cd22d5d80。”

这样做的话,程序会一直播放无声的音乐,就算进入后台也还在播,这样就保证了程序不会被IOS干掉。

此方法需要有IOS开发者授权。经尝试,效果拔群。