CocoaPods私有库的搭建
为什么要使用CocoaPods私有库
常见的第三库我们都会使用CocoaPods 进行管理,我们只需要在Podfile里面写上要引入的第三方库,CocoaPods就会自动的给我们添加进去,免去很多手工操作。
在一个公司的开发中可能会有基础库,开发好的公共组件,为了便于集成同时为了代码安全可以使用CocoaPods私有库,可以很方便的进行代码集成。
什么是podspec仓库
podspec 通俗的说就是一个pod库的身份证,里面有一个pod库的版本,描述等等。
podspec仓库就是放podspec的,在使用的Cocoapods的时候我们需要一个仓库。
我们在使用pods公有库的时候,pods会生成~/.cocoapods/repos/master/Specs目录来存放podspec
搭建podspec仓库
1.首先在github上创建podspec仓库https://github.com/gurongkang/TestPodsSpecRepo.git
2.在Terminal中执行下面的命令
#pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
#pod repo add TestPodsSpecRepo.git https://github.com/gurongkang/TestPodsSpecRepo.git
执行成功之后会生成如下目录
~/.cocoapods/repos/TestPodsSpecRepo
创建Pod项目工程
1.在Terminal中输入一些命令
#pod lib create [项目名]
$pod lib create TestPod
依次选 Objc Yes Specta Yes Test(前缀自己决定)
然后生成一个TestPod 工程,在如图所示的目录下
Snip20170227_1.png放入想由Pod进行管理的文件,此处测试放入一个Toast+UIView
2.在开发模式下测试pod库的代码
在工程目录下找到Exanple工厂的podfile文件可以看到
pod 'TestPod', :path => '../'
这个就是加载本地的pod库,执行pod update命令之后,TestPod并没有在Pods目录下,而是在测试目录下,这是因为,podspec文件没有添加到Spec Repo中。测试没有问题继续
3.将工程提交到git 仓库,并打上相关的tag
在工程目录下执行下面的命令
$ git add .
$ git commit -s -m "初始化TestPod库"
$ git remote add origin git@github.com:gurongkang/TestPod.git #添加远端仓库
$ git push origin master #提交到远端仓库
$ git tag -m "first release" "0.1.0" #打上标签,这个很重要
$ git push --tags #推送tag到远端仓库
编辑podspec文件
#
# Be sure to run `pod lib lint TestPod.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
#名称
s.name = 'TestPod'
#版本
s.version = '0.1.0'
#简介
s.summary = 'A short description of TestPod.'
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
#介绍
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
#主页,这里要填写能够访问的地址,要不然通不过验证
s.homepage = 'https://github.com/gurongkang/TestPod'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
#开源协议
s.license = { :type => 'MIT', :file => 'LICENSE' }
#作者
s.author = { 'gurongkang' => 'gurongkang@mucang.cn' }
#项目地址,这里不支持ssh的地址,验证不通过,只支持HTTP和HTTPS,最好使用HTTPS。
#这里的s.source须指向存放源代码的链接地址,而不是托管spec文件的repo地址
s.source = { :git => 'https://github.com/gurongkang/TestPod.git', :tag => "0.1.0" }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
#支持的平台及版本
s.ios.deployment_target = '8.0'
#代码源文件地址,**/*表示Classes目录及其子目录下所有文件,如果有多个目录下则
#用逗号分开,如果需要在项目中分组显示,这里也要做相应的设置
s.source_files = 'TestPod/Classes/**/*'
# s.resource_bundles = {
# 'TestPod' => ['TestPod/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
#所需的framework,多个用逗号隔开
# s.frameworks = 'UIKit', 'MapKit'
#依赖关系,该项目所依赖的其他库,如果有多个需要填写多个s.dependency
# s.dependency 'AFNetworking', '~> 2.3'
end
编辑完成之后,需要验证是否可以使用,在命令行中执行
$ pod lib lint
验证通过显示TestPod passed validation.
本地测试TestPod.podspec
可以将Example工程目录中的Podfile文件改为
pod 'TestPod', :path => '../TestPod.podspec'
就可以进行本地测试
向Spec Repo提交podspec
测试文件没有问题我们就可以把TestPod.podspec提交到远程Spec Repo仓库中
进入TestPod根目录
执行下面的命令
# pod repo push [Repo名] [podspec 文件名字]
pod repo push TestPodsSpecRepo TestPod.podspec --allow-warnings
Validating spec
-> TestPod (0.1.0)
- WARN | source: The version should be included in the Git tag.
- WARN | xcodebuild: TestPod/TestPod/Classes/Toast+UIView.m:257:43: warning: 'sizeWithFont:constrainedToSize:lineBreakMode:' is deprecated: first deprecated in iOS 7.0 - Use -boundingRectWithSize:options:attributes:context: [-Wdeprecated-declarations]
- NOTE | xcodebuild: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.2.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIStringDrawing.h:70:1: note: 'sizeWithFont:constrainedToSize:lineBreakMode:' has been explicitly marked deprecated here
- WARN | xcodebuild: TestPod/TestPod/Classes/Toast+UIView.m:274:47: warning: 'sizeWithFont:constrainedToSize:lineBreakMode:' is deprecated: first deprecated in iOS 7.0 - Use -boundingRectWithSize:options:attributes:context: [-Wdeprecated-declarations]
- WARN | xcodebuild: TestPod/TestPod/Classes/Toast+UIView.m:24:22: warning: unused variable 'CSToastOpacity' [-Wunused-const-variable]
Updating the `TestPodsSpecRepo' repo
Already up-to-date.
Adding the spec to the `TestPodsSpecRepo' repo
- [Add] TestPod (0.1.0)
Pushing the `TestPodsSpecRepo' repo
To https://github.com/gurongkang/TestPodsSpecRepo.git
34eb222..b691418 master -> master
提交成功,这时查看远端的TestPodsSpecRepo也有更新
使用制作好的Pod
在项目中使用