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文件的地方)是私有的,你的项目也是私有的,并且自己的电脑能够访问
这两个地址.下面是详细步骤:
- 创建并设置一个私有的Spec Repo。
- 创建Pod的所需要的项目工程文件,并且有可访问的项目版本控制地址(可以是在本地或者远程仓库)
- 创建Pod所对应的podspec文件。
- 本地测试配置好的podspec文件是否可用。
- 向私有的Spec Repo中提交podspec。
- 在个人项目中的Podfile中增加刚刚制作的好的Pod并使用。
- 更新维护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/