我现在有一个需求。公司要实现iOS插件话开发(非HTML5方式)。大概的思路是,上架一个主程序,今后添加功能模块的时候,工程师负责开发framework。每次主程序启动的时候,动态从服务器下载该framework。实现应用程序远程更新,而且可以不用商店再次审核。但是目前遇到的问题是,据说这种远程下载动态库的方式,苹果是不允许的。有没有哪位知道,苹果为什么不允许,是不允许远程加载,还是不允许使用动态库。大家有什么好的建议么。多谢
业精于勤,荒于嬉;行成于思,毁于随。
如果苹果允许你通过远程下载动态库来更新 App,那审核这个步骤就形同虚设了。
可以看看 JSPatch,一个开源库桥接 Objective-C 和 JavaScript,可以变相做到动态添加修改模块。
很抱歉,我只在本地测试过,我去查询了一下,SamirChen 说的是对的,生产环境应该是不行的。请大家参考他的回答。
确实是可以通过dlopen的方式打开沙盒里面的framework,而且这种方式不要求iOS8,是另外一种比较少见的hotfix方式。
dlopen
有人实践过这种hotfix,启动时下载服务端的framework的zip包,然后解压、加载,可以成功,在苹果那也确实过得去,上海有家公司就是这么干hotfix的。
按照这种思想,确实是可以做到插件化开发的。因为相比起其他JSPatch、lua的wax这种的,都是写js、lua语言来调用OC接口,打打补丁还行,真要做功能开发会累死,而使用framework的方式具备了原生编写的优点,又有hotfix的功能,非常棒。
但是,为什么市面上很少见到这么干的呢。按道理说,苹果一般是禁止这种行为的,按照苹果的说法,如果被发现了,可能会下架(其实按照苹果的说法,lua那种也是不行的,但是从来没有听说过谁被下架了,js的方式是可以的。)。但是,你可以试试,说不定可以过去,比如,审核时不开这个功能,过审了之后再开。
我以前也想过这种方式,后来觉得风险太大,所以没这么干,毕竟是公司项目,万一下架了,我是要承担责任的。
现在苹果审核还是很快的,远程更新整个模块的话,必要性不是很大,打打补丁就够了。
如果你觉得这种插件化的开发比较好管理的话,我建议你可以使用私有pod仓库这种,把框架、基类打成单独的pod,其他人各自开发各自的模块的时候,打成各自的bundle和静态库。这样,他们的提交对你是没有影响的,你只要定时pod update一下就行。每个模块的增删也是非常方便的(如果你的app有那么大的话)。
楼主,我最近也在关注这个问题,请问你实现了这样的方式没,动态更新app?然而是怎么做到的
如果苹果允许你通过远程下载动态库来更新 App,那审核这个步骤就形同虚设了。
可以看看 JSPatch,一个开源库桥接 Objective-C 和 JavaScript,可以变相做到动态添加修改模块。
很抱歉,我只在本地测试过,我去查询了一下,SamirChen 说的是对的,生产环境应该是不行的。请大家参考他的回答。
确实是可以通过
dlopen
的方式打开沙盒里面的framework,而且这种方式不要求iOS8,是另外一种比较少见的hotfix方式。有人实践过这种hotfix,启动时下载服务端的framework的zip包,然后解压、加载,可以成功,在苹果那也确实过得去,上海有家公司就是这么干hotfix的。
按照这种思想,确实是可以做到插件化开发的。因为相比起其他JSPatch、lua的wax这种的,都是写js、lua语言来调用OC接口,打打补丁还行,真要做功能开发会累死,而使用framework的方式具备了原生编写的优点,又有hotfix的功能,非常棒。
但是,为什么市面上很少见到这么干的呢。按道理说,苹果一般是禁止这种行为的,按照苹果的说法,如果被发现了,可能会下架(其实按照苹果的说法,lua那种也是不行的,但是从来没有听说过谁被下架了,js的方式是可以的。)。但是,你可以试试,说不定可以过去,比如,审核时不开这个功能,过审了之后再开。
我以前也想过这种方式,后来觉得风险太大,所以没这么干,毕竟是公司项目,万一下架了,我是要承担责任的。
现在苹果审核还是很快的,远程更新整个模块的话,必要性不是很大,打打补丁就够了。
如果你觉得这种插件化的开发比较好管理的话,我建议你可以使用私有pod仓库这种,把框架、基类打成单独的pod,其他人各自开发各自的模块的时候,打成各自的bundle和静态库。这样,他们的提交对你是没有影响的,你只要定时pod update一下就行。每个模块的增删也是非常方便的(如果你的app有那么大的话)。
楼主,我最近也在关注这个问题,请问你实现了这样的方式没,动态更新app?然而是怎么做到的