本文发自 http://www.binss.me/blog/compile-shadowsocks-ios-with-error-sodium-description/,转载请注明出处。
近日使用shadowsocks-ios发现无法翻了,感觉是上次编译的版本太老,在此记录新版本编译的过程。
太长不看版本:
从IOS8起,作者就停止了开源版本(2.0.3)的更新,后续由于总所周知的原因更是移除了相关代码。尽管修修补补,在IOS9下勉强能跑,但是偶尔会出现无法连接到sslocal,进而无法进行代理的情况。所以,还是上Surge类应用吧,无论是功能还是稳定性上都好太多。
原项目地址:
https://github.com/shadowsocks/shadowsocks-iOS/
目前可用的版本地址:
https://github.com/binss/shadowsocks-iOS/
最后更新时间
2016.03.12
测试环境:
XCode 7.2.1
iPhone 6S 9.2.1
以下是编译过程:
-
下载代码和依赖模块
$ git clone https://github.com/shadowsocks/shadowsocks-iOS/ $ git cd 目录 $ git submodule init $ git submodule update
如果
$git submodule update
的过程报没有权限的错误,请查看目录下的.gitmodules文件,将所有链接改为https格式,如:// ... [submodule "AppProxyCap"] path = AppProxyCap url = https://github.com/freewizard/AppProxyCap.git
-
Xcode打开工程, 开始编译
错误1:
'sodium.h' file not found
解决方法:安装libsodium,建议不要傻傻的到官网下载然后自己编译(各种报错)。我选用的是CocoaPods安装法。先安装好CocoaPods(需要Ruby环境):
$ sudo gem install cocoapods $ cd /shadowsocks-ios $ pod init
修改项目下的Podfile文件为:
platform :ios, '9.2' pod 'libsodium', '~> 1.0.3'
安装libsodium:
$ pod install
注意:此后Xcode使用shadowsocks.xcworkspace 作为项目工程文件。
在project的build settings中设置头文件目录:
错误2:
Use of undeclared identifier '_description'; did you mean 'description'?
解决方法:修改_description为_description_t,并在头文件加入
@property (nonatomic, strong, readonly) NSString *description_t;
错误3:
no such file or directory ... interpose.c
解决方法:找到该目录发现里面没有内容,到https://github.com/comex/inject_and_interpose 手动下载粘入。
错误4:
you must install Crashlytics to continue.
解决方法:简单粗暴,移除下图中run script中的内容。
错误5:
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
解决方法:在shadowsocks-Info.plist中,设置App Transport Security Settings-Allow Arbitrary Loads为YES(如果没有,请新建)。
错误6:
-fembed-bitcode is not supported on versions of iOS prior to 6.0
Xcode 7 has a ENABLE_BITCODE option to embed bitcode in apps, app extensions, and frameworks. The option is turned on by default for iOS and is mandatory for watchOS projects submitted to the store. When bitcode is enabled for a target, all the objects, static libraries and user frameworks used when linking that target must contain bitcode.
解决方法:在项目的Build Setttings中,设置Enable Bitcode为No。
错误7:运行时出现`address already in use,bind error()`
非常感谢6楼童鞋提供的解决方案。
解决方法:IOS8后,1080端口被占用。代码搜索1080,将之改为其他端口。注意proxy.pac.gz中的端口也要修改(先解压,修改后用gzip压回)。
-
最后记得我们的目标:
取消掉SWBViewController.m 中 [self play]; 的注释。
1F Hao 8 years, 10 months ago 回复
你好,按照第一个步骤操作完成后,仍然是错误'sodium.h' file not found无法解决,Xcode 6.2.
2F jefby 8 years, 10 months ago 回复
楼主你好,xcode 7 & iOS 9.2编译提示ld: library not found for -lPods-libsodium,可以更新下xcode 7版本的代码吗?谢谢
3F binss MOD 8 years, 9 months ago 回复
回复 1楼的 Hao:邮件推送功能挂掉了...一直到现在才看到。请按照步骤二安装libsodium
4F binss MOD 8 years, 9 months ago 回复
回复 2楼的 jefby:楼主不是IOS开发的说...这个东西是我一年前编译的,而且由于作者的原因也不会迭代新版本了。所以我现在已经不用这个方案了。推荐Surge。
5F asdasdadasda 8 years, 8 months ago 回复
我试试能不能评论
6F asdasdadasda 8 years, 8 months ago 回复
果然不挂代理就能评论,真是太好了。楼主您好,有个问题想向您请教下,我把代码编译成功了,但是在把端口1080换成1090之后,同样是不能翻墙,不知道您是否有研究过代码部分,我渴望把他变成一个可以翻墙的版本,但一直没成功,您知道应该怎么处理这个问题吗?截图所说iOS8不支持是因为哪个模块的原因呢?是因为被废弃了吗?如果您知道的话,麻烦告诉我一声,万分感谢。
7F binss MOD 8 years, 7 months ago 回复
回复 6楼的 asdasdadasda:感谢你在邮件中提供的解决方案。已经更新文章和Github代码。
8F aaaacc 8 years, 1 month ago 回复
'AppProxyCap.h ' file not found 怎么解决呀
9F aaaacc 8 years, 1 month ago 回复
回复 7F binss:
博主。。。 'AppProxyCap.h ' file not found 怎么解决呀
10F binss MOD 8 years, 1 month ago 回复
回复 9F aaaacc:
请确保AppProxyCap目录下有文件。没有的话可以手动下载然后放到目录下 https://github.com/freewizard/AppProxyCap
11F gnefiah 8 years ago 回复
解决“retain attribute must be of object type”编译错误
参考链接: https://github.com/khallmark/AFNetworking/commit/535a6cd1cd4fa71e62ea953d548c4fa0fa6f98d8
12F kunpeng 8 years ago 回复
用这个地址的代码编译安装成功了:https://github.com/binss/shadowsocks-iOS/。没有报错,在手机上运行正常,可是就是不能翻墙,不知道为什么。
13F xiaodai 7 years, 10 months ago 回复
请问安装出现这个是怎么回事呢?[!] The dependency `libsodium (~> 1.0.3)` is not used in any concrete target.
14F alan 7 years, 10 months ago 回复
_set_config", referenced from:
+[ShadowsocksRunner reloadConfig] in ShadowsocksRunner.o ,说是不支持64位,类似这样的错误一共一个,不知道大家是怎么解决的!
15F mike 7 years, 7 months ago 回复
https://github.com/binss/shadowsocks-iOS/ 这个代码能实现翻墙了吗?(假设代理OK)
16F mike 7 years, 7 months ago 回复
https://github.com/binss/shadowsocks-iOS/ 最后能翻墙了吗
17F jason 7 years, 6 months ago 回复
所有依赖库,submodule都配置好了,然后就有Apple Mach-O Linker (ld)Error, Linker Command failed with exit code 1 并且没有任何其他的错误提示。 请问这是怎么回事呢?
18F binss MOD 7 years, 5 months ago 回复
回复 17F jason:
不好意思。这个项目分支我目前已经不再维护了。可以参考下
https://stackoverflow.com/questions/39545880/apple-mach-o-linker-ditto-error-xcode-8
19F binss MOD 7 years, 5 months ago 回复
回复 16F mike:
两年多前我测试是可以的......
20F aKer 7 years, 4 months ago 回复
你们测试现在成功吗?我测试,仅运行成功,然后填写服务器名、端口、密码等,然后右上角完成,没有然后了,,能教教之后怎么操作才能翻墙吗?另外感谢您的教程,之前也是运行不成功,看到您这配置,回头我再配置一次。
21F rain 7 years, 3 months ago 回复
回复 [20F] aKer:测试失败+1
22F run 7 years, 1 month ago 回复
测试能运行,但是不能翻墙,ss账号没问题,谁知道是怎么回事吗?
23F but 6 years, 11 months ago 回复
回复 [22F] run:你搞定了吗,能加Q1010017806,一起讨论下么
24F xxxx 6 years, 11 months ago 回复
回复 [6F] asdasdadasda:方便加QQ,详细咨询一下么,依然不能翻墙
25F super-yu 6 years, 10 months ago 回复
"_OPENSSL_add_all_algorithms_noconf", referenced from:
_config_encryption in libshadowsocks.a(encrypt.o)
26F 现在很需要 6 years, 9 months ago 回复
原来有很多人都需要这个,其实如果有 apple TV,那就更需要它了。。。。不仅仅只是一个 GUI 那么简单,还因为可以后台开一个 socks 挺方便的
27F moomoo 6 years, 4 months ago 回复
没法编译。。。
28F chuan 5 years, 11 months ago 回复
错误2:Use of undeclared identifier '_description'; did you mean 'description'?
这个加头文件,加到哪个文件中呢?
抱歉,我不是C系列开发者。
我目前就是把"_description"删掉了,看样子也能略过这个错误。
另外,你们编译的时候,没有遇到证书问题吗?我目前卡在这个地方:
Failed to create provisioning profile.
The app ID "shadowsocks" cannot be registered to your development team. Change your bundle identifier to a unique string to try again.