其实公有库和私有库,原理都是一样的,只是podspec索引库一个是公有的,一个是私有的,公有的是上传到【
https://github.com/CocoaPods/Specs.git
】,私有的是上传到自己的git服务器【
http://git.test.net/TestGroup/TestSpecs.git
】不公开而已。现在跟着步骤一起试试吧!
一、创建两个Git项目TestKit和TestSpecs
在git服务器创建这两个项目。
TestKit:存放源代码的项目
TestSpecs:存放索引库文件的项目
Git服务器:可以是自己公司的gitlab、也可以是github、也可以是其他第三方git
1、创建组件项目TestKit
https://test.com/test/TestKit.git
将刚刚新建的私有索引库TestSpecs添加到本地
// pod repo add 索引库名称 索引库地址
pod repo add TestSpecs http://git.test.net/TestGroup/TestSpecs.git
三、快速创建模板库
1、使用cocoapods模板库快速创建工程
pod lib create TestKit
终端输入上面命令后,回车,按照提示,输入对应配置:
$ pod lib create TestKit
Cloning `https://github.com/CocoaPods/pod-template.git` into `TestKit`.
Configuring TestKit template.
------------------------------
To get you started we need to ask a few questions, this should only take a minute.
If this is your first time we recommend running through with the guide:
- https://guides.cocoapods.org/making/using-pod-lib-create.html
( hold cmd and double click links to open in a browser. )
What platform do you want to use?? [ iOS / macOS ]
What language do you want to use?? [ Swift / ObjC ]
Would you like to include a demo application with your library? [ Yes / No ]
Which testing frameworks will you use? [ Specta / Kiwi / None ]
Would you like to do view based testing? [ Yes / No ]
What is your class prefix?
Running pod install on your new library.
Analyzing dependencies
Fetching podspec for `TestKit` from `../`
Downloading dependencies
Installing TestKit (0.1.0)
Generating Pods project
Integrating client project
[!] Please close any current Xcode sessions and use `TestKit.xcworkspace` for this project from now on.
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
Ace! you're ready to go!
We will start you off by opening your project in Xcode
open 'TestKit/Example/TestKit.xcworkspace'
To learn more about the template see `https://github.com/CocoaPods/pod-template.git`.
To learn more about creating a new pod, see `https://guides.cocoapods.org/making/making-a-cocoapod`.
2、修改spec文件
# Be sure to run `pod lib lint MAVersionUpdateKit.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 https://guides.cocoapods.org/syntax/podspec.html
Pod::Spec.new do |s|
s.name = 'TestKit'
s.version = '0.1.0'
s.summary = '测试私有spec库'
s.description = <<-DESC
测试私有spec库的具体描述
s.homepage = 'http://git.test.net/testGroup/TestKit'
s.author = { '姓名' => '邮箱' }
s.source = { :git => 'http://git.test.net/testGroup/TestKit.git', :tag => s.version.to_s }
s.ios.deployment_target = '8.0'
s.source_files = 'TestKit/Classes/**/*'
s.resource_bundles = {
'TestKit' => ['TestKit/Assets/**/*.png']
s.public_header_files = 'TestKit/Classes/Public/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
s.dependency 'TestOtherKit'
四、模板工程源代码push到刚创建的工程
1、将代码提交到组件仓库
git add .
git commit -m '第一次提交'
git remote add origin https://test.com/test/TestKit.git
git push origin master
// 第一次push如果报错的话可以加上-f,强制提交
// git push -f origin master
2、打标签
标签0.1.0与TestKit.podspec中的s.version保持一致
git tag '0.1.0'
git push --tags
五、提交podspec到私有索引库
在上传spec文件前我们可以做一个验证来节省时间。如果不先本地验证,直接远程验证,比较费时。
1、本地验证Spec
// 本地验证不会验证 s.source 中的tag
// 如果是公有库,只需要此命令即可
pod lib lint
// 如果依赖的库有私有库,需要加上私有库的地址
pod lib lint --sources=http://git.test.net/TestGroup/TestSpecs.git,https://github.com/CocoaPods/Specs.git
2、远程验证Spec
// 远程验证会验证 s.source 中的tag,如果此时没有打上相应的标签则会报错
pod spec lint
// 如果依赖的库有私有库,需要加上私有库的地址
pod spec lint --sources=http://git.test.net/TestGroup/TestSpecs.git,https://github.com/CocoaPods/Specs.git
验证私有库提示
如果验证的是私有库,则在后面加上--private,否则会有警告,你可以选择--allow-warnings来忽略该警告
pod lib lint --private
pod spec lint --private
//如果有警告, 而我们又不想处理, 可用—allow-warnings忽略, 即:
pod lib lint --allow-warnings
pod spec lint --allow-warnings
验证通过之后如下:
$ pod spec lint --sources=http://git.test.net/TestGroup/TestSpecs.git
,https://github.com/CocoaPods/Specs.git
-> TestKit (0.1.0)
- NOTE | xcodebuild: note: Using new build system
- NOTE | [iOS] xcodebuild: note: Planning build
- NOTE | [iOS] xcodebuild: note: Constructing build description
- NOTE | [iOS] xcodebuild: warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App')
Analyzed 1 podspec.
TestKit.podspec passed validation.
3、提交podspec文件到索引库
初次提交或者以后发布新版,都可以使用如下的方式,进行podspec文件的提交。
3.1 提交到私有索引库
方法一:使用命令提交
// pod repo push 私有索引库名称 spec名称.podspec
pod repo push TestSpecs TestKit.podspec
pod repo push TestSpecs TestKit.podspec --allow-warnings --use-libraries --skip-import-validation
这里的操作过程:先将我们的代码直接push到本地索引库TestSpecs,推送后会自动帮我们同步到远程索引库
方法二:直接使用可视化工具提交
新建版本,将TestKit.podspec文件push到索引库
3.2 提交到公有索引库
这会使用到pod trunk命令。
pod trunk push TestKit.podspec
如果有警告不想处理,可以使用如下命令
pod trunk push TestKit.podspec --allow-warnings
如果没有cocoapods账户,需要执行以下逻辑进行注册:
注册cocoapods账户
如果是首次使用:
// 邮箱 用户名 描述信息
pod trunk register email1234@126.com 'name' --description='Test'
如果已经注册, 可使用下面的指令:
pod trunk register eloy@example.com --description='描述信息'
pod trunk register eloy@example.com
不出错的话会输出:
2、在Podfile的最顶部添加如下描述
// 第二行是为了保证公有库的正常使用
source 'http://git.test.net/TestGroup/TestSpecs.git'
source 'https://github.com/CocoaPods/Specs.git'
3、添加使用组件TestKit
pod 'TestKit'
4、安装组件
pod install
附录:podspec文件验证不通过常见问题
1、找不到依赖框架
因为依赖框架是私有的,所以需要指定私有spec地址的sources
// 私有库不加私有spec地址,就会报错:
-> TestKit (0.1.0)
- ERROR | [iOS] unknown: Encountered an unknown error (Unable to find a specification for `SJNetwork` depended upon by `TestKit`
2、文件夹层次太多导致的
默认的头文件目录设置为:s.public_header_files = ‘Pod/Classes/*/.h’;但是如果Classes目录中,你的代码文件夹层次结构超过两级,就会出现以下错误:
- ERROR | [iOS] file patterns: The public_header_files pattern did not match any file.
这是因为文件夹层次结构过浅,导致无法找到对应的文件;如果你的文件夹层次结构有三级,就应该修改成:s.public_header_files = ‘Pod/Classes/* * /* * /*.h’;
3、远程验证报错
pod spec lint命令,校验pod的代码和配置时是从git上拉取的代码进行编译;所以如果未创建git,会报以下错误:
-> TestKit (0.1.0)
– ERROR | [iOS] unknown: Encountered an unknown error ([!] /Applications/Xcode.app/Contents/Developer/usr/bin/git clone http://192.168.110.114/jihq/ServyouCocoaPodDynamicLayout.git /var/folders/rg/f1ycrs553dq2z2dq7mt0mbh80000gn/T/d20160921-12602-1bx4f8v –template= –single-branch –depth 1 –branch 0.1.0
Cloning into ‘/var/folders/rg/f1ycrs553dq2z2dq7mt0mbh80000gn/T/d20160921-12602-1bx4f8v’…
remote: Not Found
fatal: repository ‘http://192.168.110.114/jihq/ServyouCocoaPodDynamicLayout.git/’ not found
) during validation.
如果未将代码上传到git上,或者未在git上增加对应的tag值,会报以下错误:
-> TestKit (0.1.0)
– ERROR | [iOS] unknown: Encountered an unknown error ([!] /Applications/Xcode.app/Contents/Developer/usr/bin/git clone http://192.168.110.114/jihq/servyoucocoapoddynamiclayout.git /var/folders/rg/f1ycrs553dq2z2dq7mt0mbh80000gn/T/d20160921-12686-1o6vj1q –template= –single-branch –depth 1 –branch 0.1.0
Cloning into ‘/var/folders/rg/f1ycrs553dq2z2dq7mt0mbh80000gn/T/d20160921-12686-1o6vj1q’…
fatal: Remote branch 0.1.0 not found in upstream origin
) during validation.
4. 修改代码文件后需要提交
lint命令是从git上拉取文件,所以文件是以git为准。比如你在本地的Assets目录下新增了图片文件,但是没有push到git上,就会出现以下问题: