pod二进制详细步骤
使用步骤流程
这个流程适用于所有符合条件的工程 包括主工程 或者 能独立运行的pod私有库
源码地址:
git@git.xxx.cc:native/XXSpecs.git
二进制私有源地址:
git@git.xxx.cc:XXX_all_lib/XXBinarySpecs.git
二进制服务器地址:
http://10.254.12.244:9090/frameworks/%s/%s/zip (打包机配置的环境)
一.环境配置
二进制服务器搭建
1.mongodb
安装mongodb
当创建/data/db 可能会遇到权限问题,直接手动在该目录下新建data和db文件加解决
启动monogo
sudo mongod --dbpath=/Users/xxx/data/db(这个路径为数据库存储的目录,你在哪里创建就指向哪里) 来启动mongod
开启 node.js 服务
开启 node.js 服务,保证mongo服务已经开启(最终保存静态库资源)
1.进入binary-server 目录 执行npm install 成功后 npm start 启动服务器(app.js 为入口文件,可以设置ip地址和端口号)
2.如果遇到端口被占用就先关闭占用的端口
3.再次启动,打开浏览器访问对应端口地址,验证是否成功开启,页面访问正常为启动成功
2.创建一个二进制私有源
主要保存二进制资源的版本信息和对应的资源地址 (如zip包的获取地址)
本地私有源
私有源json数据,里边对应私有源的静态库zip下载地址和一些信息
3.安装打包插件
sudo gem install cocoapods-imy-bin
4.工程需要的一些配置文件
目前为了简化流程通过主工程制作,最优的情况应该是 在每个pod库里边这样配置,但是由于目前大部分pod库不能独立编译,所以此插件是支持只 要主工程通过podspec生成 依赖模块,就可以生成podspec里边所有依赖的二进制文件
(1)BinArchive.json
为制作二进制的白名单配置,可以忽略那些库不制作白名单,或者那些库不支持也可以放进去
(2)podfile_local
此文件只是改插件为了区分本地依赖的库,实际情况可以不用
声明插件
plugin 'cocoapods-imy-bin'
使用二进制
use_binaries!
设置使用源码的库白名单(可选)
set_use_source_pods
(3)主工程.podspec
哪些需要打成二进制的库,就添加进去,真实情况生成二进制最好一个一个打,因为多个同时生成可能会出错,具体需要看错误信息,以下为目前 能制作二进制的库文件
二.开始使用
1.添加私有库到本地
pod repo add xxBinarySpecs https://git.xxBinarySpecs.git
2.配置打包变量
如果是m1 电脑 pod 命令 需要加上arch -x86_64
(arch -x86_64)pod bin init
-
配置私有库地址
-
配置二进制私有源地址
-
配置二进制服务器地址
-
配置打包二进制的格式 目前就验证了zip,其他格式未验证
3.开始制作二进制
注意项目根目录的homework.spec文件为需要生成二进制的库,最好一个一个打,因为把所有的库同时打会出现依赖问题,不好查找原因,此外某些 库最好指定版本号,不然生成的二进制对应不上工程podfile指定的版本
(1)(arch -x86_64)pod bin auto --all-make
(2)最终会自动编译完成转换成zip,同时生成对应版本的spec文件上传到二进制私有源和二进制服务器
(3)同步二进制到工程中
把xxx.spec中的注释的库都放开,目前测试发现如果不放开可能有些库同步不过来(此步骤可选)
需要update 不然二进制库更新不过来
(arch -x86_64)pod bin update --no-repo-update
(4)最终如下生成.a
三.结果对比
目前只是把基础库和第三方库大部分库生成了.a ,业务库由于依赖过多,加上不能独立编译,因此目前无法生成
通过对比,编译耗时优化了20s左右(之前测试是190s)
TODO:
此插件目前也存在一些问题,可能使用过程会遇到一些问题,大部分在pod bin auto 的时候出现,具体问题需要看具体原因了。 此库的源码默认应该安装在目录 /Library/Ruby/Gems/2.6.0/gems/cocoapods-imy-bin-0.3.1.3 有熟悉ruby的可以看看具体实现。
问题list
1.不支持spec声明FrameWork ,lipo合并静态库不支持FrameWork会出现问题
2.遇到执行pod bin auto 生成.a 出现搜索源码spec错误,如源码tag版本过多,超出搜索限制 json被截取导致出错
3.遇到编译错误就搜索 关键字 1 error 看看是否是依赖某些库没有声明打成二进制,如果有就在xxx.podspec 里边添加对应库的依赖,前提 是此库支持打成二进制