-
在git远端创建私有库仓库
-
cd 到本地私有库创建的目录下
-
添加到pod repo
1
pod repo add SpecName SpecURL
-
生成项目
1
pod lib create SpecName
-
替换 Classes 目录下的文件
刚创建时 Classes 目录下有一个 ReplaceMe.m, 删掉它, 并将需要的文件放到该目录下, 如果包含其他目录, 可在 podspec 中 s.source_files 指定路径, 建议使用s.subspec设置子目录,否则pod install之后文件目录跟设置目录不一致
-
修改 podspec 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
Pod::Spec.new do |s| s.name = 'SpecName' s.version = '0.0.1' s.summary = 'A short description of SpecName.' # 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/lingjye/SpecName' # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' s.license = { :type => 'MIT', :file => 'LICENSE' } s.author = { 'lingjye' => 'github@lingjye.com' } s.source = { :git => 'https://github.com/lingjye/SpecName.git', :tag => s.version.to_s } # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>' s.ios.deployment_target = '8.0' s.source_files = 'SpecName/Classes/**/*' # s.resource_bundles = { # 'SpecName' => ['SpecName/Assets/*.png'] # } # s.public_header_files = 'Pod/Classes/**/*.h' # s.frameworks = 'UIKit', 'MapKit' # s.dependency 'AFNetworking', '~> 2.3' end
s.name :私有库名称
s.version :版本号,每一个版本对应一个tag
s.summary : 简介
s.description : 介绍
s.homepage : 项目主页地址
s.screenshots : 截图地址
s.license : 许可协议
s.author : 作者
s.source : 项目地址
s.social_media_url : 社交网址
s.ios.deployment_target = ‘8.0’ : 支持的pod最低版本
s.source_files : 需要包含的源文件
s.resources: 资源文件“*” 表示匹配所有文件
“**” 表示匹配所有子目录
“c*” 表示匹配以名字C开头的文件
“*c” 表示匹配以名字c结尾的文件
“*c*” 表示匹配所有名字包含c的文件
“?” 表示任意一个字符(注意是一个字符)
“[set]” 匹配多个字符,支持取反
“{p,q}” 匹配名字包括 p 或 q的文件s.resource_bundles : 同上
s.public_header_files : 公开头文件, 可不指定, 默认所有
s.frameworks : 依赖的系统动态库
s.dependency :依赖库, 如果依赖多个分行写, 例如:1 2
s.dependency 'AFNetworking', '~> 2.3' s.dependency 'ReactiveCocoa', '~> 2.5'
s.requires_arc : 是否支持ARC
s.subspec : 子目录1 2 3 4
#二级目录 s.subspec 'SubSpec' do |ss| ss.source_files = '************/Classes/SubSpec/*.{h,m}' end
由于在 podspec 文件中并没有指明私有仓库地址的地方, 无法使用类似 Podfile 中 如
1
:git => 'https://https://github.com/lingjye/Specs.git'
操作, 所以私有库中引用私有库,s.dependency 只能写依赖的库名, 和版本号。这种情况可以在验证和上传私有库的时候进行指明。如:
本地验证
1
pod lib lint SpecName.podspec --sources=https://github.com/CocoaPods/Specs.git,https://github.com/lingjye/YourPrivite/Specs.git
提交到 Pod 仓库
1
pod repo push --source=https://github.com/CocoaPods/Specs.git,https://github.com/lingjye/YourPrivite/Specs.git
-
本地验证
1
pod lib lint SpecName.podspec --use-libraries --allow-warnings
如果使用了第三方库就添加
--use-libraries
忽略警告
--allow-warnings
-
上传本地代码到远程仓库
1 2 3 4 5
git add . git commit -am "desc" git remote add origin https://github.com/lingjye/SpecName git pull origin master git push origin master
如果提示:
1 2 3 4 5 6
! [rejected] master -> master (non-fast-forward) error: failed to push some refs to '' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
出现这个问题是因为远程分支上存在本地分支中不存在的提交
可以先fetch, 再merge, 也就是pull, 把运程分支上的提交合并到本地分支之后再push
也可以使用
git push origin master -f
命令, 强行让本地分支覆盖远程分支 -
设置标签
1 2
git tag -m "description" "version" git push --tags
version 与 podspec 文件中的保持一致
-
提交pod
1
pod repo push SpecName SpecName.podspec --use-libraries --allow-warnings
-
使用私有库
在 Podfile 中编辑, 如下:
1 2 3 4 5 6 7 8
# Podfile文件 # 公有仓库, 保证其他库能正常拉取 source 'https://github.com/CocoaPods/Specs.git' # 你的私有仓库 source 'https://github.com/lingjye/YourPrivite/Specs.git' pod 'YourPrivite'
或者
1
pod 'YourPrivite', :git => 'https://github.com/lingjye/YourPrivite/Specs.git'