Pod 二进制实践

183 阅读4分钟

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   (打包机配置的环境)

image.png

一.环境配置

二进制服务器搭建

1.mongodb

安装mongodb

舞入 usrlocal.png

当创建/data/db 可能会遇到权限问题,直接手动在该目录下新建data和db文件加解决

启动monogo

sudo mongod --dbpath=/Users/xxx/data/db(这个路径为数据库存储的目录,你在哪里创建就指向哪里) 来启动mongod

image.png

开启 node.js 服务

开启 node.js 服务,保证mongo服务已经开启(最终保存静态库资源)

1.进入binary-server 目录 执行npm install 成功后 npm start 启动服务器(app.js 为入口文件,可以设置ip地址和端口号)

YYModel.png

2.如果遇到端口被占用就先关闭占用的端口

binary-server - -zsh - 80x24.png

Pasted Graphic 9.png

3.再次启动,打开浏览器访问对应端口地址,验证是否成功开启,页面访问正常为启动成功

conplete 1op of this run can be found 1n.png

© localhost8081frameworks.png

2.创建一个二进制私有源

git.zuoyebang.cc/yike_all_li…

主要保存二进制资源的版本信息和对应的资源地址  (如zip包的获取地址)

本地私有源

Pasted Graphic 13.png

私有源json数据,里边对应私有源的静态库zip下载地址和一些信息

nane“Brotl1”,.png

3.安装打包插件

sudo gem install cocoapods-imy-bin

4.工程需要的一些配置文件

目前为了简化流程通过主工程制作,最优的情况应该是 在每个pod库里边这样配置,但是由于目前大部分pod库不能独立编译,所以此插件是支持只 要主工程通过podspec生成 依赖模块,就可以生成podspec里边所有依赖的二进制文件

000.png

(1)BinArchive.json

为制作二进制的白名单配置,可以忽略那些库不制作白名单,或者那些库不支持也可以放进去

archive-wnite-pod-11st 制作二週期自名筆®.png

(2)podfile_local

此文件只是改插件为了区分本地依赖的库,实际情况可以不用

声明插件

plugin 'cocoapods-imy-bin'

使用二进制

use_binaries!

设置使用源码的库白名单(可选)

set_use_source_pods

Podfilelocal.png

(3)主工程.podspec

哪些需要打成二进制的库,就添加进去,真实情况生成二进制最好一个一个打,因为多个同时生成可能会出错,具体需要看错误信息,以下为目前 能制作二进制的库文件

image.png

二.开始使用

1.添加私有库到本地

pod repo add xxBinarySpecs  https://git.xxBinarySpecs.git

2.配置打包变量

如果是m1 电脑 pod 命令 需要加上arch -x86_64

(arch -x86_64)pod bin init
  1.  配置私有库地址

  2.  配置二进制私有源地址

  3.  配置二进制服务器地址

  4.  配置打包二进制的格式 目前就验证了zip,其他格式未验证

Pasted Graphic 19.png

3.开始制作二进制

注意项目根目录的homework.spec文件为需要生成二进制的库,最好一个一个打,因为把所有的库同时打会出现依赖问题,不好查找原因,此外某些 库最好指定版本号,不然生成的二进制对应不上工程podfile指定的版本

s.dependency.png

(1)(arch -x86_64)pod bin auto --all-make

wit. Tre priottne aiseBteere weesle.png

Pasted Graphic 22.png

Pasted Graphic 24.png

(2)最终会自动编译完成转换成zip,同时生成对应版本的spec文件上传到二进制私有源和二进制服务器

Pasted Graphic 25.png

Pasted Graphic 26.png

(3)同步二进制到工程中

 把xxx.spec中的注释的库都放开,目前测试发现如果不放开可能有些库同步不过来(此步骤可选)

 需要update 不然二进制库更新不过来

(arch -x86_64)pod bin update --no-repo-update

(4)最终如下生成.a

252.png

三.结果对比

目前只是把基础库和第三方库大部分库生成了.a ,业务库由于依赖过多,加上不能独立编译,因此目前无法生成

通过对比,编译耗时优化了20s左右(之前测试是190s)

Succeeded I 178.659s.png

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被截取导致出错

docs.github.com/cn/rest/sea…

1E FTOr.png

Pasted Graphic 30.png 3.遇到编译错误就搜索 关键字 1 error 看看是否是依赖某些库没有声明打成二进制,如果有就在xxx.podspec 里边添加对应库的依赖,前提 是此库支持打成二进制

image.png