场景1:在我自己写的SDK中集成其他SDK,又不想直接把别人的SDK直接放到我的SDK中
场景2:项目组件化
1.会让自己的SDK包体积增加,每次发布更新比较麻烦,编译慢, 提交慢
2.给公司其他部门使用的时候, 因为体积过大, 会下载很慢
3.github有对大文件体积的限制
4.自己的SDK, 有可能会和其他三方SDK,命名冲突,全局变量冲突,宏定义冲突等,极易crash
下面操作在github上同样适用 , 只是使用gitlab没有100mb大文件限制, 公司内部下载更快
github上也能这么操作 , 1.往主仓提交 2.自建spec仓库, 提交
1.在GitLab创建两个仓库,一个SDK代码仓,一个Spec索引仓
在gitlib上创建两个私有仓库(私有库会有权限问题,记得开放权限) , 一个Spec仓库 , 一个SDK仓 ,怎么创建就不用教大家了吧
SDK仓放 .h .m /或者.a 或者.framework
Spec仓放podspec索引 ``
2.将空的SDK仓clone到本地
git clone git@git.google.net:Sibor/CPCiOSSDK.git
3.在SDK仓中创建READEME ,LICENSE等
1.完全不需要自己手动创建
2.先找个任意位置 输入命令 `pod lib create 命令创建库项目`
任意位置是不想再当前仓库使用 pod lib create ,目录太多, 麻烦
Mac:~ Sibor$ pod lib create CPCiOSSDK
Cloning `https://github.com/CocoaPods/pod-template.git` into `RKBluetoothLEKit`.
Configuring RKBluetoothLEKit 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:
- http://guides.cocoapods.org/making/using-pod-lib-create.html
( hold cmd and double click links to open in a browser. )
What language do you want to use?? [ Swift / ObjC ]
> ObjC
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None
Would you like to do view based testing? [ Yes / No ]
> No
What is your class prefix?
> CPC
然后会成成下列文件
然后把这些文件都 拷贝 到刚才clone的目录下
4.改写podspec文件 ,下面是我的podspec
Pod::Spec.new do |s|
s.name = 'CPCiOSSDK'
s.version = '0.1.0'
s.summary = 'A short description of CPCiOSSDK.'
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
s.homepage = '//www.greatytc.com/u/5f9dd7c82945'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'Sibor' => 'Sibor@qutoutiao.net' }
s.source = { :git => 'git@git.qutoutiao.net:Sibor/CPCiOSSDK.git', :tag => s.version.to_s }
s.ios.deployment_target = '8.0'
s.source_files = 'CPCiOSSDK/Classes/**/*'
# s.resource_bundles = {
# 'CPCiOSSDK' => ['CPCiOSSDK/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit' ,'Foundation'
s.dependency 'AFNetworking', '~> 3.2.1'
s.vendored_frameworks = 'CPCiOSSDK/*.{framework}'
end
s.vendored_frameworks = 'CPCiOSSDK/*.{framework}'
是你仓库如果存放的不是.h .m 需要写这句
s.dependency
是你的仓要依赖的第三方SDK
s.source_files
是你的仓库要使用的资源文件
s.source
是你当前的存放源码或者.a.framework的仓要提交的位置
SDK放哪? 像AFNetworking那样有源文件的放哪????
Classes 是放源码的, 例如AFNetworking那样
因为SDK不想让别人看到源码,所以我直接把打包好的Framework放到了如下图目录,然后在CPCiOSSDK/Example目录下执行 pod install 如下图
然后写头文件, 写调用 , 没问题之后就可以提交了 这个就是个demo, 让你验证别人install的时候是否有问题, 如果这步都不行, 就先别着急提交了, 仔细修改podspec文件
4.检查提交
pod lib lint --allow-warnings
如果没问题, 就会像下图
然后提交代码 , tag很重要哦
tag号要和podspec文件里面的s.version 保持一致
git add .
git commit -m "添加了SDK代码"
git tag -a 0.1.0 -m "和podspec文件的s.version 保持一致"
git push origin --tags
git push
5.添加私有Spec库到本地pod库
在当前目录下操作就可以
pod repo add CPCiOSSDKSpec git@git.qutoutiao.net:dinghao/CPCiOSSDKSpec.git
如果成功 ,会在隐藏目录 ~/.cocoapods/repos目录下生成CPCiOSSDKSpec
开启隐藏文件的方法:command + shift + 点
接下来的非常关键,这一步会将CPCiOSSDK.podspec文件从git上下载到上图的CPCiOSSDKSpec文件夹里
6.提交本地库,向Spec Repo提交podspec(修改之后提交)
pod repo push CPCiOSSDKSpec CPCiOSSDK.podspec --allow-warnings --verbose
pod repo push CPCiOSSDKSpec(这个是远程存放podspec仓的名字) CPCiOSSDK.podspec(本地要提交的podspec文件的名字) --allow-warnings (忽略警告) --verbose(展示详细过程)
然后给你们看一下 ,成功之后git仓 的样子 如下图:
0.01 就是自己打的tag, 不用纠结我这个和上面的名字不一样, 因为是另一个工程
7.pod search
命令行
pod search CPCiOSSDK
8.编写Podfile和github开源仓上的区别
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
source 'git@git.qutoutiao.net:Sibor/CPCiOSSDKSpec.git' #私有仓库地址
source 'https://github.com/CocoaPods/Specs.git' #官方仓库地址
target 'podTest' do
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
# use_frameworks!
pod 'CPCiOSSDK', '~> 0.1.0'
#pod 'AFNetworking', '~> 3.1.2'
# Pods for podTest
end
0.私有仓库是你的Spec索引库地址, 不是SDK代码库地址, 切记!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1.CPCiOSSDK里面用到了AFNetworking ,但是再之前的podspec文件中dependency 了AF ,所以这里不需要再次引用,会自动下载
2.私有仓库和官方仓库都要写, 要不让报错, 会找不到的
然后pod install 之后就可以使用了
9.更新
1.修改podspec文件的版本号
例如:s.version = '0.1.0' -> s.version = '0.2.0'
2.提交
git add .
git commit -m "添加了SDK代码"
git tag -a 0.2.0 -m "添加0.2tag"
git push origin --tags
git push
3.更新podspec仓 ,会将podspec索引更新到podspec仓
pod repo push CPCiOSSDKSpec CPCiOSSDK.podspec --allow-warnings --verbose
4.如果是别人要更新你的仓库
第一次 :pod repo add CPCiOSSDKSpec git@git.baudu.net:Sibor/CPCiOSSDKSpec.git
第二次 :pod repo update CPCMobAdSpec
别人如果要使用你私有库的,就给对方上面的这2条命令 ,让对方把你的spec索引目录下载到本地 ,就可以pod search 了
10.错误原因
. 错误原因, 未完待续
1.[!] Unable to find a podspec in the working directory
缺少.podspec文件
2. - ERROR | [iOS] file patterns: The vendored_frameworks pattern did not match any file.
其实是找不到这个路径下的SDK s.vendored_frameworks = 'CPCiOSSDK/*.{framework}'
3. - ERROR | [iOS] unknown: Encountered an unknown error ([!] /usr/bin/git clone git@git.qutoutiao.net:dinghao/CPCMobAdSDK.git /var/folders/vv/_k5606496z5gnq22kdtxqjrh0000gn/T/d20181031-33291-xbfjvq --template= --single-branch --depth 1 --branch 0.0.1
版本号问题, 提交的时候没有指定tag
4. [!] Unable to find a pod with name, author, summary, or description matching CPCMobAdSDK
删除/Library/Caches/CocoaPods/search_index.json 文件, 重新pod search 等一会儿就好了
``
[!] CPCBaiduMobAdSDK did not pass validation, due to 1 error.
``