进阶-pod实战
转发 请添加原作者地址 谢谢
转发 请添加原作者地址 谢谢
转发 请添加原作者地址 谢谢
组建场景
- 公司项目使用微信IM 的Mars(C++写的)静态库。
- 数据传输使用了Google的protobuf库
- 公司提供协议文件是 MRC文件。
所以 这个私有库 创建涉及到添加静态库、添加C++配置、设置MRC文件。
step一、
833DC211-B573-4482-9C3C-F6FD78ED8C44.pngstep 二、
使用git仓库地址clone到本地目录下
使用命令行 clone 或者sourceTre
step 三、
使用git命令创建组建项目(在本地仓库下)
pod lib create XBMarsSDK
4CFC098A-BB7B-4CD0-9764-146E8C4996BD.png
生成如下工程结构
step四、
在Classes文件下拖入需要的类文件
image.png因为,IM协议是MRC的类文件所以单独放到了ProtoBuffile,ARC类文件放到Arc文件中,方便配置 .podspec文件,因为 ARC文件需要单独设置。
Framework中存放需要的三方库,此处为 Mars.framework库
step五、
在Example文件下执行 命令 $ pod install
结果:
一下处理各种编译错误 通过修改.podspec和podfile来配置项目
1. 找不到mars文件
image.png这是因为 私有库找不到mars。需要在.podspec文件中配置
- 在.podspec文件中 添加
s.vendored_frameworks = 'XBMarsSDK/Framework/mars.framework' //****指定三方库的位置
- 执行pod install 并且编译 项目, 编译不通过 报一下错误
2. 缺少protobuf库
image.png因为私有库 依赖 protobuf
- 在****.podspec文件中 添加依赖关系**
s.dependency 'Protobuf'**
- 执行pod install 并且编译 项目**
3 .Could no build module ‘Protobuf’ (特别注意)
image.png原因: pod lib create <> 命令创建时,podfile文件默认加上了#use_frameworks!
它的意思是默认使用动态库,而protoBuf使用c++会有冲突是静态库。主要用在swift语言中,因为swift没有静态库只有动态库。与静态库冲突
Podfile文件中加入“use_frameworks!”表示打包成framework动态库(ios8之前是静态库),如果没有这个配置,则最终打包成.a 静态库**
解决:删除podfile中的#use_frameworks!
4.执行pod install 并且编译 项目
IM协议文件是MRC所以编译报错
image.png
原因:因为协议文件是MRC文件,需要添加-fno-objc-arc
解决: 在.podspec文件中 添加
//指定Arc文件下全是ARC类,其他类全是MRC,会被标记-fno-objc-arc
s.requires_arc = 'XBMarsSDK/Classes/Arc/**/*'
执行pod install 并且编译 项目
5 .配置库支持C++
image.png解决:spec文件中添加
s.user_target_xcconfig = {'OTHER_LDFLAGS' =>** **[****'-lc++'****]****} //** **这会影响 引入此pod的整个工程**
结果如下图
执行pod install 并且编译 项目
6. 没有添加mars 所依赖的 系统库
image.png原因: 缺少mars需要的系统库
解决::
- 配置podspec文件,添加依赖系统库
s.libraries = 'z','resolv.9' //设置静态库
s.frameworks = 'CoreTelephony','SystemConfiguration','CoreGraphics' //动态库
- 执行pod install 并且编译 项目
项目终于编译通过
step 六、
经过各种配置之后项目可以运行,基本的mars配置 已经完成
此时 我们需要在example项目中运行,测试,直至没有问题,发布私有库
此时 我们需要在example项目中运行,测试,直至没有问题,发布私有库
此时 我们需要在example项目中运行,测试,直至没有问题,发布私有库
step 七、
代码提交到远程仓库
关键:并且 打 tag提交到远程仓库 0.1.0和podspec文件版本一致
step 八、验证私有库 .podspec文件有无问题
$pod lib lint //检验本地pod
$pod spec lint //检验远程pod
// 选用参数=
--allow-warnings //用它忽略警告
--verbose //打印执行过程详细信息
--use-libraries //如果使用了静态库 需要使用
--sources=https://github.com/CocoaPods/Specs //如果库依赖了三方的pod库需要设置,可以设置私有库
验证pod库命令
- 验证本地pod
$ pod lib lint --use-libraries --allow-warnings
结果:XBMarsSDK passed validation. //验证通过
*校验spec文件
$pod spec lint --use-libraries --allow-warnings
结果:XBMarsSDK.podspec passed validation. //验证通过
- 共有库需要注册trunk
$pod trunk register email.@[163.com](http://163.com) ‘name’ --verbose
邮箱会收到邮件验证,验证之后在终端
**$pod trunk me**
*推送到远程git
//第一种
**$pod trunk push XBMarsSDK.podspec //****这是公共库命令行**
//第二种
**$pod repo push ios_specs XBMarsSDK.podspec** **//这是私有库命令行**
//执行
$pod trunk push XBMarsSDK.podspec --verbose --use-libraries --allow-warnings
注意如不加 —use-libraries --allow-warnings会有问题
附加:
pod search podName如果没有找到 删除cocoapods缓存
$ rm ~/Library/Caches/CocoaPods/search_index.json
$ pod setup
$pod cache list //列出本地缓存三方库
$pod cache clean AAA //清理
//更新本地repo
git repo update