创建自己的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' => '[email protected]' }
    s.source           = { :git => 'https://github.com/Ray0218/KLCommonTools.git', :tag => s.version.to_s }
    # s.social_media_url = 'https://twitter.com/'
    
    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 #`

这时候需要尝试更新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

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

你可能感兴趣的:(创建自己的cocoapods公共库)