CoderHann

发布开源框架到CocoaPods图文详解

前言

最近项目不是特别紧,有时间看看github写写demo。每次写demo的时候总是需要用到有些基础工具和控件,每次都把需要的工具类移来移去麻烦又没什么技术含量。心生想法把那些好用的工具类放到CocoaPods,下次直接pod导入,这样也知道如何发布自己的开源框架了!

经过各种引擎的搜索、查阅前辈提供的技术支持以及自己的动手总于把自己的工具类框架发到了CocoaPods。这里记录完整的操作过程给自己以后查阅也给需要的同事提供一些参考。

该记录参考各个开源框架的结构设计即开源框架 + Examples用例 。这里我是把开源框架独立了一个静态Framework项目中,在提供一个使用用例的项目提供验证以及示例。下面我们就一步一步来吧!

创建github项目以及项目目录

github项目

到github上创建一个仓库,如果还没玩过github自己去谷歌或者百度吧。将创建好的项目仓库clone到自己电脑上,其目录结构如下:

创建工作空间及项目

在刚刚的项目中创建一个工作空间:

打开上面创建的工作空间,现在我们要创建开源框架的Framework项目File - new - project:

这里选择我们打开的工作空间如下图:

我们对刚刚创建的开源框架项目做一些配置:
1.更改项目部署版本号:

2.更改一些编译设置project - taget - build settings

2.添加一个测试类TestLog,提供public头文件

TestLog

1
2
3
4
5
6
7
8
// TestLog.h
#import <Foundation/Foundation.h>
@interface TestLog : NSObject
+ (void)methodOne;
+ (void)methodTwo;
@end

1
2
3
4
5
6
7
8
9
10
11
12
// TestLog.m
#import "TestLog.h"
@implementation TestLog
+ (void)methodOne {
NSLog(@"methodOne");
}
+ (void)methodTwo {
NSLog(@"methodTwo");
}
@end

SmartUtil.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// SmartUtil.h
#import <UIKit/UIKit.h>
//! Project version number for SmartUtil.
FOUNDATION_EXPORT double SmartUtilVersionNumber;
//! Project version string for SmartUtil.
FOUNDATION_EXPORT const unsigned char SmartUtilVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <SmartUtil/PublicHeader.h>
#ifndef _SMARTUTIL_
#define _SMARTUTIL_
#import <SmartUtil/TestLog.h>
#endif

开放头文件到public下

到此,开源框架Framework项目配置差不多就这样了,以后添加需要公开的类记得把头文件添加到public里面,然后编译下即可。下面我们添加项目的用例项目SmartUtilExample。

create的时候选择添加到SmartUtil工作空间下:

创建完成后项目结构如下:

添加我们工作空间的SmartUtil框架:

导入SmartUtil框架之后我们在AppDelegate验证下我们的两个方法:
注:下面两种导入方式都可以

程序运行结果

发布开源框架

上面的是一个开源框架+用例项目的搭建,如果你的开源项目不需要使用Example可以不用那么复杂。下面我们将刚刚创建好的框架发布到cocoapods上。

提交代码&打tag

目前将我们的开源框架作为release0.0.1版本提交到远程仓库,下面在本地代码仓库路径下打开终端进行以下操作:
git add .跟踪所有变动
git commit -m"release version 0.0.1"提交更改
git pull
git push提交到远程仓库
git tag -a 0.0.1 -m"release version 0.0.1"给刚刚的版本打个tag
git push --tags提交tag
这样我们的release0.0.1版本就算完成了下面进行pod的制作!

创建podspec文件

在项目根目录下面创建podspec文件:pod spec create SmartUtil

编辑podspec文件

在编辑podspec文件之前先简单了解里面的这些属性都是什么意思:

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
// pod库名字
s.name = "SmartUtil"
// 该库版本对应的版本号
s.version = "0.0.1"
// 库的概括描述
s.summary = "smart Utils for IOS Development!"
// 对应的代码仓库主页
s.homepage = "https://github.com/CoderHann/SmartUtil"
// 遵守的协议
s.license = "GNU"
// 作者和邮箱
s.author = { "CoderHann" => "hyt163mail@163.com" }
// 支持的系统版本
s.platform = :ios, "8.0"
// git:代码仓库地址 tag:对应的release tag,一般都和s.version保持一致
s.source = { :git => "https://github.com/CoderHann/SmartUtil.git", :tag => "#{s.version}" }
// 下面类似正则表达式,标示哪些文件下的那些文件作为pod库的内容
s.source_files = "SmartUtil", "SmartUtil/**/*.{h,m}"
// 所使用的框架,如果有多个使用这种`s.frameworks = "SomeFramework", "AnotherFramework"`
// 如果使用第三方的使用这种`s.dependency "SomeKit", "~> 1.1.1"`
s.framework = "UIKit"

更改上面各个属性后我们来检查下podspec文件是否合法:pod spec lint SmartUtil.podspec
出现下图表示我们的podspec文件合法:

注意
podspec的pod版本号要在github的远程仓库中,不然校验合法会失败的。

发布

没有注册过Trunk的使用pod trunk register 邮箱 用户名进行注册,稍后会发邮件进行确认。

邮件确认后查看下是否注册成功pod trunk me如果注册成功会显示你的信息。

是时候发布了pod trunk push出现下图表示我们已经把自己的开源库发到了CocoaPods上了:

使用pod search SmartUtil搜索我们的pods:

注意
如果pod search 搜索不到的话尝试下下面的两种方法:
1.pod setup更新pod库。
2.将~/Library/Caches/CocoaPods/search_index.json的索引文件删掉。

使用pod

pod 'SmartUtil', '~> 0.0.1'放到我们的Podfile中,在项目Podfile目录执行pod update
稍等片刻~我们熟悉的目录就出现在项目的pods中了:

ok!大功告成!最后附上本示例的github地址SmartUtil求赞👍求加星✨