iOS cocoapods merge-- 通过减少动态框架来缩短应用程序的启动时间

引子

如果您的应用在Podfile中使用use_frameworks指令使用大量cocoapods,则其启动时间(尤其是在main维护过程中dylib加载时间)会变得非常高。 use_frameworks指令将您的pod链接为动态框架,然后在您的应用启动过程中将它们一一加载,从而大大降低了速度。

如果您看过Apple在2016年WWDC上发表的“优化应用程序启动时间”一文(Optimizing App Startup Time),Apple建议您合并动态框架以缩短应用程序的加载时间。

所以 cocoapods插件可以做到这一点!介绍cocoapods-pod-merge(gitHub地址)

文件比较


普通pods配置文件列表


完整的merge配置文件列表

通过比较多了 两个文件 Gemfile, MergeFile,其中Gemfile 文件是通过ruby tools with bundler操作完配置完成的  (bundler Tools)。

cd ../PodsMergaeDemo 

gem install cocoapods-pod-merge

gem install bundler

bundle init

bundle install

此时生成一个Gemfile 的文件,文件内容截图如下:

Gemfile文件内容

接着向Gemfile 文件写入 

gem 'cocoapods', '1.8.1'     # cocoapods版本可以按自己本地版本填写

gem 'cocoapods-pod-merge', :path => '../'

之后这个Gemfile文件就编写完成了,like this

cocoapods-pod-merge 这个插件是放在本demo 上级目录 注意这个 :path 指向。

Gemfile文件完整内容

接着编写MergeFile,这个文件格式什么的跟Podfile格式一样,只是每个group之间以end 结束作为分割。

例如下图:注意尽量不要在里边填写不必要的字符,也不报错,pod install 时候也检查不出错误。

MergeFile

那么MergeFile 暂时也完整填写到这里了。

接下来是 Podfile 文件填写了,例如下图

Podfile

其中:path 指向的是 MergeFile 的group,当然可以另外添加其他不想加入group 的framworks。记着要多填写 一句line:plugin 'cocoapods-pod-merge'

此后大功告成:


complete

输入 bundle exec pod install  , pod install 这样就跟平时咱们 pod install 一样的过程了。

再回来看自己项目,文件目录如图这样,之后就可以快乐的开发了。

完整项目目录


如果您有一组彼此依赖的Pod,并且想要合并它们,请将此标志添加到该组中。

依赖修改

错误总结:1 、Could not find gem 'cocoapods-pod-merge' in source at `../`.

The source does not contain any versions of 'cocoapods-pod-merge'   这里一定要把gemMerge 路由写对

gemMerge 路由写对

2、若gem 没有 bundler,记得首先去gem install bundle 

3、控制台出现错误error而看不懂,一定要仔细回查自己所敲过的每个命令行,仔细排查哪个没有执行到。

4、执行不成功,记得把demo 中的lib ,cocoapods-pod-merge.gemspec 这两个文件拷贝到自己项目上级目录中。

使用:之前一般都是 import  AFNetworking, 现在使用group 现象 importNetworking.AFNetworking。 调用方式不用修改。


后记:小弟第一次在写文章,以前的博客都在cocoaChina,如若有问题,谢谢大家不吝赐教。

demo 地址:https://github.com/Virtue86/PodsMergeDemo

参考:https://swiftier.co/2019-10-17/announcing-cocoapods-pod-merge

https://github.com/grab/cocoapods-pod-merge

你可能感兴趣的:(iOS cocoapods merge-- 通过减少动态框架来缩短应用程序的启动时间)