引子
如果您的应用在Podfile中使用use_frameworks指令使用大量cocoapods,则其启动时间(尤其是在main维护过程中dylib加载时间)会变得非常高。 use_frameworks指令将您的pod链接为动态框架,然后在您的应用启动过程中将它们一一加载,从而大大降低了速度。
如果您看过Apple在2016年WWDC上发表的“优化应用程序启动时间”一文(Optimizing App Startup Time),Apple建议您合并动态框架以缩短应用程序的加载时间。
所以 cocoapods插件可以做到这一点!介绍cocoapods-pod-merge(gitHub地址)
文件比较
通过比较多了 两个文件 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 文件写入
gem 'cocoapods', '1.8.1' # cocoapods版本可以按自己本地版本填写
gem 'cocoapods-pod-merge', :path => '../'
之后这个Gemfile文件就编写完成了,like this
cocoapods-pod-merge 这个插件是放在本demo 上级目录 注意这个 :path 指向。
接着编写MergeFile,这个文件格式什么的跟Podfile格式一样,只是每个group之间以end 结束作为分割。
例如下图:注意尽量不要在里边填写不必要的字符,也不报错,pod install 时候也检查不出错误。
那么MergeFile 暂时也完整填写到这里了。
接下来是 Podfile 文件填写了,例如下图
其中:path 指向的是 MergeFile 的group,当然可以另外添加其他不想加入group 的framworks。记着要多填写 一句line:plugin 'cocoapods-pod-merge'
此后大功告成:
输入 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 路由写对
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