创建自己的cocoapods公共库

创建一个工程

首先cd到目标文件夹

cd Desktop/KLCommonTools

//在当前文件夹中创建公开库的架构项目

pod lib create KLCommonTools
1、What is your email?

填入自己的邮箱地址。

2、What platform do you want to use?? [ iOS / macOS ]

根据自己的需要选择, 此处选择iOS。

3、What language do you want to use?? [ Swift / ObjC ]

根据自己的需要选择, 此处选择ObjC。

4、Would you like to include a demo application with your library? [ Yes / No ]

是否创建一个demo应用包含在工程里, 根据自己的需要选择,此处选择Yes。

5、Which testing frameworks will you use? [ Specta / Kiwi / None ]

是否需要使用测试Framwork,选择None。

6、Would you like to do view based testing? [ Yes / No ]

否需要做接界面调试test,此处选择No。

7、What is your class prefix?

设置工程文件的前缀,这个根据自己的代码规范填写。

通过以上步骤,我们只是创建了一个合格的空的工程,并没有实现任何功能,接下来在pods 下面的classes路径下创建自己的代码类。

接下来就需要把自己的工程推送到Github:

在github上创建一个公开项目,地址为:https://github.com/Ray0218/KLCommonTools.git

然后cd到本地KLCommonTools文件夹下,将依赖库push到远程仓库,并添加版本号。

git add *
git commit -s -m"Initial commit of libyary"
git remote add origin https://github.com/Ray0218/KLCommonTools(这个地址要换成你的远程仓库地址)
$ git push origin master//添加版本号

//问题来了,本地仓库在想做同步远程仓库到本地为之后本地仓库推送到远程仓库做准备时报错了,错误如下:
//fatal: refusing to merge unrelated histories
//查阅了一下资料,发现可以在pull命令后紧接着使用--allow-unrelated-history选项来解决问题

git pull origin master --allow-unrelated-histories

//做完以上操作,可以再次push,

//添加版本号

$ git tag -m "first release" "0.1.0"

$ git push --tags

这就完成了远程仓库的创建。

删除tag方式

//本地删除
git tag-d v0.1.2
远端删除
git push origin :refs/tags/v0.1.2

填写公开库的配置

配置文档
http://guides.cocoapods.org/syntax/podspec.html#source_files

 Pod::Spec.new do |s|
    s.name             = 'KLCommonTools'
    s.version          = '0.1.2'
    s.summary          = 'A short description of KLCommonTools.'
    
    # This description is used to generate tags and improve search results.
    #   * Think: What does it do? Why did you write it? What is the focus?
    #   * Try to keep it short, snappy and to the point.
    #   * Write the description between the DESC delimiters below.
    #   * Finally, don't worry about the indent, CocoaPods strips it!
    
    s.description      = <<-DESC
    TODO: Add long description of the pod here.
    DESC
    
    s.homepage         = 'https://github.com/Ray0218/KLCommonTools'
    # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
    s.license          = { :type => 'MIT', :file => 'LICENSE' }
    s.author           = { 'Ray0218' => 'ray_ios@163.com' }
    s.source           = { :git => 'https://github.com/Ray0218/KLCommonTools.git', :tag => s.version.to_s }
    # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
    
    s.ios.deployment_target = '8.0'
    
    #s.source_files = 'KLCommonTools/Classes/**/*'#只提取目录中的文件,不展示目录
 #s.source_files = 'KLCommonTools/Classes/**/*.{h,m}' #有.{h,m}会显示显示对应的文件夹目录
    
    # 基础依赖
    s.subspec 'Configure' do |ss|
        ss.source_files     = 'KLCommonTools/Classes/Configure/**/*'
    end
    #category
    s.subspec 'Category' do |ss|
        ss.source_files     = 'KLCommonTools/Classes/Category/**/*'
        ss.dependency 'KLCommonTools/Configure'
    end
    
    s.subspec 'Others' do |ss|
        ss.source_files     = 'KLCommonTools/Classes/Others/**/*'
        ss.dependency 'KLCommonTools/Configure'
        ss.dependency 'MBProgressHUD', '~> 0.9.2'#依赖库
    end
    
    s.subspec 'WebView' do |ss|
        ss.source_files     = 'KLCommonTools/Classes/WebView/**/*.{h,m}'
    end
    
    s.subspec 'Tool' do |ss|
        #ss.source_files     = 'KLCommonTools/Classes/Tool/**/*'
        #子文件夹的写法(一定要把父文件夹的source_files给注释掉)
        ss.subspec 'Define' do |defi|
            defi.source_files =  'KLCommonTools/Classes/Tool/Define/**/*'
        end
    end


