我不是富二代,亦没有创业成功,所以在这过程中我依旧需要保持着一份稳定的工作。
我参与过小团队创业,也在大公司工作过,虽然我也会时不时骂一两句公司,但是我依旧怀着感恩的心情对待这两家公司,一个给了我从0到1的机会,一个给了我更大的视野。
技术障碍
1.文档稀缺
Apple放出这个Extension之后,并没有给出任何的教程和文档,只给出了一个简单的Demo。当时NetworkExtension也需要向Apple申请才能使用,XcodeExtension的模版需要手动下载安装。
直到今天,官方其实也是没有一份完善的文档的,好在函数注释多了不少,能帮助我们更好的了解这个框架,聊胜于无,对吧。
早期研究这个框架的人很少,我最早注意到的是@clowwindy在ShadowVPN项目中的使用。值得说明的是,我早期在官方开发者论坛以及通过ATS(AppleTechnicalSupport)获得了不少帮助。ATS确实很有用,然而一年只有两次(什么?还想咨询?再交99$)。
2.个人技术有限
当然,作为一名合格的程序员,没学过、不会并不是能阻挡前进的理由。开发Potatso的过程我愿意用『痛并快乐着』来形容。痛在你需要面对大量新的知识,面对枯燥的二进制报文,快乐在享受解决一个个未知的问题所带来的成就感。
3.技术难点
实现一个全功能的代理软件包含的技术点非常多,从底层TCP/IP栈到上层各种代理的实现,从NetworkExtensionAPI的摸索到iOSApp的编写,每一样都不是一件很简单的事,很多的知识点都是边学边做,甚至是读RFC文档。
我不能说它的实现非常难,因为至少它在现有的知识系统里是可解的,但对于大部分人来说可能也不是一件轻松的事,尤其是刚接触这个领域的人,至少一开始对我来说………
现在来看,这很难说是一个正确的决定。很多人一看,『哟,完整的app,还能挣钱,他卖45,我卖6块好了』。于是,大量的Potatsocopy开始上架。这也就算了,我开源前就已经想到了。但是真正让我看到人性恶的一面是:作为有能力编译Potatso及上架的人,我理解至少是一个接受过良好教育的人,很多上架的人连名字都不改,TodayWidget的名字还是Potatso,点击连接唤起了Potatso,甚至直接使用我服务器的API。
在开源的Potatso1中,我提供了一套基本的iOS自定义代理方案,然而遗憾的是,并没有人在真正的用其原理去做更多的事。受限于本身付费软件的属性,Potatso并没有形成开源软件应有的社区氛围,当然这一点应该是我的责任,因为这仍旧是一个敏感的领域。我有一些顾虑,无法在这方面做的更多。一言以蔽之:原理我已经告诉你了,麻烦好好思考,别当CTRL+C和CTRL+V程序员了,把掉起的节操拾起来。
在经过了长达半年的第二次开发测试之后,Potatso2于2017年4月4日清明节上架AppStore(为了祭奠死去的Potatso1)。Potatso2是99%重写的,你可以理解为一个完全新的app,在核心部分也并没有使用任何开源库。在Potatso2的设计之初就考虑到了扩展性,可以很方便的集成更多代理类型(新版加入了Socks和SocksoverTLS的支持)。
Potatso升级问题
Potatso1到Potatso2的升级过程引来了一些争议,在此我也一一解答一下。
1.作者明明公开承诺Potatso1可以免费升级到Potatso2,为什么我需要补差价?
这个锅我背。我本意是愿意让Potatso1的用户免费升级到Potatso2的,但是还是产生了一些小插曲:
我采用的是业内流行的套装(Bundle)升级方式,即单独推出一个新的套装,包含Potatso1和Potatso2,已拥有Potatso1的用户直接购买这个套装,即可免费获取Potatso2。
但是我没有想到的是(第一次使用套装升级):这个免费是有条件的。Apple会记录你购买Potatso1的价格,在购买套装上,如果之前购买价格低于套装价格,需要补差价。举个例子,如果你以12元价格购买Potatso1,而升级套装价格是40,你则需要补全28的差价,而更不幸的是,如果你是用兑换码兑换的Potatso1,Apple记录的购买价格是0。这个过程我是无法控制的,对此产生的不便以及与我承诺相左的额外支出,我只能表示抱歉。(个别用户由于无法支付的原因,向我私人购买了兑换码,我也向他们赠送了Potarso2的更新)
至于为什么现在升级套装是40的原因是:一方面你可以看到上面的价格曲线,Potatso基本长期都是在45的价格,所以40能够满足大部分用户免费升级,另一方面,在第一周上线的时候我设置的价格为30(与2的价格一致),这导致一个后果是:大部分新用户由于心理原因,会选择购买升级套装而不是Potatso2,而这不是我希望出现的,这算是我的定价失误)
2.针对问题1,为什么你不在Potatso1上直接更新,这样就没有升级套装问题了?
这是我的另一个失误。由于在Potatso1开发过程中使用第三方库不小心污染到了一些签名问题导致Potatso1是无法转让给其他账户的,一个潜在的后果就是如果将来Potatso由于不可抗力真要下架,是无法转让的。为了留条后路,我选择了重新上架。
总之,这个升级过程的麻烦主要是我的问题导致的,当然也有Apple这种奇怪的套装定价策略。更合理的是,Apple应该提供给开发者更多的选项。再次对受到影响的用户表示抱歉。
为什么要说这个?因为独立开发是一个很艰难的过程,保持一个良好的心态很重要。
这个世界很复杂,你可能会遇到各种各样的人,会有人因为你不会私信辱骂你,会有人因为你不支持某个功能辱骂你,会有人因为有bug辱骂你。幸好我是个乐观的人,不然哪还有心情写代码嘛。
最后,如果你愿意支持Potatso的未来发展,下载并使用Potatso2是最简单直接的方式。
P.S.如果您愿意给我额外的赞助,我不拒绝,欢迎私下联系我,但请不要问我能不能几万做一个App了