0%

CocoaPods不完全食用指南 — 制作篇

前言


对于公开给所有人的开源库,我们称之为公有库;而针对部分人的开源库,比如公司内部的开源,我们称之为私有库。本章所讲解的是如何使公有库支持 Cocoapods,能在Cocoapods 上搜索并且使用。

概要


公有库 的制作大致分为以下几个步骤:

  1. 创建 Pod 的所需要的项目工程文件,并且有可访问的项目版本控制地址
  2. 创建 Pod 所对应的 podspec 文件
  3. 本地测试配置好 podspec 文件是否可用
  4. 向 Spec Repo 提交 podspec 文件
  5. 在项目中的 Podfile 中增加制作好的 Pod 并使用
  6. 更新维护 podspec

创建Pod项目工程文件


Cocoapods 为我们提供了快熟创建Pod项目工程的工具,先进入桌面cd Desktop/

1
pod lib create PodDemo

然后会出现

1
2
3
4
5
6
Cloning `https://github.com/CocoaPods/pod-template.git` into `PodDemo`.
Configuring PodDemo template.

------------------------------

To get you started we need to ask a few questions, this should only take a minute.

接下来会出现几个问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

#选择语言
What language do you want to use?? [ Swift / ObjC ]
> ObjC

#是否需要一个例子工程
Would you like to include a demo application with your library? [ Yes / No ]
> Yes

#选择一个测试框架
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None

#是否基于View测试
Would you like to do view based testing? [ Yes / No ]
> Yes

#类的前缀
What is your class prefix?
> YAN

输入完后,就开始建立工程,最后出现

1
Pod installation complete! There are 2 dependencies from the Podfile and 2 total pods installed.

查看新建的工程目录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.
├── Example
│   ├── PodDemo
│   ├── PodDemo.xcodeproj
│   ├── PodDemo.xcworkspace
│   ├── Podfile # PodDemo的依赖描述文件
│   ├── Podfile.lock
│   ├── Pods # PodDemo的依赖文件
│   └── Tests
├── LICENSE #开源协议 默认MIT
├── PodDemo #组件的目录
│   ├── Assets #资源文件
│   └── Classes #类文件
├── PodDemo.podspec #podspec文件
├── README.md #Markdown格式的README
└── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj

10 directories, 5 files

接下来就是将要开源的文件放入 PodDemo/Classes中,PodDemo/Assets中放入资源文件,然后进入Example文件夹执行

1
pod update

此时再打开工程就能看到刚刚添加的文件已经在Pods工程下 Development Pods/PodDemo中了,然后就可以编辑工程Demo了。

注:这里需要注意的是每次向Pod中添加了新的文件或者以后更新了podspec的版本都需要重新执行一遍pod update命令。

推送到远程仓库


首先到Github创建一个Public仓库

通过 Cocoapods 创建出来的目录本身就在本地的 Git 管理下,我们需要做的就是给它添加远端仓库,先到 PodDemo 目录下,先添加上面创建仓库的 SSH 地址,然后把代码推送到远程

1
2
3
4
5
6
7
8
#提交到暂存区
git add .
#提交信息
git commit -s -m "Initial Commit of PodDemo"
#添加远程仓库
git remote add origin git@github.com:yanff/PodDemo.git
#推到远端仓库
git push origin master

推送完后我们可以看到Github上的远程仓库已经有了代码

因为 podspec 文件中获取Git版本控制的项目还需要tag号,所以我们要打上一个tag

1
2
git tag -m "first release" 1.0.0
git push --tags #推送tag到远端仓库

编辑Podsepc文件


在所有支持 Cocoapods 导入的库的开源目录下,都有一个 .Podsepc 的文件。无论是做公有库还是私有库,都必须配置这个文件。Podsepc 文件中记录了库的一些基本信息,包括版本号、获取的地址等等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Pod::Spec.new do |s| 

#库的名字
s.name = "PodDemo"

#库的版本号
s.version = "1.0.0"

#库的简介
s.summary = "a brief introduction"

#库的主页
s.homepage = "https://github.com/yanff/PodDemo"

#许可证信息
s.license = { :type => "MIT", :file => 'LICENSE.md' }

#作者的信息
s.author = { "yanff" => "yanff.us@gmail.com" }

#库支持的iOS最低版本
s.platform = :ios, "8.0"

#库文件的源码地址
s.source = { :git => "https://github.com/yanff/PodDemo.git", :tag => s.version}

#所需要支持的框架
s.frameworks = 'UIKit'

#配置库所需的文件,**表示全匹配,*.{h,m}表示匹配所有的.h和.m文件
s.source_files = "PodDemo/Classes/*.{h,m}"

#库所需的资源文件
s.resource = "PodDemo/Assets/**"

#支持ARC还是MRC
s.requires_arc = true

#依赖第三方库,例如:AFNetworking,3.1.0版本
s.dependency 'AFNetworking', '~>3.1.0'

#注:非必须,针对库进行模块化才需做子目录的处理
s.subspec 'SubPodDemo' do |ss|
ss.source_files = 'PodDemo/SubPodDemo/**/*.{h,m}'
end

end

编辑完 podspec文件后,需要验证一下这个文件是否可用,如果有任何 WARNING 或者 ERROR 都是不可以的,它就不能被添加到 Spec Repo 中,不过 Xcode 的 WARNINGO 是可以存在的,验证需要执行命令

1
pod lib lint

如果看到

1
2
3
 -> PodDemo (1.0.0)

PodDemo passed validation.

说明验证通过了,不过只是这个 podspec 文件是合格的,不一定说明这个 Pod 是可用的,我们需要本地验证一下

本地测试podspec文件


本地创建一个新的项目,在这个项目的 Podfile 文件中直接指定刚才创建编辑好的 podspec 文件,测试能否使用。在 Podfile 文件中编辑

1
2
3
4
platform :ios, '8.0'

# 指定podspec文件
pod 'PodDemo', :podspec => '/Users/Yan/Desktop/PodDemo/PodDemo.podspec'

然后执行 pod install命令安装依赖,打开项目工程,可以看到库文件都被加载到 Pods子项目中了。在项目中编写代码,测试库文件无误后就可以提交 podspec 到 Spec Repo中了

向Spec Repo提交podspec


注册trunk,查看是否注册过

1
pod trunk me

如果没有注册

1
pod trunk register yanff.us@gmail.com "YAN"

注册完后,提交到 Spec Repo

1
pod trunk push PodDemo.podspec

最后更新一下本地的 Spec Repo

1
pod repo update

然后输入搜索命令

1
pod search PodDemo

就可以搜索到刚刚提交的库了

1
2
3
4
5
6
-> PodDemo (1.0.0)
a brief introduction
pod 'PodDemo', '~> 1.0.0'
- Homepage: https://github.com/yanff/PodDemo
- Source: https://github.com/yanff/PodDemo.git
- Versions: 1.0.0 [master repo]

自此,我们也成为了开源主义的接班人,公有库的制作已经完毕了,其他人可以通过CocoaPods使用我们制作的库了

关于更新和维护


如果想要更新和维护版本,只需要在PodDemo/Classes中进行源码的修改,然后在Podsepc文件中修改文件的路径以及版本号,需要注意的是,版本号一定要对应相应仓库的tag ,而且每次进行修改的时候,版本号不能低于原来的版本号,然后再向 Spec Repo 提交新的podspec

更多