一、前言
该篇翻译自http://code.tutsplus.com/tutorials/creating-your-first-cocoapod–cms-24332,说是翻译,其实也不算是直译,删了很多,也加了一些,需要原著直接点进去看。详细的制作流程可以直接查阅官网https://guides.cocoapods.org Making CocoaPods章节。
CocoaPods的所有命令都可查阅官网https://guides.cocoapods.org/terminal/commands.html,在遇到一个陌生的命令时都可以先查阅一下。
如果你是需要根据此篇制作流程练习,你可以建立一个不同名称的工程,避免与此篇制作的pod冲突导致失败。
笔者根据此篇博客也成功地制作了一个CocoaPod. 所以亲测可用。
二、开始
很明显,制作自己的CocoaPod(或简称为Pod),你需要安装CocoaPods工具,安装CocoaPods的方法可参考这篇博客http://blog.csdn.net/chong_son/article/details/52260806,也可以直接参阅官方网站https://guides.cocoapods.org。只是权限问题,官方的安装会失败,所以还是参考国内的博客安装。安装方法并不难。
三、创建工程
Pod lib
这个命令是在创建Pod过程中一个重要的命令,我们将使用以下的两个命令来完成一些制作并发布CocoaPod的预备工作:
pod lib lint
命令是来验证你创建Pod的所需要用到的所有东西是否已经完备pod lib create
命令提供一个快捷方式让你可以创建标准的一系列pod制作所需的文件
打开终端,切换到工作目录,然后执行以下命令
$ pod lib create BlinkingLabel
回车执行后,将会有几个选择需要决定:(亲测的时候,只有四个问题,Cocoapods version 1.0.1)
- 编程语言。在此例选中的是
swift
- 是否需要穿件Demo工程。一般开源的三方都会提供Demo做参考,回答Yes
- 测试框架 [Quick / None]。此例选择None
- 是否需要查看基本的调试。此例选择No
到此在工作目录中就会创建一个CocoaPod工程,完成后它会自动打开
四、提供或者更新所需文件
制作CocoaPod需要提供以下三个文件
.podspec
:这个文件描述的是制作的这个pod的项目地址、版本号、作者,依赖的框架等信息,这个文件是必备的,可以先参阅一下主流三方的.podspec
文件,一看即明。更多关于这个文件的编写参阅https://guides.cocoapods.org/syntax/podspec.htmlREADME.md
:如果曾经使用过github,你会熟悉一个重要的文件,就是README.md
。这个文件里,可以向使用者介绍这个三方的用法,注意事项,作者等等详细信息,其采用的是Markdown语法编写的。LICENSE
:至关重要的一个文件,这个文件是你制作的pod发布的一个“证书”,如果想发布就必须包括这个文件。刚才pod lib create
这个命令已经自动为此例配置了一个MIT
证书。
其实这三者都在创建的时候已经自动生成了,但是其中的某些文件的信息还不完整,是需要自己编写的。
1、打开终端,切换到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.
一大锥warning,说明还是有不合格的地方。
可以看到pod lib lint
是针对着 .podspec
文件,其实可以省去“BlinkingLabel.podspec”,这个命令也会自动去找“BlinkingLabel.podspec”。这些warning,也正是你需要在.podspec
文件中需要补充的东西。
summary
:摘要说明description
:关于该Pod的描述home page
:项目的github主页
在这三个字段中根据实际项目填写。(你需要先在github上先创建一个对应的repository)
2、填写完之后可以再pod lib lint
一下,不出意料,输出以下结果:
pod lib lint BlinkingLabel.podspec
-> BlinkingLabel (0.1.0)
BlinkingLabel passed validation.
3、然后将工程推送至github:
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
五、添加代码
到此,已经创建好了一个基本的CocoaPod框架,接着就是添加你的三方的源代码。
找到ReplaceMe.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()
}
}
为了开发者更好更方便地了解该“框架”的使用,最好在Demo中添加一些示例代码:譬如在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
}
}
当然此时会报错,找不到BlinkingLabel的声明。因为此时Demo就好比是开发者,它还没有pod install这个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
接着打开.xcworkspace
工程文件,编译运行成功后将代码推送到远程。
最后编辑README.md文件,向广大开发者介绍该框架。。
六、发布
所谓发布,就是将你制作的pod推至 Spec Repo
,这个repo是官方CocoaPods提供的“公共场所”,它的github地址:https://github.com/CocoaPods/Specs,几乎常用的开源三方都是发布到这里的。
发布分三步:
为项目打上tag,这个tag值最好就是项目的版本号,它要与
.podspec
文件中的version字段对上。之后将tag推送到远程github仓库上。
> 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
验证。此处的验证和上面所述的验证有所不同,这里是验证pod是否具备发布的资格,同样它还是会找
.podspec
文件,用的命令是pod spec
> pod spec lint BlinkingLabel.podspec -> BlinkingLabel (0.1.0) Analyzed 1 podspec. BlinkingLabel.podspec passed validation.
推送(发布),就是利用CocoaPods的
pod trunk
命令推送至CocoaPods官方提供的Spec Repo
。> 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).
这样一来,BlinkingLabel就和其它框架一样,可以通过CocoaPods集成到开发者的项目中工使用了。
可以通过pod search
命令查看pod是否上传成功
七、更新和删除
当需要更新该三方,也就是该pod的版本号时,只需要继续在BlinkingLabel中添加代码,同时Demo中写上一些自己的示例代码,把代码提至远程仓库github上。注意:要把.podspec
文件上的版本号改成最新的,记住要先打上tag,然后按照发布一节流程在走一遍即可。
删除则使用pod trunk delete
命令,当然官方不建议这么干,因为开发者可能用着你的pod,而且一旦执行,对应的版本号将从此不被上传成功。所以官方建议使用pod trunk deprecate
pod trunk delete NAME VERSION
pod trunk deprecate NAME
CocoaPods的命令集详解都可以查阅官网https://guides.cocoapods.org/terminal/commands.html