iOS 组件化- 把gitlab/github上的SDK 使用CocoaPods管理

场景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索引仓

image.png
在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

然后会成成下列文件

image.png

然后把这些文件都 拷贝 到刚才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那样有源文件的放哪????

image.png

Classes 是放源码的, 例如AFNetworking那样

因为SDK不想让别人看到源码,所以我直接把打包好的Framework放到了如下图目录,然后在CPCiOSSDK/Example目录下执行 pod install 如下图

image.png

然后写头文件, 写调用 , 没问题之后就可以提交了 这个就是个demo, 让你验证别人install的时候是否有问题, 如果这步都不行, 就先别着急提交了, 仔细修改podspec文件

4.检查提交

pod lib lint --allow-warnings

如果没问题, 就会像下图


image.png

然后提交代码 , 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 + 点

image.png

接下来的非常关键,这一步会将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(展示详细过程)

image.png

然后给你们看一下 ,成功之后git仓 的样子 如下图:

image.png

0.01 就是自己打的tag, 不用纠结我这个和上面的名字不一样, 因为是另一个工程

7.pod search

命令行

 pod search CPCiOSSDK
image.png

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.

``

11.SDK联调

SDK 想联调 可以下断点的方式 , 我们都知道
1.创建workspase
2.在工作空间创建SDK工程 , 创建Test工程
3.Test工程的Link Binary With Libraries添加SDK工程的framework
这样我们就可以 调试Framework了

重点!!!!

同样我们可以在CPCiOSSDK 工程里面添加SDK源码的工程 例如这样:

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容