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 [email protected]: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" => "[email protected]" }
  #项目地址,这里不支持ssh的地址,验证不通过,只支持HTTP和HTTPS,最好使用HTTPS                   
  s.source           = { :git => "https://coding.net/wtlucky/podTestLibrary.git", :tag => "0.1.0" }
  #多媒体介绍地址     
  # s.social_media_url = 'https://twitter.com/'                       
  #支持的平台及版本
  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参考文献

  • http://www.jianshu.com/p/0cea9006c0cb
  • http://blog.devtang.com/2014/05/25/use-cocoapod-to-manage-ios-lib-dependency/
  • http://studentdeng.github.io/blog/2013/09/13/cocoapods-tutorial/
  • http://blog.wtlucky.com/blog/2015/02/26/create-private-podspec/

你可能感兴趣的:(cocoapods系列教程---创建私有pods)