告别了只会 pod init
、pod install
的时期~
CocoaPods 简介
CocoaPods 是用 ruby 语言编写的用来管理 iOS 项目的依赖管理器。
为什么要使用 CocoaPods ?
以前使用第三方库步骤:
- 拷贝源码
- 手动添加 framework
- 设置 BuildPhrase
若有组件升级,需要重新走一遍以上流程。整个流程很繁琐、浪费时间且容易出错!
Use CocoPods:
- 中心化配置:所有依赖的第三方库都配置到 Podfile 文件下进行依赖和版本控制。便于管理和更新
- 一键集成:只需运行
pod install
即可把所有依赖安装进项目中 - 自动处理依赖关系
CocoaPods 原理
在 pod install
的时候 CocoaPods 会根据填写在 Podfile 中的名字,在拉取的 source 的 podspec 仓库中找到它们对应的 .podspec 文件。.podspec 文件记录了该依赖的 remote url 和安装方式以及依赖关系。通过 .podspec 就可以将依赖下载并安装到本地项目中。
CocoaPods 与 Bundler
除了 CocoaPods 和 Bundler,这里再引入一个 RVM 工具。
RVM 与 Ruby
RVM 是一个管理多个 Ruby 环境的工具,可以提供一个便捷的多版本 Ruby 环境的管理和切换。通过 RVM 我们可以轻松的切换 Ruby 的版本,从而使用不同的 Ruby 环境。
Ruby 和 RubyGem
RubyGems 简称 Gem,是一个用于对 Ruby 组件进行管理及打包的工具。通过 Gem 我们可以管理多个 Ruby 工具集。在日常 gem install xxx
的时候,其实是通过 rubygems.org 网站去查询对应的 Gem Package。
我们日常用到的很多工具都是一个 Gem 工具,例如:Bundler、CocoaPods、Fastlane 等等。
CocoaPods 和 Bundler (Bundle)
Bundler 是一个 Ruby 工具,是一个 Gem。Bundler 是用来管理项目中 Gem 依赖和版本的工具。如果我们用一个 iOS (Android、JavaScript、Python)工程来类比一个 Ruby 工程,Bundler 就相当于工程中的 CocoaPods(Gradle、npm 或者 yarn、pypi)。
Bundler 这个工具中,也有对应的来描述这个工程的依赖关系的文件 – Gemfile 。其中使用 Ruby 的语法来描述工程所需依赖、版本等信息。
实战部分
编写 Podfile
其中的 source
、workspace
如果你不修改的话,默认不用显性声明,inhibit_all_warnings!
是可选配置。
安装依赖
pod install
后,新增 Podfile.lock、Pods/、xxx.xcworkspace
- Podfile.lock: 第一次pod install后生成的文件,Podfile.lock 中会标注项目当前依赖库的准确版本,其中包括了项目在 Podfile 中直接标注使用的库,以及这些库依赖的其他库。
- xxx.xcworkspace: 组织了 xxx.xcodeproj 和 Pods.xcodeporj 后续在这个工作区开发
- Pods/ : 所有 Pod 的目录,每一个 Pod 对应 Pods 的一个 target 这个 target 最终会被打包为一个静态库 .a 。工程还有一个 Pods-xxx 的 target 最终打包为一个总的 Pods-xxx.a 被项目所依赖。
Pods/ 内容
- 各个 Pod 包括:
- 源码
- .xcconfig:编译说明书
- .pch:预编译处理文件
- .dummy.m:类的空实现
- Pods-xxx 额外包括:
- debug/release.xcconfig:对应主 Project –> Info –> Configurations 里的 xcconfig
- resources.sh:编译或处理 .storyboard、.xcassets 等资源文件
- framework.sh:用于实现 framework 类型第三方库的链接
- Headers:头文件的软链接,
HEADER_SEARCH_PATHS
的搜索目录 - Mainfest.lock:Podfile.lock 的拷贝文件
- Target Support Files:存放 build 时所依赖的一些文件
版本控制
- Pod/:因为这里面的 Pod 文件本身有 Pod 各自的远程仓库去存放。无需加入版本控制,在 .gitignore 里申明忽略就好。
- Podfile.lock:可以保证
pod install
后依赖的第三方库版本一致。不会出现 UserApod install
后,某个依赖升级,导致后面 UserBpod install
工程里某个依赖版本跟 UserA 不一样的情况。
创建自己的私有 Pod
创建步骤
- 创建 Pod 工程
|
|
- 编写代码
- 编写 .podspec 文件
- 提交代码,按照 .podspec 中的 .version 打 tag
- 校验 .podspec 文件,包括语法规则和内容完整性等
|
|
- 创建 podsepc 远程仓库
- 将 podspec 远程仓库拉取到本地
|
|
- 将 .podspec 文件推送到远程仓库
|
|
使用
要在项目中使用创建的私有 Pod,则需要在 Podfile 中添加
|
|