创建你的第一个 CocoaPod
在构建 iOS 或 OS X 应用程序时,CocoaPods 是帮助管理依赖的一个很好的工具。经过多年良好的支持,CocoaPods 的成熟是显而易见的。虽然在 iOS 或 OS X 软件项目中使用 CocoaPods 是很常见的,但实际上创建一个 pod 应用程序并不常见。本教程将指导您创建第一个 pod,它将提供一些如何创建优秀 pod 的建议。
1. 安装 CocoaPods
显然,要创建一个 Pod,需要安装 CocoaPods。 它可以作为 RubyGems 的 Ruby gem 提供。 要安装 CocoaPods,请从命令行执行以下命令:
gem install cocoapods
本教程是针对 CocoaPods 0.37.2 编写的。
2. 流程概述
从较高的层面来说,创建第一个 pod 需要五个步骤:
- 确定你的第一个 pod 的想法。
- 使用
pod lib
命令为您的 pod 创建主要目录结构和相关文件。 - 更新您的 pod 的元数据,例如其许可证和版本信息。
- 为您的 pod 添加代码。 这包括 pod 本身的代码以及示例项目所需的任何代码。
- 使 pod 公开可用。
3. Podstorming
Podstorming 实际上并不是一个单词,但现在是时候为您的第一个 pod 头脑风暴了。 官方 Specs repository 中有超过 10,000 个公开可用的标签。 人们发现各种各样的东西可以作为仓库使用。 这里有一些建议可以帮助你开始 podstorming,我的意思是头脑风暴:
- 实用程序代码:您是否对如何执行某些字符串操作有独特的看法?您是否有一个您喜欢的子类,在 UIView 上执行一个平滑的动画?像这样的特定的实用程序代码是什么可以变成一个pod的很好的例子。这是一个很好的例子,可以把它变成一个 pod。它通常已经很好地分解并与其他现有代码基分离。
- 第三方软件包:您是否为另一个第三方 API 创建了软件包?你是否有一个你想为其他应用程序提供钩子的应用程序,比如身份认证吗?您的公司是否为其他iOS应用程序提供了一个 web API,以方便其他 iOS 应用程序集成?如果是这样,那么 pod 是有意义的,因为它是其他 iOS 应用程序轻松集成这些包的简单方法。
- UI组件:您是否创建了一个您希望其他应用程序能够使用的流畅的 UI 小部件?这些是我最喜欢的豆荚。通过简单地包含一个 pod 依赖关系,能够为应用程序添加一个复杂且令人愉快的 UI 组件非常棒。
- 任何你希望别人能够使用的东西。你创造了一些你认为别人会觉得有用的东西吗?如果是这样,把它变成一个仓库,以便其他人可以轻松使用它。
本教程将引导您创建一个可让您创建闪烁 UILabel 的 pod。 我们将其称为 BlinkingLabel。
4. 创建项目
现在可以开始了。现在您知道您的 Pod 将提供的功能,现在可以创建它了。 pod lib
命令是一个重要的工具,我们将在创建过程中用于两个目的:
-
pod lib lint
将验证您的 pod 的一切正常,并且可以通过 CocoaPods 使用。 -
pod lib create
实际上可以帮助您通过提供标准目录结构以及高质量 pod 所需的一系列样板文件来帮助您快速启动。pod lib create
不是创建你的 pod 的唯一方法,但它是最简单的。
打开终端窗口,进入到工作目录,然后执行以下命令:
pod lib create BlinkingLabel
然后进行以下选择:
1. 选择你的编程语言,回答 Swift
2. 当问到是否包含示例程序,回答 Yes
3. 在确定是否创建示例项目时,CocoaPods 团队建议问自己:“这个 Pod 应该包含屏幕截图吗?” 如果是这样,那么包含一个示例项目是一个好主意。
4. 是否使用测试框架,回答 None
5. 是否基于视图的测试,回答None
测试不在本教程的范围之内,但不要让它阻止你在本教程后进一步学习。 测试代码行的比例是 CocoaPods 质量指数考虑的一个因素。
当您的 pod 脚手架设置好后,Xcode将打开您的全新项目,随时准备为您的 pod 工作。
5. 更新 Pod 的元数据
有三种主要元数据需要包含在您的 Pod 中:
- .podspec:此文件描述有关此 Pod 的此特定版本的信息。 您的pods,版本号,主页和作者姓名是包含内容的一些示例。 查看官方参考页面以获取更多信息。
- README:如果您以前使用过 GitHub,则知道自述文件的重要性。 项目的自述文件以 Markdown 编写,显示在 GitHub 项目的主页上。 优秀的自述文件可能是决定某人是否使用您的项目。 此外,这也是造成 CocoaPods 质量指数高的一个因素。
- LICENSE:要在Spec存储库中接受您的 pod,您的 pod 需要包含许可证。 pod lib create命令会自动用 MIT 许可证填充 LICENSE 文件,这就是我们要用于本教程的内容。
要获得 .podspec 的格式化的内容,请在 Xcode 中打开它。 您可以在 BlinkingLabel/Podspec Metadata/BlinkingLabel.podspec 下找到它。 幸运的是,当我们执行 pod lib create
命令时,CocoaPods 为我们创建了一个填充良好的模板。 pod lib lint
命令将自动验证 .podspec
文件以确保其符合最佳实践。 或者,如果你很懒惰,也可以使用它来计算出创建一个合适的 .podspec 文件所需的最低限度。
在命令行中,在 BlinkingLabel 项目的根目录中,执行以下命令:
pod lib lint BlinkingLabel.podspec
这应该输出以下内容:
> pod lib lint BlinkingLabel.podspec
-> BlinkingLabel (0.1.0)
- WARN | The summary is not meaningful.
- WARN | The description is not meaningful.
- WARN | There was a problem validating the URL https://github.com/<GITHUB_USERNAME>/BlinkingLabel.
[!] BlinkingLabel did not pass validation.
You can use the `--no-clean` option to inspect any issue.
该工具告诉您需要在 .podspec 文件中修复三件事情:
- 在摘要中添加更多信息
- 添加一个适当的描述
- 指定该 pod 主页的 URL
以下是这些字段的一些建议值:
- s.summary:UILabel的子类,提供闪烁功能。
- s.description:这个 CocoaPod 提供了使用可以启动和停止闪烁的 UILabel 的能力。
- s.homepage:https://github.com/obuseme/BlinkingLabel(用你的GitHub 用户名替换 obuseme)
但是,请等一下,如果您一直在按照说明进行操作,那么从技术上讲,该URL 尚无项目。 现在是时候把你的项目推到 GitHub 上的公共仓库。 虽然还有其他选项用于托管您的 Pod,但 GitHub 是最常见的选项。
要将您的项目推送到 GitHub,浏览到 GitHub,登录或创建一个帐户,并创建一个名为 BlinkingLabel 的新存储库。 然后,从命令行执行以下命令:
git add .
git commit -m “Initial Commit"
git remote add origin https://github.com/<GITHUB_USERNAME>/BlinkingLabel.git // replace <GITHUB_USERNAME> with your github.com username
git push -u origin master
此时,如果您已经正确完成所有操作并再次验证 .podspec 文件,它应该通过验证
> pod lib lint BlinkingLabel.podspec
-> BlinkingLabel (0.1.0)
BlinkingLabel passed validation.
6. 添加代码
你现在拥有一个 pod 的基本外壳,但它没有功能。 现在是添加一些功能的时候了。 CocoaPods 为您创建的示例项目的精妙之处在于,您可以同时为该 pod 和示例项目编写代码。
首先,在 Pods / Development Pods / BlinkingLabel / Pod / Classes /
下找到 ReplaceMe.swift 文件,并将其删除。
接下来,在同一个目录下创建一个新的 Swift 文件,并将其命名为 BlinkingLabel.swift 。 用以下内容替换新文件的内容:
public class BlinkingLabel : UILabel {
public func startBlinking() {
let options : UIViewAnimationOptions = .Repeat | .Autoreverse
UIView.animateWithDuration(0.25, delay:0.0, options:options, animations: {
self.alpha = 0
}, completion: nil)
}
public func stopBlinking() {
alpha = 1
layer.removeAllAnimations()
}
}
您只是将功能添加到您的第一个Pod,UILabel 的一个子类。 该子类提供了一个使文字闪烁的方法,另一个方法可以阻止其闪烁。
为了确保其他开发人员很容易理解如何使用BlinkingLabel,请在示例项目中添加一些示例代码。 打开BlinkingLabel/Example for BlinkingLabel/ViewController.swift
,并使其看起来像这样:
import UIKit
import BlinkingLabel
class ViewController: UIViewController {
var isBlinking = false
let blinkingLabel = BlinkingLabel(frame: CGRectMake(10, 20, 200, 30))
override func viewDidLoad() {
super.viewDidLoad()
// Setup the BlinkingLabel
blinkingLabel.text = "I blink!"
blinkingLabel.font = UIFont.systemFontOfSize(20)
view.addSubview(blinkingLabel)
blinkingLabel.startBlinking()
isBlinking = true
// Create a UIButton to toggle the blinking
let toggleButton = UIButton(frame: CGRectMake(10, 60, 125, 30))
toggleButton.setTitle("Toggle Blinking", forState: .Normal)
toggleButton.setTitleColor(UIColor.redColor(), forState: .Normal)
toggleButton.addTarget(self, action: "toggleBlinking", forControlEvents: .TouchUpInside)
view.addSubview(toggleButton)
}
func toggleBlinking() {
if (isBlinking) {
blinkingLabel.stopBlinking()
} else {
blinkingLabel.startBlinking()
}
isBlinking = !isBlinking
}
}
在这一点上,你会看到 Xcode 在 ViewController.swift 中抱怨了很多错误。 这是因为 BlinkingLabel 的 pod 尚未安装在示例项目中。 为此,切换到命令行并从 BlinkingLabel 目录的根目录执行以下命令:
> cd Example
> pod install
Analyzing dependencies
Fetching podspec for `BlinkingLabel` from `../`
Downloading dependencies
Installing BlinkingLabel 0.1.0 (was 0.1.0)
Generating Pods project
Integrating client project
接下来,切换回 Xcode 并选择 BlinkingLabel-Example target 并单击 Run 按钮。
然后结果如图:
点按 Toggle Blinking 按钮以尝试新 pod 的效果。 创建您的 pod 的最后一步是更新 README.md 。 在Xcode中,打开 BlinkingLabel/Podspec Metadata/README.md
。 你会看到 CocoaPods 为你添加了一些默认文档。 不要停在那里,你可以做得更好。 添加一些关于该 pod 的文档并包含屏幕截图。 请记住,自述文件通常是人们在查看您的 pod 时看到的第一件事。 它的质量很高很重要。 看看我的找找灵感。
7. 公开你的 Pod
现在,您的本地计算机上运行了功能完备的 pod,现在可以将 BlinkingLabel 提供给其他人以供其他项目使用。 在高层次上,这是通过将新的 pod 放入公共 Specs 仓库来完成的。
Specs 存储库是 GitHub 上的公共地方,所有公开 pod 都被编入索引。 您实际上并不是必须使用 GitHub 来托管您的 pod 的源代码。 例如,您也可以使用 BitBucket。 不过,您的 Pod 的 Spec 将存储在 GitHub上 的 Spec 仓库中。
将您的 pod 添加到 Spec 仓库 非常简单。 提交您的 pod 需要三个步骤。 不要尝试这些步骤,因为我已经公开 BlinkingLabel 。 他们只是在这里作为参考。
作为先决条件,请确保将对 BlinkingLabel 项目目录的本地更改添加到 git 中并推送到远程。
- 步骤1:标记
标记您最近的提交并将其推送到远程:
> git tag 0.1.0
> git push origin 0.1.0
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/obuseme/BlinkingLabel.git
* [new tag] 0.1.0 -> 0.1.0
这一步表明您将此提交标记为您的群集的特定版本。 标签的名称应该与 .podspec 文件中的 s.version 匹配。 下一步将验证这一点。
- 步骤2:验证
接下来,从命令行运行以下命令,以验证源代码的存储位置和 .podspec 文件之间的配置是否正确:
pod spec lint BlinkingLabel.podspec
这应该输出以下内容:
> pod spec lint BlinkingLabel.podspec
-> BlinkingLabel (0.1.0)
Analyzed 1 podspec.
BlinkingLabel.podspec passed validation.
- 步骤3:推送到 Spec 仓库
最后,通过执行以下命令将 spec 推送到 Specs 仓库:
pod trunk push BlinkingLabel.podspec
这应该输出以下内容:
> pod trunk push BlinkingLabel.podspec
Updating spec repo `master`
Validating podspec
-> BlinkingLabel (0.1.0)
Updating spec repo `master`
- Data URL: https://raw.githubusercontent.com/CocoaPods/Specs/f7fb546c4b0f80cab93513fc228b274be6459ad2/Specs/BlinkingLabel/0.1.0/BlinkingLabel.podspec.json
- Log messages:
- June 29th, 20:40: Push for `BlinkingLabel 0.1.0' initiated.
- June 29th, 20:40: Push for `BlinkingLabel 0.1.0' has been pushed (1.701885099 s).
8. 什么是优秀的 Pod?
Specs 存储库中有成千上万个可用的 pod。 浏览 pod 时,确定 pod 的质量并不容易。 将第三方代码引入您的项目时,您希望对将要发送给客户的代码拥有高度的信心。 历史上,开发人员必须对他们随机发现的 pod 的质量作出自己的解释。
截至2015年6月,CocoaPods 提供了一种名为“质量指数”的工具,可根据某些指标对给定 pod 的质量进行总结性判断。 可以在 GitHub 上找到全面和最新的指标。
总之,以下是可以帮助改进您的 pod 质量指数的内容:
- 项目受欢迎程度,如星星,forks,订户和贡献者所衡量
- 代码文档
- 高质量的自述文件
- 用 Swift 编写
- 使用 GPL 许可证
- 没有太多公开的问题
- 通过自动化测试确保代码质量
- 通过最小化包含的资产来精简安装大小
- 更小,良好的类
基于某个项目符合这些指标的程度,质量指标可以升高或降低。
9. 结尾
为其他人创建 pod 是很有趣的,也是回馈社区的好方法。 本教程向您展示了哪些代码可以为良好的 pod,如何创建您的第一个 pod,如何让它公开可用,以及使用什么技术制作出优质的 pod。