美文网首页iOS开发之常用技术点
iOS 组件化- 把gitlab上的SDK 使用CocoaPod

iOS 组件化- 把gitlab上的SDK 使用CocoaPod

作者: 西博尔 | 来源:发表于2018-10-30 18:01 被阅读153次
场景: 我是负责写SDK的, 在我SDK中, 不得不使用AFNetworking ,Masonry等第三方库 , 但是为了避免和主工程有冲突, 我会更改类名, 方法名,const 常量,宏定义等,否则极易引发冲突 ,但是SDK中的类目, 依然极易和主工程的类目发生冲突,引起crash!!!! 所以, 需要把SDK中使用的开源库分离 ,在分离的同时 ,我想能不能把SDK也用CocoaPods方式管理 集成引用, 在引用同时, 自动下载所需要的三方库

1.在GitLab创建两个仓库,一个SDK代码仓,一个Spec索引仓

image.png

在gitlib上创建两个私有仓库(私有库会有权限问题,记得开放权限) , 一个Spec仓库 , 一个SDK仓 ,怎么创建就不用教大家了吧
SDK仓放代码
Spec仓放podspec索引

2.将SDK仓clone到本地

git clone git@git.google.net:Sibor/CPCiOSSDK.git

3.在SDK仓中创建READEME ,LICENSE等

1.完全不需要自己手动创建
2.先找个任意位置 输入命令 `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         = 'https://www.jianshu.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}'

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很重要哦

git add .
git commit -m "添加了SDK代码"
git tag -a 0.1.0 -m "添加0.1tag" 
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
image.png

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

image.png

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

7.pod search

命令行

 pod search CPCiOSSDK
image.png

8.编写podfile ,pod install

和正常的写法有一些区别
# 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文件中引用了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.更新本地spec仓

pod repo push CPCiOSSDKSpec CPCiOSSDK.podspec --allow-warnings

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 等一会儿就好了

``

``

11.SDK联调

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

重点!!!!

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

image.png

相关文章

网友评论

本文标题:iOS 组件化- 把gitlab上的SDK 使用CocoaPod

本文链接:https://www.haomeiwen.com/subject/yrwgtqtx.html