cocoapods系列教程---创建私有pods

cocoapods系列教程---安装与使用
cocoapods系列教程---Podfile文件
cocoapods系列教程---Podfile.lock文件 和 Spec Repo
cocoapods系列教程---spec文件
cocoapods系列教程---原理篇
cocoapods系列教程---让自己的开源框架支持cocoapods
cocoapods系列教程---模块化设计
cocoapods系列教程---创建私有pods

参考:http://blog.wtlucky.com/blog/2015/02/26/create-private-podspec/
为什么要创建私有的pods ?,对于个人,比如我的某些代码片段,工具类非常好用,但是我又不想公开,每次使用又要配置一遍,太麻烦,采用私有的可以完美解决上面的问题.对于公司,有些公司有多个项目,但是很多模块其实是重复的;另外如果一个项目到后期会变得很大,稍微改动一下,编译时间都会很长,利用pod进行拆分,每个人负责一个模块,不仅加快了便以速度,而且方便维护.缺点当然也是有的,万一哪天cocoapods死了,那就麻烦了.

创建私有pods与公有pods步骤基本一致,区别在于,私有pods的repo(存放spec文件的地方)是私有的,你的项目也是私有的,并且自己的电脑能够访问这两个地址.下面是详细步骤:

  1. 创建并设置一个私有的Spec Repo。
  2. 创建Pod的所需要的项目工程文件,并且有可访问的项目版本控制地址(可以是在本地或者远程仓库)
  3. 创建Pod所对应的podspec文件。
  4. 本地测试配置好的podspec文件是否可用。
  5. 向私有的Spec Repo中提交podspec。
  6. 在个人项目中的Podfile中增加刚刚制作的好的Pod并使用。
  7. 更新维护podspec

我们需要创建一个类似于master的私有Spec Repo,创建一个 Git仓库,这个仓库你可以创建私有的也可以创建公开的,不过既然私有的Spec Repo,还是创建私有的仓库吧,需要注意的就是如果项目中有其他同事共同开发的话,你还要给他这个Git仓库的权限。因为GitHub的私有仓库是收费的,我还不是GitHub的付费用户,所以我使用oschina创建私有仓库.创建完成后执行:

pod repo add 仓库名 仓库地址

例如: 
pod repo add WTSpecs https://coding.net/wtlucky/WTSpecs.git

如果成功的话到~/.cocoapods/repos目录下就可以看到WTSpecs这个目录了。至此第一步创建私有Spec Repo完成.
验证是否成功:

cd ~/.cocoapods/repos/artsy-specs
$ pod repo lint .

成功会显示:

All the specs passed validation.

PS:如果有其他合作人员共同使用这个私有Spec Repo的话在他有对应Git仓库的权限的前提下执行相同的命令添加这个Spec Repo即可.

下一步,提供项目工程的可访问的项目版本控制地址,这个仓库应该也是私有的,只有自己和同事能访问.例如:

git add .
git commit -s -m "Initial Commit of Library"
git remote add origin git@coding.net:wtlucky/podTestLibrary.git  
git push origin master     

下一步,打上tag标记,因为podspec根据tag来找到指定版本的

git tag -m "first release" 0.1.0
git push --tags     #推送tag到远端仓库

下一步,在项目根目录创建并编辑podspec文件

pod spec create PodTestLibrary

用Xcode打开编辑,格式如下:

Pod::Spec.new do |s|
  #名称
  s.name             = "PodTestLibrary" 
  #版本号  
  s.version          = "0.1.0"
  #简短介绍,下面是详细介绍             
  s.summary          = "Just Testing." 
      
  s.description      = <<-DESC
                       #这里写详细介绍
                       DESC
  #主页,这里要填写可以访问到的地址,不然验证不通过,填个百度也行                     
  s.homepage         = "https://coding.net/u/wtlucky/p/podTestLibrary"  
   
  #截图,如果没有可以注释掉这一行(前面加 # 注释)                        
  s.screenshots     = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
  #开源协议,一般MIT           
  s.license          = 'MIT'
  #作者信息,后面是邮箱地址              
  s.author           = { "wtlucky" => "wtlucky@foxmail.com" }
  #项目地址,这里不支持ssh的地址,验证不通过,只支持HTTP和HTTPS,最好使用HTTPS                   
  s.source           = { :git => "https://coding.net/wtlucky/podTestLibrary.git", :tag => "0.1.0" }
  #多媒体介绍地址     
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'                       
  #支持的平台及版本
  s.platform     = :ios, '7.0'
  #是否使用ARC,如果指定具体文件,则具体的问题使用ARC           
  s.requires_arc = true                   
  #代码源文件地址,**/*表示Classes目录及其子目录下所有文件,如果有多个目录下则用逗号分开,如果需要在项目中分组显示,这里也要做相应的设置 
  s.source_files = 'Pod/Classes/**/*'  
  #资源文件地址,建议直接用bundle,路径为相对路径,下同
  s.resource_bundles = {
    'PodTestLibrary' => ['Pod/Assets/*.png']
  }                                       

  #公开头文件地址
  s.public_header_files = 'Pod/Classes/**/*.h'
  #所需的framework,多个用逗号隔开   
  s.frameworks = 'UIKit'
  #所需的依赖库,多个用逗号隔开,z代表libz.tdb,前缀lib和后缀tdb可省略
  spec.librarys               = 'z'
  #依赖关系,该项目所依赖的其他库,如果有多个需要填写多个s.dependency                  
  s.dependency 'AFNetworking', '~> 2.3'
     
end

下一步,保存文件,需要验证一下这个文件是否可用,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中,不过xcode的WARNING是可以存在的,验证需要执行一下命令:

pod spec lint PodTestLibrary.podspec

如果验证通过会显示:

PodTestLibrary passed validation.

验证通过表明这个podspec文件是合格的,不一定说明这个Pod是可以用的,我们需要在本地做一下验证.

下一步,本地验证:
我们可以创建一个新的项目,在这个项目的Podfile文件中直接指定刚才创建编辑好的podspec文件,看是否可用。 在Podfile中我们可以这样编辑,有两种方式:

platform :ios, '7.0'

pod 'PodTestLibrary', :path => '~/code/Cocoapods/podTest/PodTestLibrary'      # 指定路径
pod 'PodTestLibrary', :podspec => '~/code/Cocoapods/podTest/PodTestLibrary/PodTestLibrary.podspec'  # 指定podspec文件

然后执行pod install命令安装依赖,打开项目工程,可以看到库文件都被加载到Pods子项目中了,不过它们并没有在Pods目录下,而是跟测试项目一样存在于Development Pods/PodTestLibrary中,这是因为我们是在本地测试,而没有把podspec文件添加到Spec Repo中的缘故。

下一步,向私有仓库提交podspec

向Spec Repo提交podspec需要确认podspec必须通过验证无误,然后提交:

pod repo push WTSpecs PodTestLibrary.podspec

完成之后这个组件库就添加到我们的私有Spec Repo中了,可以进入到~/.cocoapods/repos/WTSpecs目录下查看:

.
├── LICENSE
├── PodTestLibrary
│   └── 0.1.0
│       └── PodTestLibrary.podspec
└── README.md

再去看我们的Spec Repo远端仓库,也有了一次提交,这个podspec也已经被Push上去了,至此,我们的这个组件库就已经制作添加完成了,使用pod search命令就可以查到我们自己的库了.如果过搜不到,看文章最后.

在完成这一系列步骤之后,我们就可以在正式项目中使用这个私有的Pod了

platform :ios, '7.0'

target "test" do
    
    pod 'PodTestLibrary','~>0.1.0', source: 'https://coding.net/wtlucky/podTestLibrary.git'

end

到此完成.

这里有个偏方:可以将spec文件保存到本机的~/.cocoapods/master/目录中仅供自己使用,比较适合一个人.

多人开发

如果需要多个人维护一个库,每个人都应该有权限push提交;第一个push的人可以被认为是管理员,可以再添加管理员,这样管理员就有权限push了

pod trunk add-owner 邮箱地址

移除某个管理员

pod trunk remove-owner 邮箱地址

常见问题

  • search命令搜索不到,更新一下仓库就可以了
  • 删除指定版本,删除后需要更新,否则还能搜到
  • pattern did not match any file这个错误是因为没有匹配到文件,很有可能是你的修改没有提交到git远程仓库
  • 明明已经提交了到pod仓库了,还是提示Unable to find a pod with name, author, summary, or descriptionmatching,解决办法
rm ~/Library/Caches/CocoaPods/search_index.json  

  • 本地验证通过了,也提交了podspec,也能search到,但是pod install的时候出现下面的提示
Unable to find a specification for
    pod 'SGExtension','~>1.0.1', source: 'https://git.oschina.net/iOSSingeri/SGPodRepo.git'

需在podfile文件最上面加上私有pods仓库地址:

source 'https://github.com/CocoaPods/Specs.git'  # 官方库
source 'https://git.coding.net/wtlucky/WTSpecs.git'   # 私有库

  • 更新指定仓库
pod repo update SGPodRepo

cocoapods参考文献

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容