提交代码到代码托管平台
既然是开源,要求代码任何人都能够访问,这里选择github,当然也可以用其他平台如oschina等,项目必须是公开项目.比如我的这个:https://github.com/iOSSinger/SGExtension.git
创建spec文件
将代码克隆到本地,如果本地已经存在,直接跳过这一步.
创建.podspec文件,切换到项目根目录,创建spec文件:
//切换到项目根目录
cd SGExtenion
//创建spec文件
pod spec create SGExtension
用xcode打开 SGExtension.podspec,里面有英文注释,我这里直接给简单模板,其实就是去掉了注释,详细的设置看这里
Pod::Spec.new do |spec|
spec.name = 'SGExtension'
spec.version = '1.0.2'
spec.ios.deployment_target = '8.0'
spec.license = 'MIT'
spec.homepage = 'https://github.com/iOSSinger'
spec.author = { "iOSSinger" => "747616044@qq.com" }
spec.summary = '各种工具的合集'
spec.source = { :git => 'https://github.com/iOSSinger/SGExtension.git', :tag => spec.version }
spec.source_files = "SGExtension/**/{*.h,*.m}"
spec.resources = "SGExtension/source.bundle"
spec.frameworks = 'UIKit'
spec.library = 'z'
spec.requires_arc = true
end
解释下每行的意思:
spec.name
名字,pod search 搜索的关键词,注意这里一定要和.podspec的名称一样,否则报错
spec.version
版本号
spec.ios.deployment_target
支持的ios最低版本
spec.license
许可证,一般MIT,这里提醒一下,根目录下必须要有LICENSE这个文件,可以直接把我项目中的copy一份,改下作者名字即可.一般github创建仓库的时候可以选择许可为MIT,会自动帮你生成该文件.
spec.homepage
项目主页地址,要求必须能访问
spec.author
作者信息
spec.summary
项目简介
spec.source
项目的地址,填上项目的github地址,tag => spec.version表示git项目的tag值与上面的spec的版本一致,这里是 1.0.2 .
spec.source_files
项目源文件,主要是.h和.m文件,
*表示匹配所有文件
{.h,.m} 表示匹配所有以.h和.m结尾的文件
** 表示匹配所有子目录,以及递归子目录spec.resources
项目所需的资源文件,比如图片
spec.frameworks
项目的依赖框架,比如UIKit,不需要后缀名
spec.library
项目依赖的库文件(这个是系统的库文件),不需要后缀名,比如sqlite,libz等.以lib开头的需要省略掉lib这三个字母.例如:libz需要简写为z否则报错.
spec.requires_arc
是否是arc,一般true
如果你的项目依赖了别的pod项目,可以这样写:
spec.dependency = 'AFNetworking'
提交代码,并打上tag
//提交代码
git push
//打tag
git tag 1.0.2
//将tag推送到远端
git push origin --tags
验证podspec文件
pod spec lint SGExtemnsion.podspec
这一步如果报错,根据错误自行修改,根据大致意思能看出来个大概,终端会给出哪一行出错了.一般就是语法错误,资源找不到,git地址不对或者不能访问.指定的文件如{.h,.m}找不到,一般再检查检查基本没问题.
注册trunk,并提交spec文件cocoapods仓库
注册chunk,查看是否注册过
pod trunk me
如果没有注册,那么注册:
pod trunk register 747616044@qq.com "iOSSinger"
填上邮箱 和 用户名就可以了.注册完成之后会给你的邮箱发个邮件,进入邮箱邮件里面有个链接,需要点击确认一下.然后再查看下是否注册成功:
pod trunk me
提交spec文件到 CocoaPods 中心仓库
pod trunk push SGExtension.podspec
如果前面都没问题,这一步基本也没啥问题.不过网速比较慢可能要等很久,这一步建议翻墙,不然有可能真的很慢.
然后验证一下,是否可以查到
pod search SGExtension
如果能够查到,恭喜你 !,如果查不到,往下看
- 解决方案:
* 查看上一步(提交到代码仓库)是否成功,再次执行提交:
1
pod trunk push SGExtension.podspec
如果出现如下信息:
1
[!] Unable to accept duplicate entry for: SGExtension (1.0.2)
那么说明已经提交到cocoapods仓库成功,那么有可能就是本地仓库没有更新.更新本地仓库:
1
pod repo update
再次执行 pod search SGExtension 命令,如果还搜索不到,继续往下看:
rm ~/Library/Caches/CocoaPods/search_index.json
这句话是移除已经生成的搜索目录缓存文件,移除之后,执行pod search会重新生成一份最新的缓存列表,基本到这里就差不多了.
如果还有问题,那就需要终极大招,但是不推荐用,时间很长,除非翻墙.
pod repo remove master pod setup
或者
sudo rm -fr ~/.cocoapods/repos/master pod setup
这两种写法的意思都是移除本地cocoapods仓库,重新从官网拉取一遍.可能时间比较长,所以不建议用,如果网速度快可以考虑使用,也可以翻墙.整个仓库打下大约500M+(截止当前时间).
集成到项目中试试
target '项目名' do
pod 'SGExtension'
end
多人共同维护你的开源项目
如果需要多个人维护一个库,每个人都应该有权限push提交spec文件;第一个push的人可以被认为是管理员,可以再添加子管理员,这样子管理员就有权限push了
pod trunk add-owner 邮箱地址
移除某个管理员
pod trunk remove-owner 邮箱地址
pod lib lint 和 pod spec lint 有什么区别
- pod lib lint 不需要联网
- pod spec lint 会联网检查sepc repo,并且关联tag
原文出处
cocoapods系列教程—让自己的开源框架支持cocoapods
参考
参考:http://studentdeng.github.io/blog/2013/09/13/cocoapods-tutorial/