我现在有一个需求。公司要实现iOS插件话开发(非HTML5方式)。大概的思路是,上架一个主程序,今后添加功能模块的时候,工程师负责开发framework。每次主程序启动的时候,动态从服务器下载该framework。实现应用程序远程更新,而且可以不用商店再次审核。
但是目前遇到的问题是,据说这种远程下载动态库的方式,苹果是不允许的。
有没有哪位知道,苹果为什么不允许,是不允许远程加载,还是不允许使用动态库。大家有什么好的建议么。多谢
阿神2017-04-17 17:58:36
很抱歉,我只在本地測試過,我去查詢了一下,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有那麼大的話)。