美文网首页
模块化工程 | CocoaPods篇|远程私有库搭建流程 [通用

模块化工程 | CocoaPods篇|远程私有库搭建流程 [通用

作者: 夏浩文 | 来源:发表于2020-08-06 21:41 被阅读0次

    目录

    = 创建篇 =
    == 一、创建远程私有git仓库
    == 二、创建本地索引仓库 pod repo
    == 三、快速创建pod模板工程
    == 四、编辑模板工程
    == 五、提交模板工程至远程git仓库
    == 六、提交.podspec私有索引至repo
    = 使用篇 =
    == 一、依赖远程git私有库
    = 索引文章 =
    == 一、CocoaPods|安装流程与使用
    == 二、姐妹篇 - [模块化工程 | 多项目混合篇 | 工作空间应用 | xcworkspace]

    官方引导教程

    • 搭建流程来自官方指引~

    一、创建远程私有git仓库

    • 创建一个git空代码仓库并git clone至本地
    • 创建一个git索引仓库关联本地repo仓库,生成README.md,###不要空仓###
      =备注:[HWBoneKit] 是我的栗子组件名=
      =备注2:git仓库,我选择使用码云,可根据需要自行选择=

    二、创建本地索引仓库 pod repo

      1. 创建本地repo仓库并关联远程git索引仓库
    pod repo add [`RepoName`] [`git仓库地址`]
    
    # 举个栗子
    pod repo add HWBoneKit https://gitee.com/Ka_Ivan/HWBoneKitSpecs.git
    
      1. 完成后查看是否添加成功
    pod repo
    
    # [举栗子]存在结果集👇 
    HWBoneKit
    - Type: git (master)
    - URL:  https://gitee.com/Ka_Ivan/HWBoneKitSpecs.git
    - Path: /Users/mac/.cocoapods/repos/HWBoneKitSpecs
    

    三、快速创建pod模板工程

    # t = [`存放模板工程的路径` /= `git本地仓库`]
    cd t
    # 快速创建工程
    pod lib create [`组件名`/`PodName`]
    
    # 举个栗子
    pod lib create HWBoneKit
    
    # == 创建过程需要的选项 ==
    What platform do you want to use?? [ iOS / macOS ]
     > iOS
    
    What language do you want to use?? [ Swift / ObjC ]
     > ObjC
    
    Would you like to include a demo application with your library? [ Yes / No ] #是否创建模板工程
     > Yes
    
    Which testing frameworks will you use? [ Specta / Kiwi / None ]
     > None
    
    Would you like to do view based testing? [ Yes / No ]
     > No
    
    What is your class prefix?
     > HW
    
    • 完成后会自动打开Xcode
    • 关闭Xcode,将模板工程挪到git本地仓库
    • 模板工程中,可见👇
    # 此处存放私有库代码,如下图
    [`PodName`] / Classes / ReplaceMe.m
    
    #举个栗子 [移除`ReplaceMe.m`] [放入工具代码]
    `git本地仓库`/HWBoneKit/Classes/
    

    四、编辑模板工程

      1. 首先将代码放入Classes中,如图所示👇
        按功能划分
      1. 回到工程,编辑 *.podspec
        工程中`podspec`的位置
    Pod::Spec.new do |s|
      s.name             = 'HWBoneKit'
      s.version          = '0.1.2'
      s.summary          = '=基础框架= of HWBoneKit.'
      s.description      = <<-DESC
      '基础框架, 适用于多项目通用组件的存放.'
                           DESC
      s.homepage         = 'https://gitee.com/Ka_Ivan/HWBoneKit'
      s.license          = { :type => 'MIT', :file => 'LICENSE' }
      s.author           = { 'HawinShark' => '835913166@qq.com' }
      # 远程代码仓库地址
      s.source           = { :git => 'https://gitee.com/Ka_Ivan/HWBoneKit.git', :tag => s.version.to_s }
      # [WARN]注意此处版本不要低于 `Podfile` - [platform :ios, '9.0']
      s.ios.deployment_target = '9.0'
    
      # 此处识别头文件
      s.source_files = 'HWBoneKit/Classes/*'
      
      # 核心库
      s.subspec 'Core' do |core|
        # 如上图,对`Core`文件夹生成子库
        # `Core`文件夹有三层目录,`[/**]`表递归
        core.source_files = 'HWBoneKit/Classes/Core/**/*'
        # 此处依赖第三方库
        core.dependency 'AspectsV1.4.2'         #AOP面向切面
      end
      
      # 分类库 [拓展]
      s.subspec 'Category' do |category|
        category.source_files = 'HWBoneKit/Classes/Category/**/*'
        category.dependency 'HWBoneKit/Core' #[WARN]此处若使用`Core`中类,需设置依赖,否则校验时会无法识别头文件
        category.dependency 'ReactiveObjC'   #RAC-OC
      end
    
      # etc.. 
      # 更多用法可参考官方引导
    end
    
      1. 编辑完成后,pod install后可看到模块代码,注意配置中[WARN]部分
    # t = [`git本地仓库`]/Example
    cd t
    # then
    pod install
    
    `功能代码`已可见
      1. 后续修改工具库,可直接在Pods/Development Pods中进行

    五、提交模板工程至远程git仓库

    • 工具使用 = Sourcetree =
      1. 提交代码,或手动终端
    # 若在`/Example`目录
    cd ..
    # 若否, t = [`git本地仓库`]
    cd t
    # 检查git文件状态
    git status
    # 添加代码 [此处可忽略依赖的第三方库]
    git add .
    # 提交代码
    git commit -m'[提交描述]'
    
      1. 开始校验本地podspec
    # 开始校验
    pod lib lint --allow-warnings [--verbose]
    
    # 本地校验通过
    [`PodName`] passed validation.
    # 若校验未通过,可[--verbose]查看详细信息,根据`Error`项排查错误
    
    • 本地校验通过后,排查是否有未提交文件
      1. 推送到git远程仓库,或手动👇
    # 关联`git`远程仓库
    git remote add origin https://gitee.com/Ka_Ivan/HWBoneKit.git
    # 推送代码
    git push origin master
    
    • [可选]进行远程校验,[push会进行一次远程校验]
    pod spec lint --allow-warnings --verbose
    
    # 远程校验成功
    HWBoneKit.podspec passed validation.
    
      1. 当远程校验成功后,对本次提交添加标签tag
        需要注意与`[podspec] - version`一致
    • 或手动添加tag👇
    # `tag值`与`.podspec`文件 - `s.version` 保持一致,[必须]
    git tag '0.1.3'
    # 推送`tag`
    $ git push --tags
    
    • [原因]tag就是CocoaPods版本的标识

    六、提交.podspec私有索引至repo

    # t = [`git本地仓库`]
    cd t
    # 推送`.podspec`
    pod repo push [RepoName] [PodName].podspec --allow-warnings [--verbose]
    
    # 举个栗子
    pod repo push HWBoneKit HWBoneKit.podspec --allow-warnings
    
    • [问题1] 推送本地库失败,提示 [!] The repo is not clean
    [!] The repo `[RepoName]` at `../../.cocoapods/repos/[RepoName]` is not clean
    
    • [解决方法1][可选] 在pod repo push前确保 git 已全部提交完成
    # t = `../../.cocoapods/repos/[RepoName]`
    cd t
    # 清理操作
    git clean -f
    
    • [解决方法2][可选] 在pod repo push前更新本地仓库
    pod repo update [PodName]
    # 举个栗子
    pod repo update HWBoneKit
    
    • [问题2] 当本地与远程均校验通过,却Push失败
    [!] The `[PodName].podspec` specification does not validate.
    
    • 可能是因为Pod缓存的问题,应清理后操作
    # 查看缓存列表
    pod cache list
    # 删除对应缓存[如我的为HWBoneKit]
    # [全部清理则替换成--all]
    pod cache clean HWBoneKit
    # 再次执行上传即可
    

    使用篇

    一、依赖远程私有库

      1. 编辑Podfile文件
    # Uncomment the next line to define a global platform for your project
     platform :ios, '9.0'
    
    # [CocoaPods更新日志](http://blog.cocoapods.org/CocoaPods-1.7.2/)
    # 因为使用了`trunk repo`,指定其源地址
    #source 'https://github.com/artsy/Specs.git'
    source 'https://cdn.cocoapods.org/'
    
    # 此处指定源地址为`远程私有索引库地址`
    source 'https://gitee.com/Ka_Ivan/HWBoneKitSpecs.git'
    
      1. pod install

    • [问题1]当 pod install 时出现👇 [单独创建索引git仓库后则无此问题]
    [!] An unexpected version directory `Classes` was encountered for the `/Users/mac/.cocoapods/repos/[本地Repo仓库名]/[私有库名]` Pod in the `[私有库名]` repository.
    
    # 比方说
    [!] An unexpected version directory `Classes` was encountered for the `/Users/mac/.cocoapods/repos/HWBoneKit/HWBoneKit` Pod in the `HWBoneKit` repository.
    
    • [解决方法1] 👇
      -. 复制路径 t = /Users/mac/.cocoapods/repos/HWBoneKit/HWBoneKit
      -. ⌘[Command] + ⇧[Shift] + G ->into> t
      -. 因为repo仓库仅需podspec,故移除非必要的文件即可
      移除Assets与Classes

    • [问题2] pod install 时👇,[!] The 'Pods-name' target has transitive dependencies that include statically linked binaries
    [!] The 'Pods-jadelane' target has transitive dependencies that include statically linked binaries: (/Users/mac/Documents/Git/Jadelane-Git/Jadelane-mixture/Pods/TXLiteAVSDK_Professional/TXLiteAVSDK_Professional/TXLiteAVSDK_Professional.framework)
    

    -. [问题2][原因]因Podfile中,使用了use_frameworks!pods中的库都会以动态库dynamic library framework方式引入到工程中
    -. [问题2][原因]同时,pod内不能同时存在动态库与静态库[如上TXLiteAVSDK_Professional.framework]

    • [解决方法1]👇,Podfile中#注释即可
    #use_frameworks!
    
    • [解决方法2]👇,使podname.framework[三方库]统一为静态库
    # 修改`.podspec `
    s.static_framework = true
    

    = 当熟悉所有流程,祝你玩出🌺~ =


    索引文章

    一、CocoaPods|安装流程与使用

    • CocoaPods相关问题,可查看此文章

    二、[模块化工程] | 工作空间篇 | .xcworkspace | Development Pods | 混合应用 =❤姐妹篇=

    • 关于Xcode工作区间的应用,适用于单项目多端开发,以及整合本地 Development Pod 集成使用

    三、iOS | 关于AppDelegate瘦身的想法与实践


    推广

    顺便推广一下女#胖#友的[香港🇭🇰]代购微信号~
    逢过节送个好礼,找我鸭~
    🌸iYours代购 🌸
    # == 听说 == 
    if (扫二维码 && !!可能) {
        `送女盆友`()
    }
    

    相关文章

      网友评论

          本文标题:模块化工程 | CocoaPods篇|远程私有库搭建流程 [通用

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