进阶-pod实战

作者: coderPoo | 来源:发表于2018-09-04 16:59 被阅读23次

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

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

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

    组建场景

    • 公司项目使用微信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实战

        本文链接:https://www.haomeiwen.com/subject/zfdgwftx.html