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 中,不过 XcodeWARNINGO 是可以存在的,验证需要执行命令

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子项目中了。在项目中编写代码,测试库文件无误后就可以提交 podspecSpec 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

更多