- CocoaPods概念
- CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具。用 Ruby 写的,并划分成了若干个 Gem 包可以节省设置和更新第三方开源库的时间,将第三方的依赖库统一管理起来,配置和更新只需要通过简单的几行命令即可完成。
- 执行 pod update , CocoaPods 就会自动将这些第三方开源库的源码下载下来,并且为我们的工程设置好相应的系统依赖和编译参数。
- CocoaPods原理
- 下载原理
格式:
pod '依赖名', :git => '依赖项目地址', :branch => '分支'
pod '依赖名', :git => '依赖项目地址', :tag => '分支'
说明:
当使用Cocoapods导入私有库时:
Cocoapods先是根据:git => ‘git@xxx.git‘ 找到对应的git仓库;
然后根据:tag => ‘1.0.0’定位到对应tag的提交,或者根据 :branch => ‘develop’ 定位到对应分支的提交,如果没有注明Pod依赖包版本则定位到最后一次提交;
然后在这次提交中检索后缀为.podspec的文件;
然后验证name是否与podfile中的一致,如果不一致则install会报错;
验证成功后,就会根据Podspec中的s.source_files找到需要导入的代码文件,并通过其他的的数据找到对应的配置文件或资源文件等;
最后,将其下载到本地项目中。
当使用Cocoapods导入共有库时:
共有库要将podspec文件上传到cocoapods, 在导入的时候通过名字React去cocoapods匹配对应的podspec;
然后根据git地址找到对应的仓库和对应的版本;
然后去匹配新的podspec;
后面流程同私有库
-
- 集成原理
- 当所有的依赖库都下载完后,Cocoapods会将所有的依赖库都放到另一个名为Pods的项目中,然后让主项目依赖Pods项目
- 这样,源码管理工作都从主目录移到了Pods项目中。Pods项目最终会编译成为一个名为libPods.a的文件,主项目只要依赖这个.a文件即可
- 对于资源文件,Cocoapods提供了一个名为Pods-resource.sh的bash脚本,该脚本在每次项目编译的时候都会执行,将Pods依赖库的各种资源文件复制到目标目录中
- Cocoapods还通过一个名为Pods.xcconfig的文件来在编译时设置所有的依赖和参数
- 集成原理
-
- 版本控制原理
- 当执行完pod install之后,cocoapods会生成一个podfile.lock的文件
- podfile.lock文件最大的用处在于多人开发。如果你没有在podfile中指定pods版本pod ‘React’,那么默认为获取当前React依赖库的最新版本
- 当团队中的某个人执行完pod install命令后,生产的podfile.lock文件就记录下了当时最新pods依赖库的版本,这时团队中的其他人check下来这份包含podfile.lock文件的工程以后,再去执行pod install命令时,获取下来的pods依赖库的版本和最开始用户获取到的版本一致
- 如果没有podfile.lock文件,后续所有用户执行pod install命令都会获取最新版本的React,这就可能造成一个团队使用的依赖库版本不一致,这对团队协作来说绝对是个灾难
- 版本控制原理
- CocoaPods核心组件
- CocoaPods/CocoaPods
这是面向用户的组件,每当执行一个 pod 命令时,这个组件将被激活。它包括了所有实用 CocoaPods 的功能,并且还能调用其它 Gem 包来执行任务。
-
- CocoaPods/Core
Core Gem 提供了与 CocoaPods 相关的文件(主要是 Podfile 和 Podspecs)的处理
-
-
- Podfile:该文件用于配置项目所需要的第三方库,它可以被高度定制。
- Podspecs:该文件描述了一个库将怎样被添加进工程中。.podspec 文件可以标识该第三方库所需要的源码文件、依赖库、编译选项,以及其他第三方库需要的配置
- CocoaPods/Xcodeproj
-
负责处理工程文件,它能创建以及修改 .xcodeproj 文件和 .xcworkspace 文件. 它也可以作为一个独立的包使用,当你要编写修改项目文件的脚本时,可以考虑使用 CocoaPods/Xcodeproj
-
- 与CocoaPods相关的两个目录
- ~/.CocoaPods/repos/: 这个目录存储远端的 podspec 文件到本地。
- ~/Library/Caches/CocoaPods/: 这个目录就是缓存文件的存储目录。
- 与CocoaPods相关的两个目录
- CocoaPods安装
- 替换源
CocoaPods 是基于 ruby ecosystem 的,需要 ruby 环境,使用 ruby 的 gem 命令。所以我们的系统要有 ruby 环境
而 Mac 系统默认会安装好 ruby 环境,可以在终端输入 $gem sources -l 命令查看系统 ruby 默认源为 https://rubygems.org/,但这个源在国内是访问不到的,所以需要更换 ruby 镜像。
我们可以使用 ruby-china 的源https://gems.ruby-china.com
-
-
- 移除系统 ruby 默认源
-
$gem sources --remove https://rubygems.org/
-
-
- 使用新的源
-
$gem sources –a https://gems.ruby-china.com
-
-
- 验证是否替换成功
-
$gem sources -l
-
- 安装 CocoaPods
- 选择版本
- 安装 CocoaPods
安装最新版本: $sudo gem install –n /usr/local/bin CocoaPods
安装指定版本: $sudo gem install –n /usr/local/bin CocoaPods –v 1.0.0
安装最新的release beta版本: $sudo gem install –n /usr/local/bin CocoaPods --pre
-
-
- 安装
-
$pod setup
Pod setup命令所有第三方的 Podspec 索引文件更新到本地的 ~/.CocoaPods/repos 目录下。
所有的第三方开源库的 Podspec 文件都托管在 https://github.com/CocoaPods/Specs 管理,我们需要把这个 Podspec 文件保存到本地,这样才能使用命令 pod search 来搜索一个开源库。
注意:首次执行时间比较久。
结果:
没执行 pod setup:用户目录下找不到 .CocoaPods/repos路面
执行过,没成功: 会创建 .CocoaPods/repos目录,但为空
执行了,成功:说明把 GitHub 上的 Podsepc 文件更新到了本地,那么会创建~/.CocoaPods/repos 目录,并且 repos 目录里有一个 master 目录,这个 master 目录保存的就是 GitHub 上所有第三方开源库的 Podspec 索引文件。
验证:
$pod --version
- CocoaPods 使用
- 常用命令
- $pod setup
- 常用命令
将所有第三方的 Podspec 索引文件更新到本地的 ~/.CocoaPods/repos/ 目录下,更新本地仓库。
-
-
- $pod repo update
-
执行 pod repo update 更新本地仓库,本地仓库完成后,即可搜索到指定的第三方库,作用类似 pod setup。
不过这个命令经常不单独调用。比如执行 pod setup、pod search、pod install、pod update 会默认执行 pod repo update。
-
-
- $pod search 开源库: 查找某个开源库
- $pod list: 列出所有可用的第三方库,现在已经 2.4W+ 了,还在不断地增长。
- $pod install
-
根据 Podfile.lock 文件中列举的版本号来安装第三方框架,如果一开始 Podfile.lock 文件不存在,就会按照 Podfile 文件中列举的版本号来安装第三方框架。
如果检查到当前三方库已经有的话,那就不会去下载了。
$pod install --no-repo-update : 安装开源库之前,不会执行 pod repo update指令
-
-
- $pod update
-
将所有第三方框架更新到最新版本,并且创建一个新的 Podfile.lock 文件。
无论当前三方库是否在项目中已经存在,都会重新下载更新。
$pod update --no-repo-update : 更新开源库之前,不会执行 pod repo update 指令