iOS-swiftIOS知识积累

iOS制作公开库,本地库,私有库的区别

2018-08-27  本文已影响26人  CowboyBebop

1,创建pod 公开库

公开库就是做一个像AFN或者SD一样,可以公开给任何人用的库

98FA6DC3-A335-491C-9482-63D42C71EEB1.png 83A96B09-3C65-47C6-AFD8-D4412D6DE514.png

pod spec create ZDOpenLib

在ZDOpenLib 的文件夹就会有个spec文件


5360A46C-CAAC-4ADB-858A-1401A5602578.png

  [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 不同的库

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
其中的一些命令
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

上一篇下一篇

猜你喜欢

热点阅读