基于 Swift 创建 CocoaPods 完全指南
CocoaPods 是一个面向 Xcode 的项目依赖管理工具。当需要向项目添加库和框架时,它是一项极其有用且值得选择的服务。 试想一下,有人开发了一个足以改变游戏规则、且具有划时代意义的库,并想把它分享给这个世界。这时候该怎么办?长话短说,我要说的是你需要知道如何发布自己的 CocoaPod! 前提本教程基于 Xcode 8 和 Swift 3。如果你想了解更多关于 Swift 3 的新特性,可以阅读这篇很棒的教程。
目前,CocoaPods 有一个针对 Swift 3 和 Xcode 8 的预发布版本。为了编译基于 Swift 3 的项目,你应该使用这个版本。在终端执行下述命令即可完成安装: sudo gem install cocoapods --pre 同时你还需要一点 CocoaPods 的使用经验。不妨看看这篇 Gregg Mojica 写的令人惊叹的教程,我相信你会从中了解更多相关的内容。 好了,我们开始! 做一个值得用 Pod 管理的项目从现在开始,让我们来做一个具有创造性,值得用 pod 管理的项目。我的想法是做一个会缓慢改变颜色的 UIView。我相信对于背景来说这会十分有用。 让我们先从最基础的地方开始。首先,在 Xcode 中创建一个新工程,选择使用 single view 模版。将工程命名为 FantasticView。项目创建之后,添加一个同名的 Swift 文件 现在你已经有了 import UIKit class FantasticView : UIView { } 初始化下一步,为上面定义的类添加两个初始化方法: override init(frame: CGRect) { ? ?super.init(frame: frame) ? ?// 核心部分 } required init?(coder aDecoder: NSCoder) { ? ?super.init(coder: aDecoder) ? ?// 你不需要实现这部分 } 第一个初始化方法是 酷炫的颜色接下来,定义一个由 let colors : [UIColor] = [.red,.orange,.yellow,.green,.blue,.purple] 除此之外,你还需要添加一个计数器对象,在每次颜色改变时计数。 var colorCounter = 0 但是为什么需要一个计数器呢?难道我们不是在遍历颜色数组吗? 注意我刚刚是怎么说“遍历”的 魔法调味剂现在我要告诉你如何处理遍历颜色数组的问题。 你可能会认为在 还有一种方法是创建一个 for 循环,然后在其中运行一个动画 block。这也将遇到先前的问题。要解决这个问题,你可以使用 GCD 来等待动画 block 执行完毕。 但是我坚信有更简单的方法。没错,你可以使用 在你的 let scheduledColorChanged = Timer.scheduledTimer(withTimeInterval: 2.0,repeats: true) { (timer) in ?//1 ? ?UIView.animate(withDuration: 2.0) { ?//2 ? ? ? ?self.layer.backgroundColor = self.colors[self.colorCounter % 6].cgColor ?//3 ? ? ? ?self.colorCounter+=1 ?//4 ? ?} } scheduledColorChanged.fire() ?//5 让我们逐行看一看上面的代码:
让我们看看第三步中我具体做了什么。通过下标可以从 使用 Fantastic View是时候在我们的主 View Controller 中使用 Fantastic View 了。我希望我的 View Controller 拥有一个酷炫的背景,所以让我们在 let fantasticView = FantasticView(frame: self.view.bounds) self.view.addSubview(fantasticView) 这里我们定义了一个 好了,在模拟器中运行应用吧!你将会看到随着时间推移,背景也随之改变。 推送到 GitHub我知道你一定会问:“为什么不将 fantastic view 公布于众呢?人们有必要知道它!” 对,没错。让我们来创建一个 Pod,然后人们就可以使用它了!但是在此之前,需要先将其推送到 GitHub。 CocoaPods 要求 Pod 有一个源。大多数情况下,开发者使用 GitHub 来完成这一切。我们来快速过一遍提交项目到 GitHub 的必要步骤。如果你想知道更多 Git 的基础知识,不妨看一看这篇优秀的教程。 简单来说,下面这些就是你需要做的:
现在你必须为你的仓库创建一个 release。一个 release 对应产品的一个新版本。你可以在 Github 的操作面板上尝试创建。首先进入你的仓库。
以上是关于 Github 的内容,让我们开始创建 Pod 本身吧! 创建 Pod首先,我们需要确保已经安装 CocoaPods,并做好在终端使用它的准备。动手吧,打开终端,运行以下命令: sudo gem install cocoapods --pre 现在 CocoaPods 已经安装完成,下一步轮到创建 Pod 了。 创建 Podspec所有 Pods 都拥有一个 podspec 文件。podspec,顾名思义,用于定义 Pod 规范!让我们动手创建一个:
下面介绍几个需要注意的重要变量:
在这个例子中,我希望包含所有 'FantasticView/*.swift' 星号 'FantasticView/*' 这样就涵盖了所有,甚至是其他目录。为了限制文件类型,你也可以使用如下语句: 'FantasticView/*.{swift,plist}' 在这个例子中,将会涵盖所有的 用 Lint 验证项目CocoaPods 需要验证项目有没有错误,这包含对错误甚至可疑代码的限制和要求。也就是说在发布项目之前 CocoaPods 要求你 lint 你的项目。 lint 一个项目十分简单,但是绝对是难以置信的麻烦!为了 lint 你的项目,请在项目目录下执行以下命令: pod lib lint 你可能会得到下述警告: -> FantasticView (0.1.0) ? ?- WARN ?| description: The description is shorter than the summary. ? ?- WARN ?| url: There was a problem validating the URL https://github.com/<YOUR GITHUB USERNAME>/FantasticView. 警告说的很直接。在这个例子中,你应该增加描述内容的长度,并提交一个合法的源代码 URL。一旦发生错误,甚至仅仅只是只是一个警告,CocoaPods 的 lint 就会失败。 再来让我们看看你可能会遭遇的错误: -> FantasticView (0.1.0) ? ?- ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code. You can use --verbose for more information. ? ?- ERROR | [iOS] xcodebuild: ?/Users/sahandedrisian/Desktop/FantasticView/FantasticView/FantasticView.swift:13:32: error: type 'UIColor' has no member 'red' ? ?- ERROR | [iOS] xcodebuild: ?/Users/sahandedrisian/Desktop/FantasticView/FantasticView/FantasticView.swift:20:37: error: use of unresolved identifier 'Timer' 当真的遇到错误的时候,不要着急,尝试通读错误提示并分析为什么发生这个错误。在本例中,你会注意到下述信息: type UIColor has no member red. 但是为什么不能识别 一个合理的猜想是,在 Swift 3.0 中 那么究竟可以如何修复这个问题呢?CocoaPods 为此发布了一个修正版。在 lint 时你被要求必须指定 Swift 版本。为了这么做,你必须得创建一个名为 echo "3.0" >> .swift-version 现在再次运行 -> FantasticView (0.1.0) FantasticView passed validation. Woohoo!你通过了整个流程中最富挑战的一部分。
发布你的 Pod噢,是时候将你的 Fantastic View 发布到 CocoaPods 了。每个开发者都应该拥有一个 CocoaPods 账户,以备发布之时用。 现在的你应该会觉得,CocoaPods 账号就是一个 CocoaPods 账号啊,然而并不是,它是一个 Trunk 账号。我并不是在评判 CocoaPods,但我觉得这是一个十分奇怪的决定,着实让我困惑了一段时间。我这么说了之后,你会不会想读一下他们所写的关于为什么做 Trunk 的博文。 创建 Trunk 账号确切地说,Trunk 并不是一个账号;是一个会话。所以从根本上来说并不需要密码的存在,需要的仅仅是一个邮箱。 创建流程非常简单: pod trunk register <Your Email> 你应该很快就会受到一封来自 CocoaPods 的邮件以验证你发起的“会话”。点击邮件提供的链接,完成你的账号验证。之后 CocoaPods 将会给你发来友好的欢迎信息:好棒,设置完成! 推送你的 Pod到这一步,就只剩下用 Trunk 将你的 podspec 推送到 CocoaPods 了: pod trunk push FantasticView.podspec 由于我已经抢先一步使用了 完成修改之后,像前一节所演示的一样 lint 你的 podspec,然后再一次推送你的 trunk。若成功推送了你的 Pod,应该会得到以下信息: Updating spec repo `master` Validating podspec -> FantasticView (0.1.0) Updating spec repo `master` ?- Data URL: https://raw.githubusercontent.com/CocoaPods/Specs/06dcdf13dd11b8c2eb4fd522b25a652fa654b180/Specs/FantasticView/0.1.0/FantasticView.podspec.json ?- Log messages: ? ?- September 24th,11:08: Push for 'FantasticView 0.1.0' initiated. ? ?- September 24th,11:08: Push for 'FantasticView 0.1.0' has been pushed (0.500379641 s). 恭喜!回顾所做的一切,并非那么难,对吧?现在可以将 Pod ‘FantasticView’ 添加到你的 podfile 了。 总结事实上,有几种不同的方式来推送你的 Pod。你也可以使用 CocoaPods 模版来创建 Pod 工程,其中包含示例项目,readme,license 等等。不过我认为这稍有些复杂了,因为它包含了一些不必要的步骤,繁琐,还容易让人困惑。 在本教程中,我创建了一个工程,添加了一个 podspec,解释了 podspec 文件的不同选项,创建了一个 trunk 账号并推送了 Pod。如果遇到了问题,你可以在 CocoaPods 的 Github 仓库提交一个 issue。那是一个非常友好的社区,很酷,他们总是会在最短时间内给出答复。 诚挚地希望你喜欢这篇教程!你可以在这里下载完整项目作为参考。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |