目录
- [创建与维护](# 1)
- 创建并设置一个私有的Spec Repo
- 创建PodLib
- 创建lib所对应的podspec文件
- 配置podspec与验证
- 本地测试
- 向私有的Spec Repo中提交podspec
- 在自己项目中使用
- 更新维护podspec
- 移除本地仓库
- 移除本地仓库中的lib.podspec
- Trunk发布自己的Pods
- 参考申明
创建与维护
下面详细分为7个步骤来学习和掌握这项技能
创建并设置一个私有的Spec Repo
首先我们在github上建立一个自己的仓库 LocalPod(仓库名字任意)
-
在本地创建Spec Repo
# pod repo add [Private Repo Name] [对应的.git url] $ pod repo add LocalPod https://github.com/Maoyis/LocalPod.git
进入 ~/.cocoapods/repos 目录此时就能看到我们自己的pod仓库了
PS: 如果有其他合作人员共同使用这个私有Spec Repo的话在他有对应Git仓库的权限的前提下执行相同的命令添加这个Spec Repo即可。
创建PodLib(针对从零创建lib)
建好本地仓库后我们来建一个自己的库(lib), 如果已经有一个lib只需要添加并配置相应的podspec文件就行可忽略此步直接到下一阶段。不过看看总不会有坏处的(๑•ᴗ•๑)
创建一个lib(库),详见pod lib创建自己的lib。开始前首先得给我们的lib建一个版本库(git,svn都行)创建一个
-
跳转到一个用来保存自己库的文件夹下来创建一个lib(推荐单独创建一个专门用来保存自己的库),并在该目录执行
#pod lib create [libName] $ pod lib create QXFullGestureView
执行后正常情况下会有一个交互:
lib使用的语言swif/ObjeC
是否创建一个demo
选择什么测试框架 [ Specta / Kiwi / None ]
是否进行UI测试
类的前缀
然后就会在该目录创建一个lib
- 添加相关要生成lib的文件到Pod文件夹:(libName)/(libName)/Classes, 当然还要删除ReplaceMe.m文件(只要在提交前删除掉就好)
-
该步骤非必要,主要正对pod lib creat时创建过demo时观察变化
$cd Example $pod update
此时再展开工程会发现文件已经添加到了项目中,但却在开发模式pod文件加下(Development Pods)。
创建lib所对应的podspec文件-(针对已存在的lib)
官方教程
- 在lib文件夹下执行
pod spec create QXFullGestureView https://github.com/Maoyis/MyLibrary.git
配置podspec与验证
-
配置MyLibrary.podspec(ruby文件)详情
s.name = 'QXFullGestureView ' ##名字必须与libname相同 s.version = '0.1.0' #版本必须为0.0.0格式 s.summary = 'all gesture view' #关于库的一个简短描述 s.description = <<-DESC TODO: 备注文字(较长描述) DESC #是否支持arc s.requires_arc = true #文件主页 s.homepage = 'https://github.com/Maoyis/QXFullGestureView ' #开源协议 s.license = { :type => 'MIT', :file => 'LICENSE' } #作者信息 s.author = { 'Maoyis' => '[email protected]' } #源文件所在网络路径 s.source = { :git => 'https://github.com/Maoyis/QXFullGestureView .git', :tag => s.version.to_s } #支持版本 s.ios.deployment_target = '7.0' #公开头文件名 s.public_header_files = 'Pod/Classes/**/*.h' #依赖的框架 s.frameworks = 'UIKit', 'MapKit' #依赖库 s.dependency 'AFNetworking', '~> 2.3'
-
完成上面主要配置(并非所有配置)后,验证一下这个文件是否可用。执行:
#测试podspec检查是否存在问题 $ pod lib lint //通过结果 -> QXFullGestureView (0.1.0) QXFullGestureView passed validation. # 如果失败也可以试试, 针对无法正确找到lib.podspec $ pod lib lint --source https://github.com/Maoyis/QXFullGestureView .git #如果有警告可以忽略 $ pod lib lint --allow-warnings
本地测试与提交
- 准备:创建一个项目(如果没pod lib创建或没创建demo 否则跳过步骤1)配置Podfile
platform :ios, '7.0'
pod 'MyLibrary', :path => '……/podTest/QXFullGestureView ' #指定路径
pod 'MyLibrary', :podspec => '……/QXFullGestureView .podspec' #指定podspec文件
pod install
-
编写代码,导入lib验证是否可以正常使用
pod lib lint
由于人处于开发阶段,此时再展开工程会发现文件已经添加到了项目中,但却在开发模式Development Pods文件夹下(Development Pods)。
-
将lib提交到远端仓库
#跳转到lib目录下 $cd [libFolder] #由于lib已经在git版本控制下就不需要初始化,直接添加文件提交 $ git add . $ git commit -s -m "Initial Commit of Library" #添加远端仓库(这里要用到第二个空仓库存储lib区别第一个用来存储本地Spec Repo) $ git remote add origin https://github.com/Maoyis/QXFullGestureView .git #提交到远端仓库 $ git push origin master
-
由于podspec文件中获取Git版本控制的项目还需要tag号,所以我们要打上一个tag,
$ git tag -m "release 0.1.0" "0.1.0" $ git push --tags #推送tag到远端仓库
接下来我们就要发布测试版为正式版了(提交自己的podspec到私有或公有Spec Repo)
向私有的Spec Repo中提交自己的podspec
-
提交podspec到自己的Spec Repo
#pod repo [第一步建立的本地仓库] [要上传的podspec] $ pod repo push LocalPod QXFullGestureView.podspec
执行完毕后本地查看本地仓库就可以看到对应的 文件夹/版本文件夹/上传的podspec
并且你会看到
Pushing the `QXSpecRepo' repo
To https://github.com/Maoyis/LocalPod.git
对,他还会自动推送最新的Space Repo 到绑定的版本控制中心
-
搜索自己的lib
pod searchQXFullGestureView
到这里一个属于自己的pod库就大功告成了
在自己项目中使用
这里既不赘述了,唯一需要注意的是pod install、Updat默认不会去本地Pod文件夹查找lib,只会默认在master文件夹中寻找
所以我们必须在Podfile文件中加入查找源
#我们自己的私有spec仓库的地址
source 'https://github.com/Maoyis/LocalPod.git'
#官方仓库的地址
source 'https://github.com/CocoaPods/Specs.git'
更新维护podspec
添加新文件到Classes, 修改对应的podspec配置
-
验证配置无误
$pod lib lint
更新demo调用(非必要影响步骤)
pod update-
提交到远端代码托管服务器
$ git add . $ git commit -m"new version" $ git push origin master # 打上新tag $ git tag -m"version 1.0.1" "1.0.1" $ git push --tags
-
提交本地pod仓库
$ pod repo push QXSpecRepo MyLibrary.podspec
移除本地仓库
# pod repo remove [Private Repo Name]
$ pod repo remove QXSpecRepo
删除前:
删除后:
移除本地仓库中的lib.podspec
前往~/.cocoapods/repos 将其对应文件夹文件夹删除,更新本地仓库
$ git add --all .
$ git commit -m "remove unuseful pods"
$ git push origin master
Trunk发布自己的Pods
-
注册Trunk获取推送资格
#通过邮箱和用户名注册 #pod trunk register [your mailbox] [your Name] --description='mybook' $ pod trunk register [email protected] Maoyis --description='mybook'
-
等到到一份邮件,点击邮件中的链接后验证是否可以查到自己信息:
pod trunk me
-
完成准备工作后就可以push spec到cocoapod了
#在工程根目录(包含有.podspec) pod trunk push *.podspec
pod trunk push 命令会首先验证你本地的podspec文件(是否有错误),之后会上传spec文件到trunk,最后会将你上传的podspec文件转换为需要的json文件。
-
更新本地repo
#更新方式有多种,个人觉得这个比较保险 pod setup
查看本地文件夹(~/.cocoapods/repos/master/Specs)中repo master是否同步了自己的库
参考申明
- 《使用Cocoapods创建私有podspec》
- 官方文档