进阶-pod实战

转发 请添加原作者地址 谢谢

转发 请添加原作者地址 谢谢

转发 请添加原作者地址 谢谢

组建场景

  • 公司项目使用微信IM 的Mars(C++写的)静态库。
  • 数据传输使用了Google的protobuf库
  • 公司提供协议文件是 MRC文件。

所以 这个私有库 创建涉及到添加静态库、添加C++配置、设置MRC文件

step一、

833DC211-B573-4482-9C3C-F6FD78ED8C44.png

step 二、

使用git仓库地址clone到本地目录下
使用命令行 clone 或者sourceTre

step 三、

使用git命令创建组建项目(在本地仓库下)
pod lib create XBMarsSDK


4CFC098A-BB7B-4CD0-9764-146E8C4996BD.png

生成如下工程结构

image.png

image.png
image.png

step四、

在Classes文件下拖入需要的类文件

image.png

因为,IM协议是MRC的类文件所以单独放到了ProtoBuffile,ARC类文件放到Arc文件中,方便配置 .podspec文件,因为 ARC文件需要单独设置。
Framework中存放需要的三方库,此处为 Mars.framework库

step五、

在Example文件下执行 命令 $ pod install
结果:

image.png

一下处理各种编译错误 通过修改.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的整个工程**

结果如下图

image.png

执行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

你可能感兴趣的:(进阶-pod实战)