CocoaPods简介
CocoaPods是专门为iOS工程提供第三方依赖库的管理工具,通过CocoaPods,我们可以更方便的管理每个第三方库的版本,而且不需要我们做太多的配置,就可以直观、集成和自动化的管理我们项目中使用的第三方库。
CocoaPods将所有依赖的库都放在一个名为Pod的项目下,然后让住工程依赖Pods项目。Pods项目最终会编译为一个libPod-项目名.a的静态库,主项目依赖于这个静态库。
对于资源文件,CocoaPods提供了一个名为Pods-resources.sh的bash脚本,该脚本在每次主工程编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。
CocoaPods通过一个名为Pods.xcconfig的文件来在编译时设置所有的依赖和参数。
CocoaPods是用Ruby写的,并由若干个Ruby包(gems)构成的。在解析整个过程中最重要的几个gems分别是:CocoaPods/CocoaPods
,CocoaPods/Core
和CocoaPods/Xcodeproj
。
CocoaPods的核心组件
-
CocoaPods/CocoaPods
这是一个面向用户的组件,每当执行一个pod命令时,这个组件都将被激活。该组件包括了所有使用CocoaPods涉及到的功能,并且还能通过调用所有其他的gems来执行任务。
-
CocoaPods/Core
Core组件提供支持与CocoaPods相关文件的处理,主要是Podfile和PodSpecs。
-
Podfile
用于定义项目中所需要使用的第三方库。该文件支持高度定制,你可以根据个人喜好对其做出定制。更多相关信息,请查阅Podfile指南。
-
Podspec
.podspec描述了一个库怎样被添加到工程中。它支持的功能有:库的名字、描述、源文件、framework、编译选项和所需的依赖库等。
-
CocoaPods/Xcodeproj
这个gem组件负责所有工程文件的整合。它能够对创建并修改.xcodeproj和.xcworkspace文件。它也可以作为单独的一个gem包来使用。如果你想要写一个脚本来方便的修改工程文件,那么可以使用这个gem。
安装CocoaPods
安装需要用到Ruby,虽然Mac自带了Ruby,不过版本有些老了,最好更新一下
sudo gem update --system
接下来输入系统密码就可以安装了。
因为Ruby的软件源rubygems.org被屏蔽了,所以要更换淘宝源,淘宝源最近也刚刚更换了域名
gem sources --remove https://rubygems.org/
gem sources --add https://gems.ruby-china.com/
接下来查看下源路径是否更换了
gem sources -l
然后按照命令来更新Ruby就好了
sudo gem update --system
更新完毕,就可以安装CocoaPods了。
sudo gem install cocoapods
安装CocoaPods的svn插件
如果想要创建基于svn的私有库,那么还需要下载一个svn的插件cocoapods-repo-svn。可以通过gem来安装该插件
gem install cocoapods-repo-svn
该插件的使用也是非常简单,由于是基于cocoapods的插件,所以如果要使用的话,通过pod repo-svn COMMAND
即可。
创建基于SVN的私有库
首先,在SVN的某一目录中创建一个ComponentLibraries
目录,里面包含ComponentProjects
和ComponentSpecs
两个子目录。
ComponentProjects
目录存放所有私有库的源代码,而ComponentSpecs
存放所有私有库各个版本的.podspec
文件文件。
由于所在项目正在准备做组件化,于是这样命名。可根据具体时机情况进行命名。
然后我们在ComponentProjects
目录中,创建一个文件夹,该文件夹就是一个私有库的工程,例如AlbumTool
,如果用Cornerstone创建文件夹,记得勾选上Create"trunk","branchse" and "tags" subfolders
。如果不用的话,需要手动创建trunk
和tags
目录。
创建好之后,目录结构是这样的。
这个trunk
就是主干路径,也就是我们要把代码放到的地方。接下来,我们checkout目录,然后将我们的第三方库以及测试工程上传即可(没有测试工程也没有问题)。注意一下下图的目录结构,.podspec
在trunk的子目录上。
接下来,我们通过命令行来创建.podspec
文件
#首先要切换到本地工程的trunk目录下
pod spec create AlbumTool
执行命令结束后,该目录会多一个AlbumTool.podspec的文件,打开文件,可以按照提示去编辑,也可以去github上搜一下现有的第三方库,参考一下他们的.podspec
是如何写的。
.podspec
中常用的信息
name:框架名
version:当前版本(注意,是当前版本,假如你后续更新了新版本,需要修改此处)
summary:简要描述,在pod search ZCPKit的时候会显示该信息。
description:详细描述
homepage:页面链接
license:开源协议
author:作者
source:源码git地址
platform:支持最低ios版本
source_files:源文件(可以包含.h和.m)
public_header_files:头文件(.h文件)
resources:资源文件(配置的文件都会被放到mainBundle中)
resource_bundles:资源文件(配置的文件会放到你自己指定的bundle中)
frameworks:依赖的系统框架
vendored_frameworks:依赖的非系统框架
libraries:依赖的系统库
vendored_libraries:依赖的非系统的静态库
dependency:依赖的三方库
最重要的是填写好s.source
值,可参考下图来设置。
填写完毕之后,我们将该库,在svn上创建一个tag,tag值对应.podspec
中的tag值。
这样我们就可以本地来验证一下.podspec
了。
#首先要切换到本地工程的trunk目录下
pod lib lint --allow-warnings
验证通过之后,我们就可以把这个.podspec
上传了。
首先呢,先要创建一个私有库
#pod repo-svn add NAME URL
pod repo-svn add ComponentSpecs http://svn/path/ComponentSpces
期间会让输入svn的用户名和密码。添加完毕之后,我们把这个.podspec
上传到这个私有库中
pod repo-svn push ComponentSpces
执行完毕,我们会发现SVN多了一条log,同时在ComponentSpecs目录下,多了AlbumTool目录以及其子目录。
我们也可以打开~/.cocoapods/
目录,来查看一下当前本地中存放的所有.podspec
文件
这样,我们的私有库就制作好了,接下来,我们就需要在需要使用的地方,编辑Podfile文件了。
## 这里是共有第三方库
source 'https://github.com/CocoaPods/Specs.git'
#这里是私有库的地址,需要使用下载的cocoapods-repo-svn插件,
#当其他人需要使用的时候,也需要安装此插件,并且加入这行代码,
#如果仍无法使用,请使用命令行方式添加私有库地址
#pod repo-svn add ComponentSpecs http://svn/path/ComponentSpces
plugin 'cocoapods-repo-svn', :sources => [
'http://svn/path/ComponentLibraries/ComponentSpecs'
]
target 'Example' do
pod 'AlbumTool'
end
编辑完成之后,进入该工程目录,执行
pod install
打开工程根目录下的.xcworkspace
文件即可。之后就可以#import
头文件,使用即可。
如果在这个地方提示无法找到AlbumTool
的pod,那么需要重置一下cocoapods的索引即可。
rm ~/Library/Caches/CocoaPods/search_index.json
这样我们的私有库就做好了。同样的原理,我们可以添加其他的私有库。
别人也可以添加私有库。当同组其他人添加私有库后,我们需要更新一下源,然后就可以通过pod install
命令来集成私有库了。
pod repo-svn update ComponentSpecs
私有库更新
我们需要修复bug,或者对私有库新增一些功能的时候,我们可以像往常一样,去把代码commit到svn上,之后为了能让使用我们私有库的地方都更新,我们需要做一些额外的事情。
- 更新
.podspec
中的s.tag
值,假设修改为0.0.2
- 将更新commit到svn上
- 在SVN上新建一个
0.0.2
的tag - 执行
pod repo-svn push ComponentSpecs
命令
当别人再使用的时候,如果他在Podfile中没有指定版本,那么就会pod出最新版本来,当然他也可以选择版本来pod。如果已经集成的我们旧版本的代码,可以通过一下命令来更新到最新的代码
#pod setup
pod update
删除私有仓库
删除私有仓库,需要在SVN上删除ComponentLibraries
目录,并且执行命令
pod repo remove ComponentSpecs
总结一下
如果想要创建基于svn的私有库,那么需要先安装cocoa-repo-svn插件。
新建repo
- 在SVN上选择好路径,一个文件夹下
- 命令行执行
pod repo-svn add NAME URL
新建pod
- 在svn上新建一个工程的根目录,带上
trunk
和tags
子目录 - 在trunk目录上编写私有库代码,上传
- 创建
.podspec
文件,其中s.source
路径为svn上工程的根目录,s.tag
自行命名 - 修改后的代码commit到svn中
- 创建一个tag,名称与
.podspec
中的一致 pod lib lint
来验证本地源pod repo-svn push RepoName
pod发新版本
- 修改
.podspec
文件中s.tag
为新的名称 - 修改后的代码commit到svn中
- 创建新的tag,名称与
.podspec
中的一致 - 执行
pod repo-svn push RepoName
命令,来上传新版本的.podspec
文件
更新repo
pod repo-svn update RepoName
集成pod
- 编写Podfile文件,其中加入
source 'https://github.com/CocoaPods/Specs.git'
plugin 'cocoapods-repo-svn', :sources => [
'http://svn/path/ComponentLibraries/ComponentSpecs'
]
- 在需要的target上写上
pod XXX
及版本(如果需要版本)。 - 命令行执行
pod install
更新pod
- 命令行执行
pod repo update RepoName
删除repo
- 删除svn上repo的目录
- 执行
pod repo remove RepoName
命令