# s.resource_bundles = {
#   'KLCommonTools' => ['KLCommonTools/Assets/*.png']
# }
# 这里放的 png 图片的资源文件,如果还想使用 storyboard,xib,imageset 文件的话,可以如下面的方法写
# s.resource_bundles = {
#   'KLCommonTools' => ['KLCommonTools/Assets/*.{png,xib,storyboard,imageset}']
# }
#如果我们使用 xib , storyboard , 图片等资源的时候文件必须强制性放到 Assets 文件夹下

# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
#s.dependency 'MBProgressHUD', '~> 0.9.2'
#s.libraries = 'c++','xml2' #  该pod依赖的系统资源文件
end

获取Resources目录中的资源文件时需要使用硬编码的形式来获取: NSString *bundlePath = [[NSBundle bundleForClass:[self class]].resourcePath stringByAppendingPathComponent:@"/KLCommonTools.bundle"];
NSString *imagePath = [NSString stringWithFormat:@"%@",bundlePath,@"webView_close"];

发布公开库 ,把spec文件提交的cocoapod

注册 pod trunk

如:pod trunk register '邮箱' '用户名' --description='电脑描述')

邮箱会收到一个验证邮件 点击链接即可

接下来查看个人信息 pod trunk me

中间可能遇到这种错误:

NoMethodError - undefined method 'last' for #<Netrc::Entry:0x007fc59c246378>`

这时候需要尝试更新gem源或者pod:

 sudo gem update --system

 sudo gem install cocoapods

 sudo gem install cocospods-trunk

如果遇到这种情况:

[!]Authentication token is invalid or unverified. Either verify it with ...

解决方案:

重新执行第一步注册。重来。

使用trunk工具,发布公开库。

本地检测代码仓库是否有问题

pod lib lint  KLCommonTools.podspec --allow-warnings --use-libraries

远程检测代码仓库是否有问题

pod spec lint  KLCommonTools.podspec --allow-warnings --use-libraries

最后使用pod trunk命令,把podspec文件推送到CocoaPod官方库

pod trunk push  KLCommonTools.podspec --allow-warnings --use-libraries

--use-libraries 如果引用了静态库编译时需要静态库,
--allow-warnings 忽略警告

在验证和上传你的podspec文件到trunk之前,需要将你的源码push到Github上,tag一个版本号并发布一个release版本,这样podspec文件中的s.source的值才能是准确的

项目引用

正常引用

如果没有使用分模块引用,那么在Podfile中应该这样引用:

pod 'KLCommonTools' 

分模块引用

使用了分模块引用,在Podfile中如下引用:


三种用法
pod 'KLCommonTools' 引入pod库中所有模块
pod 'KLCommonTools/Others' 只引入Others模块
pod 'KLCommonTools', :subspecs => ['Configure', 'Category']
 

提交一个新版本:

修改XXXX.podspec文件中s.version的内容

Pod::Spec.new do |s|
s.version = "0.0.x"
s.summary = "xxxxxx"
...
end

提交修改

git add -A && git commit -m "Release 2.0.0"
git push origin master
git tag '2.0.0'
//将tag推送到远程仓库
git push --tags  

GitHub上的版本打上tag,一定要和podspec中的s.version一致。

验证.podspec文件

 
pod spec lint xxxx.podspec --verbose

发布

// 忽略警告 --allow-warnings
pod trunk push xxxx.podspec  --allow-warnings

参考:
//www.greatytc.com/p/f444b3ded68d
//www.greatytc.com/p/0c1e7ac8f4eb
//www.greatytc.com/p/e5d3c7a7335a
//www.greatytc.com/p/19c4dd45ea3e
https://blog.csdn.net/weixin_33704234/article/details/88475404

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容