iOS使用Cocoapods进行组件化操做手册

前言

随着工程体量的增大,开发人员增多,为了更好的合做开发,经常咱们须要对大工程进行拆分红一个个小工程,这样作有几点好处:ios

  1. 加快开发效率,若是咱们在一个大工程进行迭代开发,经常编译时间就很长,若是你开发的是一个入口比较深的模块,开发调试时,仅仅修改了一下UI界面位置等,从新编译运行而后再点点点到对应界面,经常浪费不少时间。而将模块拆成单独一个可执行的工程后,编译运行调试的时间大大缩减。
  2. 并行开发,因为每一个子工程均可以进行单独的版本控制,子工程在开发新功能中时,主工程可依赖低版本的子工程,不影响主工程的运行。
  3. 分工性提升,不一样子工程可由不一样人员甚至不一样团队负责。
  4. 代码共享,不一样app工程可方便快捷的复用组件。

下面咱们就经过pod来建立一个子工程并经过pod在主工程来引入git

操做步骤

1、建立子工程

  1. 使用Xcode新建一个工程例如叫HomeModule
  2. 经常咱们会再建立一个Demo项目来作示例,这里咱们能够在HomeModule目录下建立一个名为HomeModuleDemo的工程
  3. 为了方便起见,在HomeModule目录下建立一个名为Classes的文件夹,将须要导出的代码类都放在这个文件夹下,创建一个Resources文件夹,将须要导出的资源文件放在这个目录下
  4. cd到HomeModule工程目录,输入命令pod spec create HomeModule,这段命令会在目录下生成HomeModule.podspec文件,这个文件其实就是对这个工程的描述,例如工程名称、托管地址、须要导出哪些文件等

下面是进行到这一步的目录示例图github

  1. 好了,如今能够先将这个项目托管到线上git仓库bash

  2. 打开HomeModule.podspec作一些编辑,下面是一些经常使用配置的编辑app

Pod::Spec.new do |s|

  s.name         = "HomeModule"
  s.version      = "0.0.1"
  s.summary      = "HomeModule is a ...."
  s.homepage     = "https://github.com/xxx"
  s.license      = "MIT"
  s.author       = {
                    "xxx" => "xxx@gmail.com",
                    }
  s.source        = { :git => "https://github.com/xxx/HomeModule.git", :tag => "#{s.version}" }
  s.source_files  = "Classes/*.{h,m}"
  s.resources = "Resources/*.png"
  s.requires_arc  = true

  s.ios.deployment_target = "7.0"
  s.osx.deployment_target = "10.9"
  s.watchos.deployment_target = "2.0"
  s.tvos.deployment_target = "9.0"
  s.frameworks    = 'UIKit'
  s.dependency 'Masonry', '~> 0.6.2'
end

复制代码

值得关注的是下面几个点工具

  • s.source 是项目托管地址
  • s.source_files 须要导出的文件,就是最终其它工程经过pod引入你这个项目时的文件,这里就体现了pod的好处,咱们开发组件时能够是个完整的iOS工程,可单独开发运行调试,经过pod给别人用时就只须要导出核心的那些文件就好了
  • s.resources 须要导出的资源文件
  • 若是在Classes和Resources目录下,你建了二级目录的话,须要写成这样s.source_files = "Classes/**/*.{h.m}" s.resources做一样的写法
  • s.frameworks 你依赖的系统库
  • s.dependency 你依赖的其它第三方pod库
  1. 开发HomeModule模块,添加新功能
  2. 将HomeModule新代码push到git仓库,并建立一个tag 0.0.1

2、建立私有Cocoapods Specs仓库

这个仓库主要用来托管咱们本身的podspec文件,就是本例中的HomeModule.podspec,例如之后的ShopCartModule.podspec等等...gitlab

