一、背景
目前iOS组件化常用的方案就是Pod+路由——持续集成,今天我们来创建一个Pod库。
二、注册用户名和邮箱(此为GitHub的用户名和绑定的邮箱)
1、可以使用如下指令查看自己是否已经绑定过
$ pod trunk me
如果终端如图一输出,就表示已绑定,否则未绑定2、未绑定,使用如下指令绑定
$ pod trunk register 你的邮箱 '你的用户名' --description='这里是描述'
终端输出如图二
3、然后在使用 $ pod trunk me 指令来验证下,是否绑定成功
二、在本地创建pod库
1、根据自己存放的习惯创建一个空文件夹,用于存放我们的pod库,然后打开它
$ cd /Users/xiaohe/Desktop/Cocoapods
$ pod lib create YHBaseTest
3、执行完上述命令后,会依次问如下问题
What platform do you want to use?? [ iOS / macOS ]
> iOS
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
Would you like to do view based testing? [ Yes / No ]
> No
What is your class prefix?
> YH
4、完成以上问题后,终端输出图三,并会自动打开项目5、然后我们配置YHBaseTest.podspec文件
Pod::Spec.new do |s|
s.name = 'YHBaseTest'
s.version = '0.1.0' //版本号根据自己的版本设定
s.summary = '这是一个测试pod' //这个描述要自己写一个不要使用默认的,不然会给一个警告的
# 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
这个地方也是一个描述,要比summary这个地方的描述多一些
DESC
s.homepage = 'https://github.com/AugustCloud/YHBaseTest'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { '这个是绑定的用户名' => '这里是绑定的邮箱@163.com' }
s.source = { :git => 'https://github.com/AugustCloud/YHBaseTest.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '9.0'
s.source_files = 'YHBaseTest/Classes/**/*'
# s.resource_bundles = {
# 'YHBaseTest' => ['YHBaseTest/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
end
三、去GitHub上创建一个仓库
1、如图四创建一个新的仓库2、接下来就把自己的工程推送到GitHub上。
//打开当前项目所在文件夹
$ cd /Users/xiaohe/Desktop/Cocoapods/YHBaseTest
$ git remote add origin 此为GitHub上面的仓库地址
$ git add .
$ git commit -m "first commit"
$ git push -u origin master
终端出现该输出,标识上传成功
To https://github.com/AugustCloud/YHBaseTest.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
3、验证本地podspec文件,使用如下指令
$ pod lib lint YHBaseTest.podspec
如报错:[!] YHBaseTest did not pass validation, due to 1 warning (but you can use `--allow-warnings` to ignore it).
使用如下指令
$ pod lib lint --allow-warnings
只要见到 YHBaseTest passed validation. 就是成功通过了验证。
到这我们只是创建了一个合格的空白的工程,并没有任何的功能,接下来我们就来创建自己的代码!!!!
四、添加自己的库文件
1、我们打开项目,创建一个类,声明一个方法,一遍来测试
- (void)testPrint {
NSLog(@"哈哈哈,我的pod的打印");
}
2、要把创建的文件放入到Classes文件夹里面,并删除ReplaceMe.m文件3、添加完代码,执行以下指令上传到远程仓库
$ git add .
$ git commit -m "添加测试代码"
$ git push
4、发布项目到Cocoapods上去需要添加版本号的,并创建同名分支branch,用如下指令添加版本号
//添加版本号
$ git tag -a 0.1.0 -m "版本0.1"
//创建同名分支
$ git branch 0.1.0
//查看版本号
$ git tag
//将本地的添加的tag同步到远程代码仓库
$ git push --tag
五、验证本地podspec文件
1、打开podspec所在文件目录
$ cd podspec所在文件目录
2、使用验证命令
//YHBaseTest.podspec修改为自己的podspec文件名称
$ pod spec lint YHBaseTest.podspec
注:看到 YHBaseTest.podspec passed validation. 就说明验证通过
3、如果失败,输出如下的日志
[!] TestLib did not pass validation, due to 3 warnings (but you can use `--allow-warnings` to ignore them).
那就是用如下的指令
$ pod lib lint --allow-warnings
六、发布pod库(就是提交podspec文件到Specs仓库)
使用如下命令
//YHBaseTest.podspec 就是自己的podspec文件名称
$ pod trunk push YHBaseTest.podspec
出现如下日志就表示发布成功了
Updating spec repo `trunk`
Validating podspec
Updating spec repo `trunk`
--------------------------------------------------------------------------------
🎉 Congrats
🚀 YHBaseTest (0.1.0) successfully published
📅 June 21st, 02:51
🌎 https://cocoapods.org/pods/YHBaseTest
👍 Tell your friends!
需要注意的是,这种提交命令,不允许你的podspec文件存在警告。若存在警告,则不能通过有效性验证,导致发布失败!
我们就使用如下命令
$ pod trunk push YHBaseTest.podspec --allow-warnings
到这里创建和发布就结束了!!!可以使用了!!!
之前帮点的邮箱也会受到发布成功的邮件!!!!
七、验证和使用
1、可以使用pod搜索指令来验证自己是否发布成功
$ pod search YHBaseTest
有的时候会搜索不到,不要担心,使用移除索引来解决
$ rm ~/Library/Caches/CocoaPods/search_index.json
再次搜索时,会自动重新创建索引
如果在次执行$ pod search YHBaseTest,还是搜索不到发布的项目,不要着急,就使用pod setup来更新本地版本库
如果在这里还是搜索不到,那就不要在搜索了,直接创建一个测试项目,创建Podfile文件,导入pod 'YHBaseTest',使用pod install来拉取
$ pod install
这时候发现可以正常打导入我们自己的cocopods库
八、总结
我们还可以在.podspec文件中指定其他的依赖,比如我们想基于AFNetworking,封装一套属于自己的网络请求库,那么我们就可以一并将AFNetworking也pod下了,只需要增加一行代码即可
#尝试引入第三方依赖库
s.dependency 'AFNetworking', '~> 2.3'