多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 1. 将 Pods 添加到 Xcode 项目 在你开始之前 1. 检查 [Specs 库](https://github.com/CocoaPods/Specs) 或 [cocoapods.org](https://cocoapods.org/) 以确保您想要使用的库可用。 1. 在你的电脑上[安装 CocoaPods](https://guides.cocoapods.org/using/getting-started.html#toc_3)。 ## 1.1 安装 1. 创建一个 [Podfile](https://guides.cocoapods.org/using/the-podfile.html),并添加您的依赖关系: ~~~ target 'MyApp' do pod 'AFNetworking', '~> 3.0' pod 'FBSDKCoreKit', '~> 4.9' end ~~~ 3. 在项目目录中运行 `pod install`。 4. 打开 App.xcworkspace 并构建。 # 2. 用 CocoaPods 创建一个新的 Xcode 项目 要使用CocoaPods创建一个新项目,请遵循以下简单步骤: 1. 像通常一样在 Xcode 中创建一个新项目。 2. 打开终端窗口,并 `cd` 到您的项目目录。 3. 创建一个 Podfile。 这可以通过运行 `pod init` 来完成。 4. 打开你的 Podfile。 第一行应指定支持的平台和版本。 ~~~ platform :ios, '9.0' ~~~ 5. 为了使用CocoaPods,你需要定义Xcode目标来链接它们。 例如,如果你正在编写一个iOS应用程序,它将是你的应用程序的名称。 通过编写目标 `$ TARGET_NAME` 创建一个目标部分,然后几行之后添加 `end` 。 6. 通过在目标块内的单行上指定 `pod'$ PODNAME'` 来添加 CocoaPod。 ~~~ target 'MyApp' do pod 'ObjectiveSugar' end ~~~ 7. 保存你的Podfile。 8. 运行 `pod install` 9. 打开创建的 MyApp.xcworkspace 。 这应该是您每天用来创建应用程序的文件。 # 3. 与现有 workspace 集成 将 CocoaPods 与现有的工作空间集成需要在你的 Podfile 中增加一行。 只需在目标块外部指定 .xcworkspace 文件名,如下所示: ~~~ workspace 'MyWorkspace' ~~~ # 4. 何时使用 pod install 与 pod update? 很多人对何时使用 pod install 以及何时使用 pod update 感到困惑。 尤其是,他们经常使用 pod update,而不是使用 pod install。 您可以在[本专用指南](https://guides.cocoapods.org/using/pod-install-vs-update.html)中找到有关何时使用每种命令的详细说明以及每个命令的预期用法。 # 5. 我应该将 Pods 目录迁入到源代码控制吗? 您是否迁入 Pods 文件夹取决于您,因为工作流程因项目而异。 我们建议您将 Pods 目录保持在源代码管理下,并且不要将其添加到 .gitignore 中。 但最终这个决定取决于你: ## 5.1 迁入Pods目录的好处 * 克隆仓库之后,即使没有在机器上安装 CocoaPods,项目也可以立即生成并运行。 没有必要运行 `pod install`,并且不需要 Internet 连接。 * Pod 工件(代码/库)始终可用,即使 Pod(例如GitHub)的源停止工作。 * 在克隆仓库之后,Pod 工件保证与原始安装中的相同。 ## 5.2 忽略Pods目录的好处 * 源代码控制仓库将更小,占用更少的空间。 * 只要所有 Pod 的源代码(例如 GitHub)可用,CocoaPods 通常都可以重新创建相同的安装。 (从技术上讲,不能保证在 Podfile 中不使用提交 SHA 时,运行 `pod install` 将获取并重新创建相同的工件,在 Podfile 中使用 zip 文件时尤其如此。) * 执行源代码控制操作时不会出现任何冲突,例如合并具有不同 Pod 版本的分支。 无论您是否迁入 Pods 目录,Podfile 和 Podfile.lock 都应始终保持在版本控制之下。 # 6. 什么是 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。 除非在 Podfile 中更新依赖项或调用了 `pod install`(这将导致生成新的Podfile.lock),否则 CocoaPods 将遵循 Podfile.lock 中的 Pod 版本。 通过这种方式,CocoaPods 避免了因依赖关系发生意外更改而导致的头痛。 Google提供了一个很棒的视频,介绍它的工作原理: ["CocoaPods and Lockfiles (Route 85)"](https://www.youtube.com/watch?v=H-zK1mEwTe0) # 7. 幕后发生了什么? 在 Xcode 中,直接从[ ruby 源代码](https://github.com/CocoaPods/CocoaPods/blob/master/lib/cocoapods/installer/user_project_integrator.rb#L61-L65)引用,它: 1. 创建或更新 [workspace](https://github.com/CocoaPods/CocoaPods/blob/master/lib/cocoapods/installer/user_project_integrator.rb#L82) 。 2. 如果需要,将您的项目添加到 workspace 。 3. 如果需要,[将 CocoaPods 静态库项目添加到工作区](https://github.com/CocoaPods/CocoaPods/blob/master/lib/cocoapods/installer/user_project_integrator.rb#L88-L94)。 4. 将libPods.a添加到:[targets => build phases =>link with libraries](https://github.com/CocoaPods/CocoaPods/blob/master/lib/cocoapods/installer.rb#L385-L393)。 5. 将 CocoaPods [Xcode 配置文件](https://github.com/CocoaPods/CocoaPods/blob/master/lib/cocoapods/installer/user_project_integrator/target_integrator.rb#L112)添加到您的应用程序项目中。 6. 将应用的[目标配置](https://github.com/CocoaPods/CocoaPods/blob/master/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb#L46-L73)更改为基于 CocoaPods 的配置。 7. 添加构建阶段以从安装到应用包的任何Pod中[复制资源](https://github.com/CocoaPods/CocoaPods/blob/master/lib/cocoapods/installer/user_project_integrator/target_integrator.rb#L145)。 即在所有其他构建阶段之后的“Script build phase”,具有以下内容: * Shell: `/bin/sh` * Script: `${SRCROOT}/Pods/PodsResources.sh` 请注意,如果 CocoaPods 静态库已经在您的项目中,则跳过步骤3。 这主要基于 Jonah Williams 在[静态库](http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4)上的工作。 # 8. Pod 和子模块 CocoaPods 和 git 子模块试图解决非常类似的问题。 都努力简化在您的项目中包含第三方代码的过程。 子模块链接到该项目的特定提交,而 CocoaPod 绑定到版本化的开发人员版本。 ## 8.1 从子模块切换到 CocoaPods 在决定完全转换到 CocoaPods 之前,请确保您当前使用的库都是可用的。记录当前使用的库的版本也是一个好主意,这样您就可以设置 CocoaPods 使用相同的库。这也是一个好主意,以增量的方式,处理依赖而不是一个大的移动。 1. 如果你还没有安装 CocoaPods,请安装 2. 创建你的 Podfile 3. [删除子模块引用](http://davidwalsh.name/git-remove-submodule) 4. 在 Podfile 中添加对已移除库的引用 5. 运行 `pod install`