1、注册CocoaPods账户信息
想要创建一个开源pod库, 首先我们需要注册CocoaPods, 这里使用trunk方式, 作为一个iOS开发人员你一定安装了CocoaPods, 那么只需要在终端执行:
pod trunk register 邮箱地址 '用户名' --verbose
这里我们一般使用github邮箱和用户名, 然后在你的邮箱中会收到确认邮件, 在浏览器中点击链接确认即注册成功, 成功之后可以终端执行:
pod trunk me
查看自己的注册信息, 以后当你有了自己的开源Pod库, 也可以用此方式随时查看自己发布过的Pods;
2、创建共享库文件并上传到公有仓库
共享库需要三个必不可少的部分:
-
共享文件夹
(文件夹存放着你要共享的内容, 也就是其他人pod得到的文件, .podspec文件中的source_files需要指定此文件路径及文件类型); -
LICENSE文件
(默认一般选择MIT); -
库描述文件.podspec
(本库的各项信息描述, 需要提交给CocoaPods, pod通过这个文件查找到你共享的库).
这一步分两种情况:
- 如果你已经有了现成的想要共享的文件,你只需要满足上面三个部分,即可上传到公有仓库即可继续其他的步骤;
- 你想要创建一个全新的工程去做自己的共享, 参考Using Pod Lib Create
a、执行终端命令:
pod lib create 库名
b、CocoaPods将立即打开您的Xcode项目; 从那里可以编辑CocoaPods生成的所有文件。
c、打开*.podspec文件,修改类库配置信息。
#
# Be sure to run `pod lib lint BLPopHandlerController.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
s.name = 'BLPopHandlerController'
s.version = '0.1.0'
s.summary = 'A short description of BLPopHandlerController.'
# 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/upupSue/BLPopHandlerController'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'upupSue' => '594821076@qq.com' }
s.source = { :git => 'https://github.com/upupSue/BLPopHandlerController.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '8.0'
s.source_files = 'BLPopHandlerController/Classes/**/*'
# s.resource_bundles = {
# 'BLPopHandlerController' => ['BLPopHandlerController/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/BLPopHandler/BLPopHandlerController.h'
# s.frameworks = 'UIKit','Foundation'
end
按照默认配置,类库的源文件将位于Pod/Classes
文件夹下,资源文件位于Pod/Assets
文件夹下,可以修改s.source_files
和s.resource_bundles
来更换存放目录。s.public_header_files
用来指定头文件的搜索位置。
s.frameworks
和s.libraries
指定依赖的SDK中的framework和类库,需要注意,依赖项不仅要包含你自己类库的依赖,还要包括所有第三方类库的依赖。
podspec文件的详细说明可以看Podspec Syntax Reference。
d、进入Example文件夹,执行pod install,让demo项目安装依赖项并更新配置。
e、添加代码,重新运行Pod install来应用更新,demo中调用测试。
Development Pods are different from normal CocoaPods in that they are symlinked files, so making edits to them will change the original files, so you can work on your library from inside Xcode. Your demo & tests will need to include references to headers using the #import <MyLib/XYZ.h> format.
f、把源代码推送到远程仓库
//进入源代码根目录
cd ~
//添加到git得暂存区
git add -A
//提交到本地仓库
git commit -m "first commit"
//添加远端仓库地址
git remote add origin https://github.com/upupSue/BLLibPopController.git
//把本地代码推送到远端仓库
git push -u origin master
3、编辑.podspec文件
修改s.source
s.source = { :git => "远端仓库地址", :tag => '0.1.0' }
检查Podspec lints是否正确。这可以通过两种方法完成,pod lib lint和pod spec lint。 它们之间的区别是,pod lib lint不访问网络,而pod spec lint会检查外部repo和关联的标签。
pod lib lint BLPopHandlerController.podspec
...
BLPopHandlerController.podspec passed validation.
4、打tag, 发布一个release版本
一切准备就绪后, 我们需要在你的git仓库里面存在一个与.podspec文件中一致的version, 这里你可以在你的git仓库中的releases一项去手动发布, 也可以在当前文件夹下使用终端命令:
git tag -m 'first release' '1.0.1'
git push --tags #推送tag到远端仓库
成功之后即可在你的releases里面看到这个tag的版本.
5、发布自己的库描述文件podspec给cocoapods
同样在这个文件夹下, 终端执行:
pod trunk push BLPopHandlerController.podspec --allow-warnings
6、关于查找和使用新创建的库
pod search BLPopHandlerController
检验是否可用
大多情况下会出现这个问题:
[!] Unable to find a pod with name, author, summary, or description matching `BLPopController`
这主要是因为在本地索引里面没有, 解决办法
- pod setup (不行,使用方法二)
- pod repo update(不行,使用方法三)
- 前往这个路径下~/Library/Caches/CocoaPods删除search_index.json文件 , 或者使用终端命令删除:
rm ~/Library/Caches/CocoaPods/search_index.json
然后重新搜索.
7、更新维护podspec
如果有错误或者需要迭代版本,修改工程文件后推送到远端仓库后, 需要修改podspec中的版本号, 并重新打tag上传, 再进行新一轮的验证和发布, 当然, 创建一个演示demo工程供其他开发者下载查看并不会影响我们的pod库.
扩展阅读