美文网首页
CocoaPods组件化实践

CocoaPods组件化实践

作者: Frankxp | 来源:发表于2019-10-08 20:33 被阅读0次

    前言

    工程项目越来越大,团队成员越来越多的情况下,组件化是趋势,组件化好处就不细说了.
    实施组件化之前我们首要的就是组件拆分,如何拆分拆分原则不是文章重点,假定拆分完之后我们有如下

    • 开发流程中我们会有一个主工程(所谓的壳工程)MainApp
    • 业务组件:Business_a
    • 基础组件:BaseAppKit 内部依赖第三方库AFN
    • 远程索引库my_proj_spec

    MainApp依赖business_a
    Business_a依赖BaseAppKit
    BaseAppKit依赖AFN
    当然实际大型项目开发会有很多的业务组件、通用业务组件、基础组件、路由、日志等。
    接下来就开始我们简单的组件化搭建吧

    创建索引仓

    组件化之前,我们首先要理解组件化的基本流程

    pod 'SDWebImage'
    

    本质上去CocoaPods官方https://github.com/CocoaPods/Specs.git
    中去寻找对应的第三方库的.podspec文件,进而解析文件依赖源码资源等配置信息,拉进你的工程

    pod repo
    

    pod repo查看本地repo仓

    master
    - Type: git (master)
    - URL:  https://github.com/CocoaPods/Specs.git
    - Path: /Users/pengxin/.cocoapods/repos/master
    

    会在这里搜索SDWebImage的spec文件,pod setup之所以慢就是拉取官方的仓到本地,知道这个原理后,如果pod setup很慢把已经下载好的repo拖进你的电脑也是一种解决方法

    创建索引库my_proj_spec

    首先创建我们私有的远程索引仓my_proj_spec,我已在码云上已创建好git@gitee.com:xxx/my_proj_spec.git
    然后把my_proj_spec索引库添加到本地

    pod repo add my_proj_spec https://gitee.com/xxx/my_proj_spec.git
    

    添加后 我们执行下pod repo查看下



    以后组件有更新,我们本地可以更新下索引

    pod pod repo update my_proj_spec
    

    创建基础组件库BaseAppKit

    • 这里我们简单用GitHub模板来创建一个工程
    pod lib create BaseAppKit
    

    根据提示和你的需要下一步即可
    创建完后我们编辑BaseAppKit.podspec让其依赖AFN

    s.source = { :git => 'git@gitee.com:xxx/BaseAppKit.git', :tag => s.version.to_s}//这个地方不要错了
    s.dependency 'AFNetworking'
    

    BaseAppKit.podspec这个文件就是你的组件发布配置文件,将来会更新推送到远程my_proj_spec仓库对外下载更新的,具体细节展开篇幅较多了,如果不熟悉的自行谷歌、百度吧。
    我们执行pod install看下库工程是否下载依赖了AFN

    • 提交源代码并打tag
    注意这里的tag必须跟podspec中的tag一致,因为CocoaPods是通过podspec文件中的tag去找源文件的,如果tag对应不起来就会验证失败。打好tag提交远端
    git add -A && git commit -m "Release 0.1.0"
    git tag 0.1.0
    git remote add origin git@github.com:username/BaseAppKit.git//关联远程库
    git push --tags
    git push -u origin master
    
    • 验证spec
      有两种方式验证
      本地验证:
    pod lib lint --allow-warnings
    

    联网验证

    pod spec lint --sources='git@gitee.com:xxx/my_proj_spec.git,https://github.com/CocoaPods/Specs' --allow-warnings
    

    建议大家都⽤用联⽹网验证
    这里可选参数有:

    --allow-warnings 允许警告
    --sources=‘master,privateSpecs:指定源 比如你的私有pod同时依赖了公有库和私有库你必须指定源才行,因为默认会去公有源查找对应的依赖
    --use-libraries 如果使用了静态库 记得加上
    
    • 推送到Spec仓库
    pod repo push my_proj_spec BaseAppKit.podspec --allow-warnings
    

    同样的加上上⾯面验证时使⽤用到的可选参数

    创建业务组件Business_a

    创建过程同上略过

    • 编辑BaseAppKit.podspec
    s.dependency 'BaseAppKit'
    
    • 编辑Podfile
      因为依赖的是我们自己的私有库所以要特别指定源
    source 'https://gitee.com/frankpx/my_proj_spec.git'
    source 'https://github.com/CocoaPods/Specs.git'
    

    pod install 试试看有没有正确下载你的私有组件。
    当然了较大团队内部还可以把CocoaPods公有库的spec文件迁移发布到公司内部远端私有spec上,这样上面就可以不用添加source 'https://github.com/CocoaPods/Specs.git'官方索引源,这样团队其它成员在私自引入第三方库上就会有所控制,流程上面更规范些。
    之后有时间会继续写一些延续的实践,组件化本地联调(创建dmeo工程和framework工程以及之间的联调、组件项目中资源文件管理、路由相关工程实践、fastlane自动化证书管理、打包等),在此先立个flag,就当先给自己备忘下吧

    相关文章

      网友评论

          本文标题:CocoaPods组件化实践

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