[TOC]
# 1. 开始
我们将通过使用`pod lib create`来创建一个完整的pod来引导过程。 所以让我们从最初的命令开始:
~~~
pod lib create MyLibrary
~~~
> 注意1:要使用您自己的 pod-template,您可以添加参数 `--template-url = URL`,其中 URL 是包含兼容模板的 git 仓库地址。
> 注意2:您可以按回车键选择默认(带下划线)选项。
# 2. Objective-C 或 Swift
第一个问题是你想用什么语言来构建一个 pod。对于这两个选择,CocoaPods 都将把您的库生成一个 framework 。
# 3. 做一个演示应用程序
模板将为您的库生成一个 Xcode 项目。 这意味着您不必在 Xcode 中创建新项目。
如果你想为 pod 尝试一个 MyLib 的示例项目,或者需要让你的库的测试在应用程序内运行(交互测试,自定义字体等),那么你应该说是。 一个很好的指标是“这个 Pod 应该包含屏幕截图吗?”; 如果是这样,那么你应该有一个演示。
# 4. 选择测试框架
你应该测试你的库。 测试可确保使用您的库的人的稳定性在开放源代码库中,这意味着人们可以在知道自己没有违背期望的情况下进行更改。 我们推荐使用测试框架,而不是依赖 Apple 的 XCTest,但包含在内。 在 Objective-C 中,我们包含两种流行测试框架的选择; Specta / Expecta 和 Kiwi 。 如果您不知道如何选择,请使用 Specta / Expecta 。
| Specta/Expecta | Kiwi |
| --- | --- |
| Objective-C 和 Cocoa 的轻量级 TDD / BDD 框架。 | Kiwi 是 iOS 开发的行为驱动开发库。 目标是提供一个安装和使用起来非常简单的 BDD 库。 |
| [GitHub repo](https://github.com/specta/specta) | [GitHub repo](https://github.com/kiwi-bdd/Kiwi) |
> TDD:Test-Driven Development 测试驱动开发
> BDD:Behavior Driven Development 行为驱动开发
主要区别在于 Kiwi 是一种对 Stubs/Mocks/Expectations 的一体化方法,而 Specta / Expecta 是通过不同 Podspecs 的模块化方法。 我们在 MyLib-Tests.pch 中包含了所有必要的包含和设置,以便您不必将它们包含在每个文件中。
在 Swift 中,我们只提供 [Quick / Nimble ](https://github.com/Quick/Quick)选项,因为这看起来是主要的测试库。
# 5. 基于视图的测试
根据您建立的库,您可能会发现基于快照的测试是验证视图上不同操作结果的智能方法。 我们建议使用 [FBSnapShotTestCase](https://github.com/facebook/ios-snapshot-test-case),如果您使用的是 Specta / Expecta,那么我们会包含一个 [Pod](https://github.com/dblock/ios-snapshot-test-case-expecta) 来改进语法。
# 6. Objective-C 的前缀
为了包装一个 Objective-C 项目,我们想知道你的类的前缀。 这意味着我们可以让所有由 CocoaPods 生成的类都适合您的样式,并且从 Xcode 内部生成的所有类都将以您的前缀开头。 我们知道 Apple 不赞成使用前缀,但实际上它们在 Objective-C 代码库中仍然占有一席之地。
# 7. Pod Lib 创建模板
随着问题的结束,我们在新创建的 Project 上运行 `pod install`。 让我们看看结果:
~~~
$ tree MyLib -L 2
MyLib
├── .travis.yml
├── _Pods.xcproject
├── Example
│ ├── MyLib
│ ├── MyLib.xcodeproj
│ ├── MyLib.xcworkspace
│ ├── Podfile
│ ├── Podfile.lock
│ ├── Pods
│ └── Tests
├── LICENSE
├── MyLib.podspec
├── MyLib
│ ├── Assets
│ └── Classes
│ └── RemoveMe.[swift/m]
└── README.md
~~~
我们已尽量减少根文件夹中的文件数量,您将看到以下文件:
* .travis.yml : Travis-ci 的设置文件。
* _Pods.xcproject : 为您的 Pod 的项目提供符号链接
* LICENSE : 默认为 MIT 许可。
* MyLib.podspec : 库的 Podspec。
* README.md : markdown 语法的 README 文件。
* RemoveMe.swift / m : 单个文件以确保最初编译工作正常。
和以下文件夹:
* MyLib : 这是你放置你的库的类的地方(同名文件夹)
* Example : 这是生成的 Demo&Testing 包
# 8. 把你的库放在一起
CocoaPods 会马上打开你的 Xcode 项目; 从那里你可以编辑由 CocoaPods 生成的所有文件。 我们来看看 Xcode 的扩展版本:
![](https://guides.cocoapods.org/assets/images/pod_lib_create/xcode.png =1130x704)
1. 您可以编辑您的 Podspec 元数据,这可以让您更改 README 和 Podspec。
2. 这是演示库,如果创建过程中没有对它作出肯定的回答,不会有该项目。
3. 这是您之前选择的框架的一个残缺测试规范。
4. 这是 Development Pods 部分,实际上您可以在库工作。 请参阅下面的详细信息。
5. 最后在设置项目时使用 Pods。
在这里值得一提的是,因为这经常吸引人们,所以 Swift 库需要将它的类声明为`public`,以便在示例库中看到它们。
## 8.1 Development Pods
Development Pod 与普通的 CocoaPods 不同,它们是符号链接的文件,所以编辑它们会改变原始文件,所以你可以在 Xcode中 使用你的库。 您的示例和测试需要使用`#import <MyLib / XYZ.h>`格式包含对头文件的引用。
> 注意:由于 Development Pod 的实现细节,当您将新的/现有的文件添加到 Pod / Classes 或 Pod / Assets 或更新您的 podspec 时,应该运行 `pod install` 或 `pod update `
# 9. 添加 Travis CI
该模板包含一个 .travis.yml 文件,该文件将运行项目中包含的默认测试。 如果你在 GitHub 上有一个开源的仓库,打开 Travis CI 上的[个人资料](https://travis-ci.org/profile/)并开启库。
![](https://guides.cocoapods.org/assets/images/pod_lib_create/travis-ci.png =740x194)
# 10. 部署您的库
所以你已经准备好了库。 首先,您应该检查 Podspec 是否正确,因为您无法部署有错误的pod。 这可以用两种方法完成,即 `pod lib lint` 和 `pod spec lint` 。 它们之间的区别在于 `pod lib lint` 不访问网络,而 `pod spec lint` 检查外部仓库(spec)和相关分支(tag)。
如果您将开源库部署到 [trunk](https://guides.cocoapods.org/making/getting-setup-with-trunk),则不能有 CocoaPods 警告,可以有 Xcode 警告。 您应该继续使用 [trunk 指南](https://guides.cocoapods.org/making/getting-setup-with-trunk) 开始部署给公众。
如果您正在部署到私人仓库,您需要添加仓库。 查看 [Private Specs Repos](https://guides.cocoapods.org/making/private-cocoapods) 的指南来设置。 如果要部署到现有的专用仓库,请使用以下命令来部署:
~~~
pod repo push SPEC_REPO *.podspec --verbose
~~~
# 11. 完成