<将 Pods 添加到 Xcode 项目
开始之前
- 查看 Specs 存储库或 cocoapods.org,以确保您想要使用的库可用。
- 在您的计算机上安装 CocoaPods。
<安装
- 创建一个 Podfile,并添加您的依赖项
target 'MyApp' do
pod 'AFNetworking', '~> 3.0'
pod 'FBSDKCoreKit', '~> 4.9'
end
- 在您的项目目录中运行
$ pod install
。 - 打开
App.xcworkspace
并进行构建。
<使用 CocoaPods 创建新的 Xcode 项目
要使用 CocoaPods 创建新项目,请遵循以下简单步骤
- 像往常一样在 Xcode 中创建新项目。
- 打开终端窗口,并在您的项目目录中
$ cd
。 - 创建一个 Podfile。可以通过运行
$ pod init
来完成此操作。 - 打开您的 Podfile。第一行应指定受支持的平台和版本。
platform :ios, '9.0'
- 为了使用 CocoaPods,您需要定义要链接它们的 Xcode 目标。因此,例如,如果您正在编写 iOS 应用程序,它将是您的应用程序的名称。通过编写
target '$TARGET_NAME' do
和几行后的end
来创建一个目标部分。 - 通过在目标块内单行指定
pod '$PODNAME'
来添加 CocoaPod。
target 'MyApp' do
pod 'ObjectiveSugar'
end
- 保存您的 Podfile。
- 运行
$ pod install
- 打开创建的
MyApp.xcworkspace
。这应该是您每天用来创建应用程序的文件。
<与现有工作空间集成
将 CocoaPods 与现有工作空间集成需要在您的 Podfile 中添加一行。只需在目标块外部指定 .xcworkspace
文件名,如下所示
workspace 'MyWorkspace'
<何时使用 pod install
与 pod update
?
许多人对于何时使用 pod install
和何时使用 pod update
感到困惑。特别是,他们经常在应该使用 pod install
的地方使用 pod update
。
您可以在 本专门指南 中找到有关何时使用每条命令以及每条命令的预期用途的详细说明。
<我应该将 Pods 目录检入源代码管理吗?
是否检入 Pods
文件夹取决于您,因为工作流程因项目而异。我们建议您将 Pods 目录保留在源代码管理中,并且不要将其添加到 .gitignore
中。但最终这个决定取决于您
<检入 Pods 目录的好处
- 克隆存储库后,项目可以立即构建并运行,即使机器上没有安装 CocoaPods。无需运行
pod install
,也不需要互联网连接。 - 即使 Pod 的来源(例如 GitHub)已关闭,Pod 工件(代码/库)始终可用。
- 克隆存储库后,Pod 工件保证与原始安装中的工件相同。
<忽略 Pods 目录的好处
- 源代码管理存储库将更小,占用更少的空间。
- 只要所有 Pod 的来源(例如 GitHub)可用,CocoaPods 通常能够重新创建相同的安装。(从技术上讲,无法保证在 Podfile 中不使用提交 SHA 时,运行
pod install
将获取并重新创建相同的工件。当在 Podfile 中使用 zip 文件时尤其如此。) - 在执行源代码管理操作(例如合并具有不同 Pod 版本的分支)时,不会有任何冲突需要处理。
无论您是否检入 Pods
目录,都应始终将 Podfile
和 Podfile.lock
保存在版本控制中。
<什么是 Podfile.lock
?
此文件在首次运行 pod install
后生成,并跟踪已安装的每个 Pod 的版本。例如,想象 Podfile 中指定了以下依赖项
pod 'RestKit'
运行 pod install
将安装当前版本的 RestKit,从而生成一个 Podfile.lock
,其中指明了已安装的确切版本(例如,RestKit 0.10.3
)。由于有了 Podfile.lock
,稍后在不同的机器上对这个假设的项目运行 pod install
时,即使有较新版本可用,它仍会安装 RestKit 0.10.3。CocoaPods 将遵守 Podfile.lock
中的 Pod 版本,除非在 Podfile 中更新了依赖关系或调用了 pod update
(这将导致生成新的 Podfile.lock
)。通过这种方式,CocoaPods 避免了因依赖关系发生意外更改而导致的头痛。
Google 有一个关于此工作原理的精彩视频:"CocoaPods 和 Lockfiles(第 85 条路线)"。
<幕后发生了什么?
在 Xcode 中,直接引用 ruby 源,它
- 创建或更新 工作区。
- 在需要时将 项目添加到工作区。
- 在需要时将 CocoaPods 静态库项目添加到工作区。
- 将 libPods.a 添加到:目标 => 构建阶段 => 使用库链接。
- 将 CocoaPods Xcode 配置文件 添加到应用的项目。
- 将应用的 目标配置 更改为基于 CocoaPods 的配置。
- 将构建阶段添加到 从安装的任何 pod 中复制资源 到应用包。即,在所有其他构建阶段之后添加一个“脚本构建阶段”,其中包含以下内容
- Shell:
/bin/sh
- 脚本:
${SRCROOT}/Pods/PodsResources.sh
- Shell:
请注意,如果 CocoaPods 静态库已在您的项目中,则从第 3 步开始的步骤将被跳过。这在很大程度上基于 Jonah Williams 在 静态库 中的工作。
<Pods 和子模块
CocoaPods 和 git 子模块尝试解决非常相似的问题。两者都致力于简化在您的项目中包含第三方代码的过程。子模块链接到该项目的特定提交,而 CocoaPod 则与版本化开发者版本相关联。
<从子模块切换到 CocoaPods
在您决定完全切换到 CocoaPods 之前,请确保您当前使用的库都可用。记录您当前使用的库的版本也是一个好主意,以便您可以设置 CocoaPods 以使用相同的库。按依赖项逐步进行,而不是一次性全部迁移,也是一个好主意。