返回信息流一楼一楼容我慢慢道来
动态更新这事很多公司都探讨过。。
先抛开 facebook那套react-native 或者 phonegap那套整个app用js写的模式 也不是cocos2dx+lua 那一套用lua写app的模式
这里只讨论。。已经用oc代码写好并且发版发出去了的app如何动态更新(说句不好意思的话,其实主要是bug hotfix)
目前ios上已经有一些方案了(怎么实现的后面会略微提及,但有兴趣的愿意深入交流的欢迎单聊哈)
以lua为主的wax框架
非常早,至少在iphone5s出来前就已经存在了,那会还没64位,一个老外写的,不过很久很久作者都没维护了包括后来出64位也没适配。借助luac这套开源C库去解释运行lua脚本,桥接OC运行时实现改oc代码
最早大众点评的一位大神改进了一点wax,然后用于修复ios因为审核漫长,无法立刻修复的bug
慢慢的很多公司都开始尝试使用wax,自己进行修改,适配64位简单的投入使用,不过不支持gcd不支持block等原因,还没见到很棒的git,或者各公司都在自己闷头用,闷头扩展,并没开源
大概一个月前,alibaba 在git上完全开源了他们续写的wax,增加了超多的功能,支持gcd,block,支持了lua断点调试,还支持了批量ios底层c库的批量导入 tolua++
好吧 题外话,今天这恶心的事其实和 lua 和 wax 不相关
以js为主的jspatch框架
大概半年前git上开源了一套借助js动态更新的方案,和wax相比,核心原理是一样的,只不过借助的不是luac这个C库去解释运行lua,而是借助苹果在ios7开放的javascriptcore,来解释运行js代码,桥接oc的运行时来实现类似的功能
和最初的lua-wax不同,jspatch在一开始就支持了gcd 断点调试等,并且对gcd,block等做了很好的扩展(断点调试得益于苹果的safari支持),并且提供了丰富的Cfunction 扩展接口,有需要可以很方便自定义扩展
整个原理 我就不细解释了
oc内部有个叫runtime的东西,类似于java反射,可以很轻松的修改已经编译好的函数,所以无论是lua 和 js ,都是借助一定的脚本语言,解释了一下,经过封装桥接框架,能在js或者lua里面调用到这些反射的东西,从而实现修改,已经写好的oc代码
这里面的细节 以及runtime的使用非常精妙,wax由于涉及到luac这个开源lua运行解释库,纯c,可能还不太好看好学(ps其实是我当初看不下去了啦,就算oc桥接那部分也没细看进去)
这个jspatch因为接住的是苹果官方的js解释器,文档以及使用上其实相当的广泛和好用,所以jspatch的框架源码相当的简洁精
炼,只有1000来行,但里面对runtime的使用,对各种通用函数,泛用函数,数值,对象,指针的泛用传参等等的设计上,特别的精妙,真的
恶心的事情 发生在第二楼
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #27098同步于 2015/11/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
挂一件今天看到的技术圈让人恶心的事情iOS
apocalypse
2015/11/18镜像同步26 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
jspatch是 微信团队的一个大神搞的
在git上有大神详细的源码,甚至git上的wiki 把每一个原理上面的细节,以及扩展使用写的非常详细,光wiki 就大概10+个link 每个wiki都很长很细致
就在最近1个月
qq空间终端开发团队发出来了他们的TPatch http://zhuanlan.zhihu.com/magilu/20288657
这个是连接。。里面的内容看了后 真的是有点恶心。。。
5.和其他方案对比
waxPatch: 是使用Lua+Wax打补丁的方案,App需要集成Lua解释器和Wax框架(接近1M)。不过waxPatch对Block不太完善,多线程补丁也可能有问题,Wax也已经两年没人维护。相比之下TPatch更加轻量,对安装包影响仅200K,功能也更加强大。
JSPatch: 同样使用JS来打补丁,和TPatch终端组件核心原理是相似的。不过JSPatch在实际的海量产品中运用还有不少问题没解决,比如Block传递、多线程Crash等问题,TPatch解决了这些问题,更加稳定,并且支持异步机制、动态回滚等优化特性。
第一 早在他们出来之前wax早就被ali团队进行了相当牛逼的超大功能扩展和维护,人家阿里团队没有舔着脸换个名字,不开源,光可劲的吹牛逼
第二 拿自己跟一个 早就开源接近半年的项目,口口声声说我们的思路一样?但是这优化的好,那优化的好,然后你不开源?你不开源但你说你跟人家恰巧想到一块去了,然后换个名字重新发布? tmlgbd借着这个吹牛逼 部门内诞生了不少高工拿了不少股票吧?这到底是自己吹牛逼发布的TPatch啊?还是 优化了Jspatch把人家贬了一通,然后还换了个名字,不开源只顾吹牛逼?
说吹牛逼 这个说得不对,jspatch作者说 他们当时也找他询问里面的实现细节,以及可能存在哪些问题,交流怎样修改,实际上他们是做了贡献的
我只是觉得
拿不开源的东西,和开源的东西比吹牛逼。。。。这逼装的真是有点过了
没错 这样做一点错没有 qq空间真棒 欢呼
PS:一家之言 我也不一定知道事情的原貌...充满了个人看法的感情色彩...
哎 觉得我不对的轻点喷
【 在 icyfox 的大作中提到: 】
: iOS技术不懂,我就是想问问,这一个公司里做两个工具竞争,想啥呢?
可能都不涉及跨部门
单是qq空间内部 为了升迁升级,吹牛逼,忽悠好了mananger 吹自己牛逼。。。
【 在 icyfox 的大作中提到: 】
: iOS技术不懂,我就是想问问,这一个公司里做两个工具竞争,想啥呢?
就跟我厂 同质类产品线都很多 互相竞争。。。百度阅读 百度文学。。。。实际上都是电子书。。完全是TM2个部门 还八竿子打不着
...还是有钱
【 在 apocalypse (鱼雷粉丝团の团长|味精fan彩英) 的大作中提到: 】
: 就跟我厂 同质类产品线都很多 互相竞争。。。百度阅读 百度文学。。。。实际上都是电子书。。完全是TM2个部门 还八竿子打不着
也就是他们没法证明不是fork了JSPatch,然后做出来的东西..
【 在 apocalypse (鱼雷粉丝团の团长|味精fan彩英) 的大作中提到: 】
: 他们确实优化了 这点我写了。。
: 这牛逼装的有点过了