制作一个远程私有库主要设计两个模块, 第一个是自己的模块壳工程,另一个就是存放组件版本号远程私有索引库了。
这里都采用GitHub
作为管理平台, 我们在GitHub
上面创建了两个repositories
仓库, 一个是我们存放项目工程的仓库叫PTLDemo
,一个是我们存放索引库的仓库名字叫PTLTestSpec
。
一、创建工程项目
仓库创建完后,我们利用CocoaPods
来创建一个模板工程,进入自己存放工程的目录下,在终端执行下面命令:
pod lib create PTLDemo
执行上面命令后,一个模板工程就这样创建好了,见下面“模板工程”图
工程创建好后,我们就开发自己的组件,在Example例子工程调试测试,这里就忽略流程。
一切就绪后我们就编写模板工程里面的PTLDemo.podspec文件
Pod::Spec.new do |s|
s.name = 'PTLDemo'
s.version = '0.1.1'
s.summary = 'A short description of PTLDemo.'
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
s.homepage = 'https://github.com/ptlcoder/PTLDemo'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'ptlcoder' => 'tanglong.peng@jyblife.com' }
s.source = { :git => 'git@github.com:ptlCoder/PTLDemo.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '9.0'
s.source_files = 'PTLDemo/Classes/**/*'
# s.resource_bundles = {
# 'PTLDemo' => ['PTLDemo/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
end
按照上面的格式,我们填写好相关信息, 最主要是下面三个元素,不能搞错。
s.version // 此次版本号,要和当前工程需要提交的tag保持一致
s.homepage // 工程项目的GitHub地址栏地址
s.source // 仓库的下载地址
填写好索引文件后,我们做一个校验处理
本地校验
pod lib lint --allow-warnings --no-clean
远程校验
pod spec lint --allow-warnings
没问题就把代码提交到创建好的GitHub仓库上面。然后打上相应的tag提交。
打tag的相关步骤
打本地tag
git tag 0.1.1 //0.11版本号和索引库版本保持一致
git tag -a v1.0 -m “这里是tag备注信息“ //-m可以带上备注
将本地tag同步到远程服务器
git push origin 1.0 //某个tag
git push origin --tags // 所有
删除本地tag:git tag -d 0.1.2
删除远程tag:git push origin :refs/tags/0.1.2
工程的步骤就完成到这里,另外我们就要创建索引库了。
二、创建远程索引库
1、创建本地私有索引库
pod repo add PTLTestSpec https://github.com/ptlCoder/PTLTestSpec.git
执行上面命令就会把GitHub上面的索引仓库clone下来存放在系统.cocoaPods repos
目录下,PTLTestSpec
是本地索引库的名字和GitHub仓库名保持一致
2、将私有库组件中的.podspec文件更新到本地私有索引库并同步更新到远程索引仓库
pod repo push PTLTestSpec PTLDemo.podspec --allow-warnings
PTLTestSpec 本地索引库名
PTLDemo.podspec 需要更新的索引库
--use-libraries 库里面包含了静态库
--allow-warnings 忽略警告
上面的命令做了两件事。第一,更新到本地私有索引库,第二,同步更新到远程索引仓库。
// 正常情况终端日志:
Updating the `PTLTestSpec' repo
Adding the spec to the `PTLTestSpec' repo
- [Update] PTLDemo (0.1.1)
Pushing the `PTLTestSpec' repo
// 报错:
Updating the `PTLTestSpec' repo
[!] /usr/bin/git -C /Users/ptlcoder/.cocoapods/repos/PTLTestSpec pull
Your configuration specifies to merge with the ref 'refs/heads/master'
可能的坑:如果是一个全新的索引库在第一次更新仓库的时候可能会出现这种报错,解决办法是在本地的索引库中随便添加一个空文件然后上传到远程去, 再来执行上面的pod repo push
命令。成功后再把新建的空文件删了。
其他:
pod cache clean --all
查看sdk支持的系统架构
lipo -info 模拟器sdk路径
// 合并模拟器和真机的SDK架构,然后输出到真机路径下面
lipo -create 模拟器sdk路径 真机sdk路径 -output 真机sdk路径