前言
作为一个程序猿看到pod上各种形形色色的三方库,自己肯定也会想要制作一个分享一下。做组件化时也会想要将项目拆分成一个一个的私有库。
以下均以我自己写的一个开源库YJReaderTool去介绍.
目录
- Github上创建仓库
- 创建podspec文件
- 编写podspec文件
- 代码上传git远程仓库
- Github上创建release版本
- 注册CocoaPods账号
- 上传代码到CocoaPods
- 检查上传是否成功
1.Github上创建仓库
创建YJReaderTool仓库,如下图:
Snip20180309_5.png这里注意那个MIT License,在后面添加Cocoapods支持的时候会用到(稍后介绍)。然后点击创建即可。
然后用SouceTree将代码down到本地,将自己的项目放到里面,文件夹如图所示:
Snip20180309_6.png
这里的LICENSE就是刚才说的MIT License添加的文件。YJReaderToolemo是示例工程,YJReaderTool就是提供给他人使用的库。
2.创建podspec文件
创建podspec文件只需要一行命令,在你自己的三方库的根目录下输入下面的命令:
Snip20180309_7.png
pod spec create YJReaderTool
然后在项目目录下将会生成一个podspec文件
3.编写podspec文件
我们先来打开YJReaderTool.podspec文件看看里面的内容。
Snip20180309_8.png
一些常用的信息介绍:
name:框架名
version:当前版本(注意,是当前版本,假如你后续更新了新版本,需要修改此处)
summary:简要描述,在pod search ZCPKit的时候会显示该信息。
description:详细描述
homepage:页面链接
license:开源协议
author:作者
source:源码git地址
platform:支持最低ios版本
source_files:源文件(可以包含.h和.m)
public_header_files:头文件(.h文件)
resources:资源文件(配置的文件都会被放到mainBundle中)
resource_bundles:资源文件(配置的文件会放到你自己指定的bundle中)
frameworks:依赖的系统框架
vendored_frameworks:依赖的非系统框架
libraries:依赖的系统库
vendored_libraries:依赖的非系统的静态库
dependency:依赖的三方库
你在三方库中看到的那些文件都是通过这些配置来确定的。当pod install引入三方库时,只会引入你在podspec中配置的那些文件。
下面我会举例说明该如何写podsepc中的每项配置。
Snip20180309_10.png
目录结构如下
Snip20180309_9.png
如图所示的目录结构,每个配置项的写法如下:
source_files:配置三方库的源文件(.h或.m文件)
写法:
source_files = 'YJReaderTool/Classes/xxx.{h,m}' // 直接指定文件名
或:
source_files = 'YJReaderTool/Classes/*.{h,m}' // Classes文件夹下的所有匹配文件
source_files = 'YJReaderTool/Classes/**/*.{h,m}' // Classes所有路径下的所有匹配文件
public_header_files:配置公有的头文件(.h文件)
写法:
source_files = 'YJReaderTool/Classes/xxx.h' // 直接指定文件名
或:
source_files = 'YJReaderTool/Classes/*.h' // Classes文件夹下的所有匹配文件
source_files = 'YJReaderTool/Classes/**/*.h' // Classes所有路径下的所有匹配文件
vendored_frameworks:配置需要引用的非系统框架
写法:
vendored_frameworks = 'YJReaderTool/Frameworks/xxx.framework'
frameworks:配置依赖的系统框架
写法:
frameworks = 'AVFoundation', 'CoreGraphics', 'Security', 'SystemConfiguration'
vendored_libraries:配置需要引用的非系统静态库(要注意,这里的.a静态库名字必须要带lib前缀,如果引用的静态库名字没lib前缀会导致编译报错,只需要重命名加上即可)
写法:
vendored_libraries = 'Frameworks/xxx.a'
libraries:配置依赖的系统库(要注意,这里的写法需要忽略lib前缀)
写法:
libraries = 'c++', 'sqlite3', 'stdc++.6.0.9', 'z'
resources:配置资源文件(.bundle,.png,.txt等资源文件,这些资源文件会被放到mainBundle中,要注意避免发生命名重复的问题)
写法:
resources = 'YJReaderTool/Assets/YJReaderTool.bundle'
resource_bundles:配置指定bundle的资源文件(可以解决resources导致的命名冲突问题)
写法:
resource_bundles = {
'XXXBundle' => ['YJReaderTool/Resources/xxx.bundle'],
}
dependency:依赖的三方库,pod库或者可以是自身的subspec
写法:
dependency 'AFNetworking', '~>3.1.0' // pod三方库
dependency 'Util' // 自身的subspec
或
dependency 'AFNetworking'
4.代码上传git远程仓库
git push origin master
5.Github上创建release版本
打开项目的目录,然后创建release版本的类库:
Snip20180312_12.png
点击 箭头指向开始创建release版本,(点击 Create a new release):
Snip20180312_13.png
点击Publish release即可。创建完成后如图所示:
Snip20180312_14.png
6.注册CocoaPods账号
pod trunk register 邮箱地址 ‘用户名’ —description='描述信息'
此时会发送了一个验证码到邮箱,你可以打开你的邮箱验证即可。打开邮件中的链接后如下:
Snip20180312_15.png
这样就成功注册了Cocoapods账号。可以用
pod trunk me
检查是否创建成功。
7.上传代码到CocoaPods
首先检测文件格式的有效性:
pod spec lint
如果有警告。可以使用 --allow-warnings忽略:
pod spec lint --allow-warnings
出现passed validation就说明通过验证了。然后执行:
pod trunk push YJReaderTool.podspec --allow-warnings
执行结果如下:(速度应该有的慢)
Snip20180312_17.png
说明了已经上传成功。
8.检查上传是否成功
使用
pod search YJReaderTool
网友评论