iOS制作公开库,本地库,私有库的区别
1,创建pod 公开库
公开库就是做一个像AFN或者SD一样,可以公开给任何人用的库
- 1,先在GitHub创建一个项目
- 2,将项目clone 到本地,新建一个classes 文件,在该文件夹下创建person.h 和person.m 两个文件
- 3,然后创建spec 文件
pod spec create ZDOpenLib
在ZDOpenLib 的文件夹就会有个spec文件
5360A46C-CAAC-4ADB-858A-1401A5602578.png
- 4,然后就是修改spec 文件
[s.name](http://s.name/) = "ZDOpenLib"
s.version = "0.0.1"
# summary:剪短描述
s.summary = "ZDOpenLib."
# description: 详细描述,要比summary 长
s.description = <<-DESC
DESC
# 项目主页,填你在GitHub 或者其他网站创建的项目首页地址
s.homepage = "[https://coding.net/u/Cowboy11/p/ZDOpenLib](https://coding.net/u/Cowboy11/p/ZDOpenLib)"
s.license = "MIT"
s.author = { “xxx" => [“xx@qq.com](mailto:%222259434901@qq.com)" }
s.platform = :ios, "5.0"
# When using multiple platforms
# s.ios.deployment_target = "5.0"
# s.osx.deployment_target = "10.7"
# s.watchos.deployment_target = "2.0"
# s.tvos.deployment_target = "9.0"
//项目的真实地址,pod 就根据这个来导入的
s.source = { :git => "[https://git.coding.net/Cowboy11/ZDOpenLib.git](https://git.coding.net/Cowboy11/ZDOpenLib.git)", :tag => "#{s.version}" }
# 点h 和点m 文件
s.source_files = "Classes", "Classes/**/*.{h,m}"
s.exclude_files = "Classes/Exclude"
# s.public_header_files = "Classes/**/*.h"
# 图片资源
# s.resource = "icon.png"
# s.resources = "Resources/*.png"
# s.preserve_paths = "FilesToSave", "MoreFilesToSave"
# s.framework = "SomeFramework"
# s.frameworks = "SomeFramework", "AnotherFramework"
# s.library = "iconv"
# s.libraries = "iconv", "xml2"
# 是否要求项目是否ARC
s.requires_arc = true
# s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
# 是否要第三方的库
# s.dependency "JSONKit", "~> 1.4"
end
修改完spec 要提交到git 仓库
0E6EFDCD-A9F8-4AC8-8AE5-FF9513BBDE7C.png
然后就在git 仓库看到了
D4A774C2-F43A-4F58-9AB8-E4E997B04876.png
最后需要的就是打一个tag,
110E1292-073B-42CA-BE1F-664D49CD3489.png
5),这样用作example的第三库就做好了,接下来就是提交cocoapods 的specs 里面了
提交之前可以用pod spec lint 和pod lib lint 验证一下,可能会报错,自己要注意修改spec 文件
先注册邮箱
pod trunk register [2259434901@qq.com](mailto:2259434901@qq.com)'zdq' —verbose
然后会让你去验证邮箱
发布
pod trunk push ZDOpenLib.podspec
成功了会有提示的
然后pod search ZDOpenLib ,就能搜到了,如果搜不到,先删除缓存文件
AFEE057F-8FAE-4709-94D9-6270B1C764A8.png
2,创建pod 本地库
本地库是只能在本地调试,是通过path 导入的
6430837C-003A-4234-ADA9-2F4C19CDA609.png
制作示例第三库 ZDLocalLib 的步骤跟之前差不多,区别就是spec 的验证,很多不需要验证,可以不用管,因为spec 文件不用提交,
然后创建 ZDLocalLibDemo , 通过podfile 文件导入
# Uncomment the next line to define a global platform for your project
platform:ios,'8.0'
target'ZDLocalLibDemo'do
//path 是通过本地路径导入,’../‘ 是到上一级 ,进入 ZDLocalLib 文件夹下找 spec 文件
pod'ZDLocalLib',:path=>"../ZDLocalLib"
end
407BE47B-E997-481E-8200-1D5E8879D7CB.png
3,创建pod 私有库
私有库,是自己维护一个私有的spec 仓库,将自己的第三库提交私有的spec仓库,通过不同的source 源,来pod 不同的库
-
1,当我们在终端输出pod repo时,就可以看到pod的spec 地址和路径了,当我们添加私有的spec 仓库之后,这里就会有两个
699D3B53-C638-4000-AA06-93A182D4B58F.png
先在coding.net 创建一个 ZDPersonalSpecRepo
5EF88091-70C2-4A63-930B-1051C42D3613.png
pod repo add ZDPersonalSpecRepo https://git.coding.net/Cowboy11/ZDPersonalSpecRepo.git
然后用终端输入上面命令往pods 里面添加私有的spec repo ,再输入pod repo 就能看到官方的和私有spec repo 了
76700E40-9CB9-4AEF-8CB5-189DEB6B484B.png
然后在coding.net 创建 ZDBaseKit 基础库 ,并clone 到本地
pod lib create ZDBaseKit
先创建模块库,创建过程会有很多选项,按需求选就行了,然后就是将自己的文件替换 Replace.m 文件就行了
它会帮你创建宿主工程,很方便
记得打tag并提交
26E66693-5FEF-4A11-9A8D-242401D89E90.png
-
2,示例库制作完了,就可以向私有的spec repo(ZDPersonalSpecRepo)提交了,当前提交之前,还是要用pod lib lint 和 pod spec lint 验证下,关于podsepc 文件的修改,跟之前的差不多
9949F832-2D98-4936-ACE1-AE7A56CE17AA.png
这就提交成功了,然后就可以建一个demo 项目来测试下了
BE926C49-FEFF-4AC9-ABD4-ED490E2804C7.png
需要注意的是ZDBaseKit 和RAC 是通过不同的源导入的,如果上面的两个source 不加的话,是不会成功的
其中的一些命令
pod trunk register [2259434901@qq.com](mailto:2259434901@qq.com) ‘描述’ —verbose
pod trunk push TestLib.podspec
和远程厂库连接
git remote add origin [https://github.com/zdq1179169386/ZDTestLib.git](https://github.com/zdq1179169386/ZDTestLib.git)
本地pod私有库的制作,podspec 的source 不需要写,pod 下来的库 在Development Pods文件夹下,podfile 文件,要加上私有库的本地路径:path=>"../TestLib”
本地没有分支,新建develop分支,之后上传分支
git push origin develop:develop
创建pod模板项目
pod lib create ZDFMBase
验证本地
pod lib lint
验证远程
pod spec lint
https://blog.csdn.net/shiren1118/article/details/7761203
本地和远程同时都创建了git仓库,而且远程仓库里还有文件,在remote 之后要拉下代码
git pull origin master --allow-unrelated-histories
4,我们项目中的应用
其实在我们项目中用的都不是上面的三种,而是本地库+脚本的形式,大多数组件化或者模块化的方式都是第三种,需要自己维护一个私有spec Repo,每次组件库的发布和升级都需要先向spec Repo 中提交,然后其他同事要去更新,非常麻烦,如果是第三种方法制作私有库,在做项目的过程中版本的库提交和升级特别麻烦,很影响效率。我们的方式是组件都做成本地库,然后用git管理,当其他同事要用的时候,执行pod install,脚本文件会根据开发模式还是发布模式去下载,如果是开发模式,会在项目的同级目录创建一个文件夹将所有需要的组件库,clone 到本地,然后让pod通过path 的方式导入,如果是 发布模式,就是根据url 去导入
会根据bcDebugSwitch参数区分,导入branch 还是 tag ,
然后去执行 ZHMainConfig.rb 这个脚本
这个导入banch 分支的代码,大家可以看到ZDLocalKit 这个库是在Development Pods 这个文件夹下面的和上面的第二种方式是一样的,它的本质就是先通过脚本去我们自己的git仓库,下载到本地,然后通过path 路径导入。
1535351832629.jpg
下面这张是通过tag 导入的,大家可以看到 ZDLocalKit 这个库直接就在Pods 这个文件夹下面了,但它既不是第一种情况的公开库,也不是按第三种情况制作的私有库,是因为Pod 本身就有通过URL 导入方式,当然这些是脚本的强大功能
1535351759892.jpg
当然这种方式也有不好的地方,就是一个大的组件库无法再拆分成一个一个小的组件库
5,关于pod 直接用git地址方式导入一个私有库
先在gitlab 或者coding.net 上创建个git仓库,随便创建两个文件,然后,打个标签。然后可以自己建一个demo工程,创建下podfile ,用下面的方式,就可以导入了
platform :ios, '8.0'
target 'ZDPodGitAddressExample' do
#ZDPodGitAddressKit 是我在coding.net 创建的私有git仓库,完全没有提交到公共的pod spec 仓库或者私有的spec 仓库
pod 'ZDPodGitAddressKit', :tag => '0.0.1', :git => 'https://git.coding.net/Cowboy11/ZDPodGitAddressKit.git'
end
当你pod成功了之后,你就会发现,当我们pod AFN这样的第三方库其实它是先去podspec 里面找到git 地址,然后根据git地址去下载代码仓库 tag 标签代码滴。
pod lib lint 和 pod spec lint 都可以在后面加上 --allow-warnings ,来消除警告带来的影响,
pod lib lint --verbose 输出错误信息会多一些
中间还碰到个奇怪的问题,就是开着VPN 时候,git push 提交代码的时候报下面的错误,做个记录吧
https://blog.csdn.net/xunan003/article/details/79233147
ZDBaseKit 是自己制作的公开库,也实现了将组件分成几个子组件
ZDBaseKit