美文网首页iOS 知识收集iOS架构模式
《iOS组件化》之创建公共/私有 Pods

《iOS组件化》之创建公共/私有 Pods

作者: hansfeng | 来源:发表于2018-05-21 17:15 被阅读287次

    前言

    CocoaPods是时下比较流行的组件化管理工具,将我们的基础组件放在CocoaPods上对增加复用率降低主工程复杂度更好的管理基础层代码都带来了巨大的帮助。

    开始

    配置pod有以下步骤:

    • 安装CocoaPods
    • 文件目录的设计
    • 上传代码到git
    • 配置spec
    • 组件的迭代

    一、Cocoapods的安装

    没安装CocoaPods请移步至CocoaPods的安装

    二、文件目录的设计

    在组件文件目录设计上要把重要文件都带上,把不需要的文件都忽略。保证主工程Pod下来的库是完全可用,并且无多余文件。
    HKHttpManager为例

    文件目录.png
    HKHttpManager
    ├── AppDelegate.h
    ├── AppDelegate.m
    ├── Assets.xcassets
    ├── Base.lproj
    ├── Info.plist
    ├── Sources
    │   ├── configure
    │   ├── logger
    │   ├── manager
    │   ├── request
    │   └── response
    ├── ViewController.h
    ├── ViewController.m
    └── main.m
    

    Source为整个HKHttpManager的核心,一定要把核心文件放在Source文件夹下,Source文件夹下又分为多个文件方便阅读管理。
    我希望Pod时只保留Source下的文件,其余的文件则忽略掉。下面配置spec是会结合此目录来写。

    三、上传代码到git

    建立私有和公共git步骤都大致相同,私有库只需要在podfile写上与git地址。与公司业务有关的组件必需建立私有库管理,本文以上传到GitHub公共库为例:

    1.start a project
    start a Project.png
    2.clone 到本地
    clone.png
    3.添加文件,提交到git远端,打tag,推送到远端

    第一个版本tag一般为0.0.1,和软件迭代版本规则一致。

    tag.png

    四、配置spec

    1.准备Trunk账号

    在发布spec之前必需要拥有CocoaPods Trunk账号,注册密令如下:

    $ pod trunk register [Your-Email] '[Your-Name]' --description='[Your-Desc]'
    
    > [Your-Email]: 任意邮件
    > [Your-Name]: 推荐使用github上使用的Name
    > [Your-Desc]: 使用电脑的描述
    
    // eg:
    $ pod trunk register baoshanf@163.com 'HKHttpManager' --description='hans' MacBook Pro'
    
    // 注册完成后,[pod trunk me]查看信息
    $ pod trunk me
    
    2.创建.podspec文件
    cd /Users/hans/HKHttpManager/HKHttpManager //到clone下来的文件目录下
    
    $ pod spec create [NAME]
    > [NAME]: podspec 名称,与工程名相同
    // eg:
    $ pod spec create HKHttpManager
    
    Pod::Spec.new do |s|
    s.name         = "HKHttpManager" //Pod库名称
    s.version      = "0.0.1" //根据上面tag的版本,上面我打的是0.0.1
    s.summary      = "对AFNetworking的二次封装,支持App复杂的网络处理." //简介
    s.description  = <<-DESC
    对AFNetworking的二次封装,支持App复杂的网络处理,类似于YTKNetworking,但是要简介一些
    DESC
    
    s.homepage     = "https://github.com/baoshanf/HKHttpManager.git" // 组件库的地址
    
    s.license      = "MIT (HKHttpManager)"   // license,根据你创建repository选择的license类型填
    
    s.author             = { "hans" => "baoshanf@163.com" } //名字和邮箱
    
    s.platform     = :ios, "8.0"  //支持的系统及最低版本
    s.source       = { :git => "https://github.com/baoshanf/HKHttpManager.git", :tag => "#{s.version}" }  //Git地址
    
    s.source_files  = "HKHttpManager/Sources/**/**/*.{h,m}"  //默认到spec文件夹,上文podspec在HKHttpManager下,Sources在与podspec同层级的HKHttpManager下,而Sources下的文件我们都要
    # s.exclude_files = "Classes/*.h" //忽略的文件,写法与s.source_files一致,比如你不想要Sources下的logger文件, s.exclude_files = "HKHttpManager/Sources/logger/*.{h.m}"
    
     s.public_header_files = "HKHttpManager/Sources/**/*.h" //文件相互引用中,如果没有公共头文件很有可能xcodebuild验证不通过
    
    s.dependency "AFNetworking"  //依赖的第三方库
    
    end
    
    

    如果以上字段不能满足需求,请移步至CocoaPods spec官方说明

    3.验证本地podspec

    进入podspec所在文件夹下

    $ pod spec lint
    

    如果出现警告,可以$ pod spec lint --allow-warnings来验证
    开始可能都会有错误,大家可以在评论区提一下一起解决...

    4.发布podspec
    $ pod trunk push [NAME].podspec
    或者
    $ pod trunk push [NAME].podspec --allow-warnings
    

    成功之后看下pod search能不能找到

    // 先更新一下repo
    $ pod repo update
    $ pod search 'HKHttpManager'
    

    五、组件的迭代

    每次修改组件都得打上相应的tags.version,s.source_files等也要相应的修改,同一份tag版本是不允许发布两次pods的。

    结束

    关于创建公共/私有 Pods的介绍就到这里,如果对你有帮助请点个赞😝
    我的组件化系列文章:
    《iOS组件化》组件化实践
    《iOS组件化》组件的划分
    《iOS组件化》之使用AOP代替继承
    《iOS组件化》之 搭建适合业务的URL跳转路由-ALRouter
    《iOS组件化》之搭建基于AFNetworking的网络请求框架

    相关文章

      网友评论

      • 这小子:你好,问个问题,创建私有pods时,Sources文件夹中有多个文件夹,怎么在项目中拉三方库时还要保证HKHttpManager这个文件夹中也有多个文件夹,你现在这个三方库pod install 时,所有文件都在一个文件夹中了
        hansfeng:@这小子1992 你可以参考一下AFNetworking和YYKit的subspecs
        这小子:@hansfeng 唉,照着官方配,一直没成功,我建的私有库文件pod install 都在一个文件夹中
        hansfeng:@这小子1992 可以用subspecs,HKHttpManager建议先直接拖入工程,因为要配置很多东西

      本文标题:《iOS组件化》之创建公共/私有 Pods

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