iOS 组件化开发

[toc]

CocoaPods 是一个很好的三方开源库管理工具,在配置和更新上为我们节省了大量的时间与降低了工作的繁琐度。CocoaPods不仅可以对公有的Git仓库进行分享开源(AFNetworking等),还可以对我们自己的私有Git仓库进行管理。这里我们就利用CocoaPods来对我们私有的Git仓库进行索引。

一 、基本概念

  1. Podspec : 该文件为你的代码仓库索引描述文件

    CocoaPods :通过该文件对你真正存储代码工程的 Git 仓库进行索引与下载

    Project :你上传到远程Git仓库的代码工程,将来用于开源共享或则私有

  2. 索引流程


    iOS 组件化开发_第1张图片
    索引流程

二 、原理

CocoaPod  通过第一个 Git 仓库的里 .podspec 描述文件找到真正存储你代码的第二个 Git 仓库,然后根据 .podspec 里的相关字段对特定目录下的代码,三方依赖库,资源文件等进行下载。

换一种说法来理解,第一个 Git 仓库里的 .podspec 描述文件相当于我们的指针, 其指向的另一个 Git 仓库(内存)才是你自己真正所共享的代码。

三 、制作流程

  1. 创建两个git仓库,一个用于存储 .podspec 后缀文件的私有 Git 仓库(公开的public),一个用于存储的共享代码的私有 Git 仓库(私有的private)。

  2. 本地创建后续要被共享的代码项目

    • 打开终端工具,cd到你要创建的目录下

    • 然后输入 pod lib create XXX 命令创建一个待上传的项目模板

      iOS 组件化开发_第2张图片
      创建项目模板.jpg
    • 然后系统会要求你配置相关的设置,可以根据自己需求进行配置。


      iOS 组件化开发_第3张图片
      配置相关参数.jpg
  • 然后打开项目目录,显示如下: 后续添加的文件需要放到Classes文件夹下面,示例文件ReplaceMe.m可以删除替换为自己的文件。

    iOS 组件化开发_第4张图片
    需替换文件目录.jpg
  • 接下来我们需要配置一下podspec ,打开Example文件夹下面的.xcworkspace文件,显示如下:


    iOS 组件化开发_第5张图片
    配置podspec文件.jpg
 配置 **.podspec** 后缀文件 
iOS 组件化开发_第6张图片
配置podspec文件注意事项.jpg
 ```
 s.name : 项目名

 s.version :  版本号(需跟代码仓库后面打 Tag 的值相等)

 s.homepage : 项目主页(请注意,这里的地址跟git仓库地址有一定差别)---------注意修改

 s.license : 开源协议

 s.source : Git 仓库地址

 s.ios.deployment_target : 项目最低支持版本

 s.source_files : 具体去那个目录下下载特定共享代码               ---------注意修改

 s.frameworks : 项目所依赖的系统库

 s.dependency : 项目所依赖的第三方库
 ```
  • 配置完成之后,验证一下 .podspec 文件格式的正确性

    在同一目录下面,使用终端命令行工具输入:pod lib lint 出现警告使用 pod lib lint --allow-warnings

iOS 组件化开发_第7张图片
验证podspec文件的正确性.jpg
 出现 passed validation 说明验证成功。
验证podspec文件成功.jpg
  • 将本地代码工程与远程私有仓库关联

    git remote add origin 远程仓库地址
    
关联远程代码仓库.jpg
  • 将本地仓库内容同步到远程仓库

    git add .
    git commit -m 'Something description'
    git push origin master
    
  • 同步到远程之后,我们需要打一个 .podsepc 文件中s.version 版本 一致的 tag 分支

    (创建本地tag分支,提交远程tag分支)

    git tag -a 0.1.0 -m '0.1.0版本'
    git push --tags
    
    iOS 组件化开发_第8张图片
    打tag标记.jpg
 当你的tag 版本和podspec 文件里面的版本不一致的时候可以删除tag 分支重新打一个新的tag分支

 (删除本地tag分支,然后删除对应远程tag分支,执行上面的两个命令)

 ```
 git tag -d 0.1.0              
 git push origin :refs/tags/0.1.0 
 ```
iOS 组件化开发_第9张图片
删除远端tag标记.jpg
 然后进行本地和远程验证一下文件有效性:输入命令 `pod spec lint `
iOS 组件化开发_第10张图片
验证一下有效性.jpg
 验证通过!!!
  • 至此Podfile中可以用 pod 'LFPodDemo', :git => 'http://git.longhu.net/lijunjie/LFPodDemo.git'方式正常使用 pod install,但是本地不能使用 pod search XXX 命令搜索到
iOS 组件化开发_第11张图片
使用方式一.jpg
  1. 要想使用 pod search XXX 需要我们项目组每个成员自己本地配置一下。 拉取项目代码到本地然后关联到远程仓库。上传.podspec到第一个远程私有仓库

    • 首先进入 ~/.cocoapods/repos 目录下

      cd ~/.cocoapods/repos

    • 然后创建一个私有仓库目录

      pod repo add LFPodPublicSpec spec远端的git仓库地址

      iOS 组件化开发_第12张图片
      创建私有仓库目录.jpg
  • 然后向私有的 LFPodPublicSpec 远程仓库中提交 .podspec 文件

    pod repo push LFPodPublicSpec LFPodDemo.podspec

    iOS 组件化开发_第13张图片
    向远端私有spec文件仓库提交podspec文件.jpg

 提交成功,然后看一下.cocoapods目录下面的变化: 
iOS 组件化开发_第14张图片
本地cocoapods变化情况.jpg
 0.1.0版本出现了。然后我们使用 ` pod search LFPodDemo ` 命令搜索一下。 
iOS 组件化开发_第15张图片
能够search到了.jpg
 成功了!!!!!!!
  1. 如何使用私有库

    • 使用 pod 'LFPodDemo', :git => 'http://git.longhu.net/lijunjie/LFPodDemo.git'方式

      该方式不支持项目私有库引用dependency

      iOS 组件化开发_第16张图片
      使用方式一.jpg
  • 使用spec -- source 方式

    该方式支持项目私有库引用dependency,但是需要创建许多spec的git仓库用来搜索。

iOS 组件化开发_第17张图片
使用方式二-source.jpg
  1. 把不同的specs文件集中到一个git代码仓库的整合,类似于CocoaPods/Specs.git

    将不同的项目代码下载到本地,然后在本地项目代码路径下面执行下面代码,在向私有的 LFPodPublicSpec 远程仓库中提交 .podspec 文件

    pod repo push LFPodPublicSpec LFXXX.podspec

iOS 组件化开发_第18张图片
一个podspecs仓库关联多个podspecs.jpg
iOS 组件化开发_第19张图片
本地cocoapod文件目录结构.jpg

整合到一个PublickSpec文件夹下面了。nice!!!!

  1. 使用pod search LFPodDemo搜索一下
iOS 组件化开发_第20张图片
成功搜索到私有库.jpg

成功了!!!!!!!

四、参考链接

  • http://www.jianshu.com/p/97e1d9c6e2fb
  • http://www.jianshu.com/p/0b6299f80bbd
  • https://casatwy.com/modulization_in_action.html
  • http://www.jianshu.com/p/0a7f3c0b4194
  • http://www.jianshu.com/p/506dd096f125

你可能感兴趣的:(iOS 组件化开发)