创建私人 Pods 以及 Spec Repo

简述 CocoaPods 运行

最近涉及到了制作依赖库的工作,需要自己制作 CocoaPods 来使用。并且因为是公司项目,所以不能提交到公共区域。所以就要自己建立 CocoaPods 的仓库来供公司内部人员来安装使用了。

存储 CocoaPods Spec 的地方叫做 Spec Repo,简单来说也就是一个 Git Repo,只不过里面存储了各个 CocoaPods Library

如果没有进行过任何设置时,pod install 命令搜索的均为 CocoaPods 官方的 Spec Repo 在这里可以看到官方的 Spec Repo 中存有大量的依赖库供开发者使用。 执行 pod install 时,程序根据在 podfile 中指定的依赖库在官方 Spec Repo 中搜索相应的名字。再根据 podfile 中指定的版本寻找指定版本的库,随后安装。

1PasswordExtension 为例:可以看到这个文件夹下存储了 1PasswordExtension 所有版本的依赖库,随便点击进去一个,就会发现实际上每一个版本的依赖库在 Spec Repo 中只存储了 podspec 文件而不是所有代码。安装时,CocoaPods 再回根据 podspec 文件中的信息去下载指定库的源文件。

Specs 以及 Spec Repo 制作

制作 Pods 以及 Podspec 文件

根据官方说法,一个 Podspec 是用来描述一个版本的 Pod Library,相当于 Pod 库的一个索引。 一个 Podspec 文件的基本格式如下:(来自 CocoaPods 官方文档)

Pod::Spec.new do |spec|  
  spec.name             = 'Reachability'  #库的名称
  spec.version          = '3.1.0'  #库的版本
  spec.license          = { :type => 'BSD' } #库所使用的开源协议,这个需要写一下。
  spec.homepage         = 'https://github.com/tonymillion/Reachability' #库的主页地址。
  spec.authors          = { 'Tony Million' => 'tonymillion@gmail.com' } #作者信息
  spec.summary          = 'ARC and GCD Compatible Reachability Class for iOS and OS X.' #简述
  spec.source           = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' } #库所在的 git repo,在每一个版本提交到 git 时需要添加 tag,Cocoapods 安装库时也是根据这个标签来寻找正确的快照,下载安装的。
  spec.source_files     = 'Reachability.h,m' #库源文件的位置,可用使用 * 来匹配所有。
  spec.framework        = 'SystemConfiguration' #库所依赖的系统库。
  spec.requires_arc     = true #标记是否需要 ARC 支持。
end  

另外,如果需要依赖其他的库则需要添加 spec.dependency 来引入其他的库。格式类似于: spec.dependency 'AFNetworking'

Podspec 文件可以通过 pod spec create 命令创建。然后再自己根据需求进行修改。

创建完 Podspec 后,就可以将 Pods 源文件放入 spec.source_files 所指定的路径。

为了方便开发,我们需要一个完整的 iOS 工程来开发。我们可以使用 pod lib create POD_NAME 来根据官方的工程模版创建出 Pods 源文件和一个 iOS 客户端。不过根据官方模版创建出来的结构比较乱,所以我们可以自己创建一个 iOS 工程,并引入我们创建的 Pods。

podfile 中这样写即可:pod 'SPEC_NAME', :path => 'PATH_OF_PODSPEC_FILE'。然后像往常一样执行 pod install 就可以安装了。

打开工程的 .xcworkspace 后,可以看到左侧有一个 Development Pods 的目录,这里就是你刚刚引入的 Pods,新建文件时全添加进这个组就可以了。该文件的 Target 记得选择为你这个 Pods。

待 Pods 开发完毕后,git push 到你的 Git Repo,也就是在 podspec 文件中指定的 spec.source。记得 添加上 Tag,因为在安装 Pods 时是通过 Tag 来查找相应版本的。

创建 Spec Repo

随后我们创建一个新的 Git Repo 作为我们的 Spec Repo,例如我们可以放在 GitHub。

安装 CocoaPods 时就已经带有了官方的 Spec Repo,现在需要做的就是将刚才创建的 Git Repo 添加为我们的 Spec Repo Source: pod repo add REPO_NAME GIT_URL

然后通过以下命令来检查添加是否成功:cd ~/.cocoapods/repos/REPO_NAME pod repo lint .

这样就添加成功了,所有的 repo 目录都存储在 ~/.cocoapods/repos 下。当我们在组内合作时可以将制作的 pod library 推送进这个 Spec Repo,方便同事使用以及更新。

推送到 Spec Repo

待添加个人的 Spec Repo 后,就可以把我们自己制作的 Pods 推送到 Spec Repo 了: pod repo push REPO_NAME SPEC_NAME.podspec

一个栗子

我们创建一个名为 TestPodsLibrary 的库实例来进行说明。

在 TestPodsLibrary 文件夹下执行 pod spec create 命令创建出 podspec 文件。 我们创建一个 TestPodsSourceFileFolder 的文件夹来存放源文件。 在 podspec 文件中这样写:

spec.source_files     = 'TestPodsSourceFileFolder/*.{h,m}'  

现在目录结构是这样的:

TestPodsLibrary  
|- TestPodsLibrary.podspec
|- TestPodsLibrarySourceFileFolder
|   |-  xxx.h
|   |-  xxx.m