Cocoapods的官方spec仓库是https://github.com/CocoaPods/Specs,不少咱们经常使用的第三方库例如AFNetworking的podspec文件就托管在这个仓库里面,在咱们第一次使用cocoapods的时候就会将这个仓库克隆到本地的user/xxx/.cocoadpos/repos/master,你可进入这个目录看看,就会发现每一个库的每一个版本的podspec文件都在里面,当咱们经过pod search搜索第三发库的时候,实际就是在搜索这个目录。有些时候一些第三方库已经发布新版本了,但咱们搜索到的仍是老版本,就是由于这个库没有更新。ui

下图为克隆到本地的Cocoapods官方Specs仓库: url

克隆到本地的Cocoapods官方Specs仓库
经过命令 pod repo list咱们能够看到本地有哪些spec仓库,以及仓库的url和本地地址信息等,以下图中是Cocoapods官方Spec仓库,名为master

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

复制代码

顺便提一下,不少同窗会知道pod updatepod setup都很是慢,这两个命令都会更新这个仓库,你们能够将master仓库的url切换为清华大学的cocoapods官方spec镜像源,具体详见清华大学软件源spa

好了,了解完官方spec仓库后,咱们能够开始建立本身的spec仓库了。

  1. 直接在gitlab或是github上建立一个空仓库名为xxxPodSpecs
  2. 将这个仓库clone到本地的.cocoapod/repos/xxxPodSpecs,固然这里使用pod命令行工具来执行,pod repo add xxxPodSpecs https://github/xxx/xxxPodSpecs.git,执行完成后再执行pod repo list就能够看到咱们私有的spec仓库在列了。
  3. 将咱们的HomeModule.podspecs托管到咱们才建立的私有spec仓库,具体操做为cd 到HomeModule.podspec目录下,执行pod repo push xxxPodSpecs HomeModule.podspec,这里pod会执行一次校验,通常会报一些warn,你能够去解决一下,若是不想解决直接忽略的话,执行pod repo push xxxPodSpecs HomeModule.podspec --allow-warnings,不过若是是error错误,是没法忽略的。这里顺便提一下,在我使用1.5.3版本pod执行的时候,会报一个error是bug引发的,没法解决,经过升级到最新版pod就行了,升级pod只须要执行sudo gem install cocoapods就好了。若是你想多个pod切换使用,请参考这篇文章多个版本的 CocoaPods 的切换

3、主工程集成

  1. 打开咱们的主工程的podfile文件,在头部添加两行
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/xxx/xxxPodSpecs.git'
复制代码

在后面就能够添加pod引用HomeMoudle了

pod 'HomeModule', '0.0.1'
复制代码

能够看到一个是官方specs仓库,一个是咱们私有spec仓库,由于咱们本身的HomeModule.podspec文件是托管到私有的xxxPodSpecs仓库的,若是不添加咱们本身的私有spec仓库源,那么pod install的时候是在官方spec仓库搜索HomeModule.podspec的。

4、新版本发布

当咱们继续为子工程HomeModule开发新的功能后,咱们须要更新咱们的版本,具体操做以下

  1. 将HomeModule项目新代码push到git仓库,而且建立0.0.2的tag
  2. 修改HomeModule.podspec的s.version为0.0.2
  3. cd到HomeModule.podspec目录执行pod repo push xxxPodSpecs HomeModule.podspec --allow-warnings
  4. 主工程的podfile更新为
pod 'HomeModule', '0.0.2'
复制代码
  1. 主工程执行pod install

扩展

Demo工程配置

一般咱们会经过一个demo工程来给他人演示库的一些用法,首先咱们须要将demo工程经过pod集成咱们的HomeMoudle

  1. cdHomeModuleDemo目录,执行pod init建立一个podfile。编辑podfile文件添加HomeModuel引入
target 'HomeModuleDemo' do
  pod 'HomeModule', :path => '../'
end

复制代码

这里咱们经过:path => '../'直接指向本地的HomeModule.spec地址便可。

  1. pod install
  2. 打开HomeMoudleDemo.xcworkspace,开始编写示例代码。

谢谢

好了,大体的操做步骤就这些,文章中哪些地方不够详细或者错误的,欢迎各位看官指正出来,谢谢🙏

相关文章
相关标签/搜索