CocoaPods
管理Xcode
项目的library dependencies
(依赖库)。
项目的 dependencies
(依赖项) 在一个名为 Podfile
的文本文件中指定。CocoaPods
将解析库之间的dependencies
(依赖关系),获取生成的源代码,然后将其链接到Xcode
工作区中以构建项目。
CocoaPods
的最终目的是通过创建一个更加集中的生态系统来提高第三方开源库的可发现性和参与度。
安装CocoaPods
CocoaPods
是用 Ruby 构建的,可以用 macOS
上的默认 Ruby
安装。你也可以使用 Ruby
版本管理器,但是建议你使用 macOS
上提供的标准 Ruby
。
使用默认的 Ruby
安装需要在安装 gems
时使用 sudo
。
1 | $ sudo gem install cocoapods |
Sudo-less installation
如果您不想为此过程授予 RubyGems
管理员权限,则可以通过如下2种方法来告诉 RubyGems
安装到你的用户目录中:
方法一:
1 | $ gem install cocoapods --user-install |
方法二:
打开终端并使用首选编辑器创建或编辑 ~/.bash_profile
,然后将以下行输入到文件中:
当然不同的 macOS
版本可能是编辑 ~/.zshrc
,我们推荐使用方案二。
1 | export GEM_HOME=$HOME/.gem |
更新 CocoaPods
要更新CocoaPods
,只需再次安装gem
1 | $ [sudo] gem install cocoapods |
或者更新到预发布版本
1 | $ [sudo] gem install cocoapods --pre |
如果您最初使用 sudo
安装cocoapods gem
,那么应该再次使用sudo
。
稍后,当您通过安装pods
来积极使用CocoaPods
时,当CocoaPods X
的新版本可用时,你将收到通知。
使用 CocoaPods
开始之前,检查Specs仓库 或 cocoapods.org,以确保您要使用的库可用。
创建 Podfile
Podfile 是一种规范(或者明细单),它描述了一个或多个Xcode
项目的 targets
的 dependencies
。 该文件应简单地命名为Podfile
。
切换到项目根目录,使用如下命令创建 Podfile
文件:
1 | $ pod init |
将 dependencies 添加到单个 targets
1 | target 'MyApp' do |
链接app和它的测试包
1 | source 'https://github.com/CocoaPods/Specs.git' |
多个 targets 使用同一个 pods,请使用 abstract_target
1 | # There are no targets called "Shows" in any Xcode projects |
Podfile
的根目录下有一个隐式抽象target
,因此您可以将上面的示例编写为:
1 | pod 'ShowsKit' |
关于 Podfile
语法可学习 Podfile Syntax Reference
pod install
1、pod install vs pod update
1 | $ pod install |
pod install
是在您第一次要为项目检索pods
时使用,也每次在编辑Podfile
以添加,更新或删除pod
时使用,它不会尝试更新已安装pod
的版本。- 当你想将
pods
更新到较新版本时,才使用pod update [PODNAME]
。
2、pod install的作用
每次运行
pod install
命令(即下载并安装新的pods
)时,它都会为每个pod
中将安装的版本写入Podfile.lock
文件中。该文件跟踪每个pod
的安装版本,并锁定这些版本。当运行
pod install
时,它只解决尚未在Podfile.lock
文件中列出的pod
的dependencies
(依赖关系).
对于 Podfile.lock
中列出的Pod
,它将下载Podfile.lock
中列出的显式版本,而不会尝试检查是否有更新的版本
对于尚未在Podfile.lock
中列出的Pod
,它将搜索与Podfile
中描述的相匹配的版本
关于 pod install
更详细的可学习 pod install vs. pod update
pod outdated
当运行 pod outdated
时,CocoaPods
将列出所有pods
,这些 Pod
具有比 Podfile.lock
(当前为每个Pod
安装的版本)中列出的版本更高的版本。 这意味着,如果您在这些 pods
上运行 pod update PODNAME
,它们将被更新,只要新版本仍与 Podfile
中设置的 pod'MyPod','〜> x.y'
之类的限制相匹配。
pod update
当您运行pod update PODNAME
时,CocoaPods
将尝试查找Pod PODNAME
的更新版本,而不考虑Podfile.lock
中列出的版本。 它将把Pod
更新到可能的最新版本(只要它与Podfile中的版本限制匹配)。
如果您运行没有Pod名称的 pod update
,CocoaPods
会将Podfile
中列出的每个Pod
更新为可能的最新版本。
提示
一般我们的策略是不将 Pods
文件夹提交到共享 repository
中,但是你应始终提交并推送Podfile.lock
文件。
否则,将破坏上面解释的关于pod install
能够锁定您的pod
安装版本的整个逻辑。
Pods 和 Submodules
CocoaPods
和 git submodules
(子模块)试图解决非常相似的问题。两者都努力简化在项目中包含第三方代码的过程。Submodules
(子模块)链接到该项目的特定提交,而CocoaPod
绑定到版本化的开发人员版本。