优质SS/SSR/Trojan/Xray/V2Ray机场推荐 | IPLC/IEPL专线加速器梯子推荐 | 解锁奈飞Netflix/HBO/Hulu等国外流媒体
本文构建Potatso客户端最终工程文件(Xcode 10版本)以及生成的ipa包下载:
Potatso-project.zipPotatso.api.zip半年前写过一篇构建自用Shadowsocks客户端Potatso的教程“构建自己的iOS网络代理客户端”。当时除libYAML依赖下载不正常外,编译测试使用全过程都很顺利。文章投递到几个平台被数万网友围观,不少网友根据教程在构建时遇到各种问题。最初我以为是网友看教程不仔细或构建环境差异造成,没多注意。后来陆续有网友加我QQ,让我怀疑写完文章后代码有了重大更新。
终于在昨天(除夕)抽出时间,用最新版的代码构建Potatso并安装到我最新版iOS系统的iPad上。这个过程花费了几个小时,覆盖了许多网友咨询我的问题,本文中将一一给出解决方案。
如果你的
,使用
的代码,根据“构建自己的iOS网络代理客户端”中的教程可以顺利的编译和安装Potatso到
。如果你的设备升级到了最新版,或者遇到其他问题,请继续阅读本文。
为什么执着于构建自用Shadowsocks客户端?由于iOS生态的封闭性,正常情况下只能通过App Store下载应用。
。安卓、Windows、MacOS则不会有这个问题,只要安装文件存在,总是有得用。所以针对iOS设备构建自用的客户端很有必要,尤其是SS这类随时有可能下架的应用。
如果已安装,请略过此步。
;
输出为
请略过此步;否则先删除官方源再添加gems国内源:
;
。Potatso
的作者(icodesign)公开了源代码,而后由于部分人的滥用导致作者删除代码且第二版不再开源。本文使用的Potatso客户端的代码来自icodesign
及haxpor等人。构建Potatso的步骤如下:
;
;
,将第一行改成:
(使用清华的CocoaPods源),然后运行
;
;
及
、
两个子项目的
,例如本人分别改成:
、
和
;
及
、
两个子项目
中的
和
的Group:在”App Groups”中删除原有的
,新增自己的group,例如:”group.potatso.tlanyan.pp.ua”;在”Keychain Sharing”中输入自己的group ID;
函数的返回值改成自己的group id;
中找
,将”xxxx.entitlements”删除;昨天几个小时的折腾,遇到的十来个问题。下文将一一列出,并给出解决方案。构建过程中你可能会遇到不止一个错误,
。如果遇到其他问题
pod依赖未安装
安装依赖,执行命令:
执行pod install,前面一切顺利,到libYAML会出现问题:
Installing LibYAML (0.1.4)
[!] Error installing LibYAML
[!] /usr/bin/curl -f -L -o /var/folders/dj/ljst94xx47l7fn3wz4q9bwsw0000gn/T/d20180822-4467-1cotycr/file.tgz http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz –create-dirs –netrc-optional –retry 2
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
curl: (7) Failed to connect to pyyaml.org port 80: Connection refused
libYAML的官网关闭了80端口访问
编辑” /Users/你的用户名/.cocoapods/repos/master/Specs/5/b/9/LibYAML/0.1.4/LibYAML.podspec.json”文件,将”http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz”改成“https://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz”
此解决方案来自貌似
官方人员的回复,亲测可以。当然可以使用前文“构建自己的iOS网络代理客户端”中所说的网络劫持方法。使用新版代码并安装好依赖后,这应该是构建过程中最先出现的问题。
根据错误描述跟踪脚本执行流程,发现是执行预构建脚本时
环境变量的值无法获取(或被错误置为空)导致。
尝试过更改构建时生成的临时脚本文件、注入全局环境变量等,这些方法均不凑效。后来通过
发现脚本由文件
文件中的配置生成,该文件在
后被修改。解决办法很简单:还原更改。执行完
命令后,执行
,问题解决。子模块的代码未下载
初始化子模块代码,执行命令:
Apple ID过期未续费
Apple ID续费或换其他可用的ID
错误信息基本与上一条相同,只是账号换成了team ID。
team ID不在已添加的账号内
在属性页面的Team
中选择自己的账号该Bundle ID已经被其他Apple ID使用
换一个新的
Group ID已经被其他Apple ID使用
用一个新的
这个错误未截图。
Podfile文件里没有加这个库
打开Podfile,在
中添加一行:
,然后执行
。备注: 该解决方案参考Github的issue: https://github.com/haxpor/Potatso/issues/117。注意pod安装依赖后,会更改
文件,直接编译会出现第二个问题。正确操作应当如下:先备份
文件,然后执行
,成功后将文件覆盖。后续出现pod依赖更新的情况也应该按此步骤操作。Xcode版本过低,不支持iOS 12.1系统。根据官方页面,需要Xcode 10
安装Xcode 10,文件较大,根据网速需要一定时间,请耐心等待
的版本过低 使用新版的
:打开
,将
那一行改成
解决方案参考https://stackoverflow.com/questions/53038918/xcode-10-update-issue-with-alamofire-objectmapper
这个问题不清楚具体原因。怀疑是
这个库的问题,没有实现
接口。我将
改到最新的3.7.6问题亦没有解决。不懂Swift,不过感觉是
或者Proxy/RuleSet等存在问题。 注销
中的相关代码,具体是174-190和202-218行之间的代码。解决方案来自:https://github.com/haxpor/Potatso/issues/109。所有错误中,只有这个错误不是完美解决。
非nil值不应该使用
(我自己的理解,毕竟不懂Swift) 将
第65和256行的
和大括号去掉,65行修改示意:// 修改前// if let parsedObject = Mapper<Rule>().mapArray(JSONArray: rulesJSON as! [[String : Any]]){// let parsedObject = Mapper<Rule>().mapArray(JSONArray: rulesJSON as! [[String : Any]])// rules.append(contentsOf: parsedObject)//}// 修改后let parsedObject = Mapper<Rule>().mapArray(JSONArray: rulesJSON as! [[String : Any]])
rules.append(contentsOf: parsedObject)
备注:解决办法的灵感来自:https://stackoverflow.com/questions/31038759/conditional-binding-if-let-error-initializer-for-conditional-binding-must-hav。当然这个问题和Potatso无关。
具体什么忘了。如果你遇到了或者有解决方案,可留言告诉我。
虚拟机编译v2ray报错:常见错误及解决方法iPad VPN 在中国使用的完整指南v2ray ws cf详细教程及常见问题解答Shadowsocks在IPv6环境下的DNS设置指南小米手机打开开发者模式和USB调试步骤探索Clash限时主题店:购物新体验免费共享Shadowrocket美区小火箭ID,科学上网利好体验与感受v2rayng电脑版怎么用如何选择适合自己的Shadowrocket类型v2ray连不上找不到文件的解决方法Clash翻墙合法吗v2ray和Nginx共用80端口:完整配置教程科学上网 机场是什么Clash-A-Rama腾讯视频:全面了解这款动画剧集shadowsocks 混淆参数详解及配置指南跑路机场 黑名单丨持续更新丨选机场避坑指南白月光机场2024国庆节限时优惠码IPLC 专线 ss 机场推荐:MESL 机场怎么样?解锁Netfilx | Disney+ | HBO | ChatGPT | Dazn | TiktokXray透明代理(TProxy)配置教程平价机场推荐