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

1,创建pod 公开库

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

  • 1,先在GitHub创建一个项目
98FA6DC3-A335-491C-9482-63D42C71EEB1.png
  • 2,将项目clone 到本地,新建一个classes 文件,在该文件夹下创建person.h 和person.m 两个文件
83A96B09-3C65-47C6-AFD8-D4412D6DE514.png
  • 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

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

推荐阅读更多精彩内容