组件化之CocoaPods私有库的创建和管理

在iOS项目开发中,我们制作自己的远程私有库或者开源库,然后用pod方式来安装或者移除比我们手动去删除或者集成更加的简单而且也不容易出错,管理起来更加方便。我们一般选择在github或者gittee、gitLab上创建开源库或私有库,开源库和私有库原理是一样的,本文是主要关于私有库的制作和后期管理的。

一、制作自己的私有库

如果我们电脑里面安装了cocoaPods,那么在本地电脑的用户目录下会有隐藏文件夹.cocoapods/repos, 查看隐藏文件夹通过command + shift + .快捷键,在目录里可以看到自己电脑里面包含的Cocoapods官方索引库和自己的索引库(如果有的话)索引库.png
我们平常去pod repo update更新pod库时就是在更新这里面的索引库, 如果你看不到自己制作的索引库,那么我们接下来开始制作一个!

1. 创建自己的远程索引库

我们可以选择创建一个私有库,这里使用gitee网站为远程库为例:
创建远程私有库.png
私有库自己命名,比如:xxxxSpec,这个库专门用来放索引文件的,可以放自己的多个私有库的索引文件,创建好接下来是将远程索引库克隆到本地索引库做关联(做关联这一步让我们可以命名自己的本地索引库).

pod repo add xxxxSpec http://gitee.***.***/xxx/xxxspecs.git 

这一步下来我们可以使用pod repo命令来查看是否已经在本地创建,或者直接在上述文件夹中查看。

2. 创建存放代码的远程仓库

远程仓库创建的方式跟上面索引库一样,名字比如为ZLFastUI,接下来用命令行创建对应的pod组件库.

pod lib create ZLFastUI // 回车之后会让你回答问题 
What platform do you want to use?? [ iOS / macOS ]
 > iOS

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 ]
 > Yes


What is your class prefix?
 > ZL

上面步骤之后会帮你创建一个文件夹,里面包含了样板工程 + 类库文件夹 + XXX.podspec.
自己的pod组件库.png

3. 将自己的文件放到上图ZLFastUI/Classes/中

在Example中打开自己的工程,命令行执行pod install后, Example运行,如果没有问题,接下来编辑好ZLFastUI.podspec文件.

Pod::Spec.new do |s|
  s.name             = 'ZLFastUI'
  s.version          = '0.2.1' // 这里是类库的版本号
  s.summary          = '这是一个OC的基于UIKit里面控件写的一个方便快速创建界面的库.'
  s.description      = <<-DESC
  本库封装了我们通常创建一个UI控件时会设置的属性和一些UI相关的尺寸计算及常用的宏定义。UI创建方面是封装在对应控件类分类中,集成这个库后,我们创建对应UI控件可以调用对应分类的方法来快速实现.
                       DESC

  s.homepage         = 'https://gitee.com/smile_dandy/zlfast-uikit'// 库的介绍主页
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'dandy_zhouli' => 'm18114356919@163.com' }
  s.source           = { :git => 'https://gitee.com/smile_dandy/zlfast-uikit.git', :tag => s.version.to_s } // 这里放的是具体的私有代码仓库的地址,不是索引仓库的地址
  s.ios.deployment_target = '9.0'
  s.source_files = 'ZLFastUI/Classes/**/*{h,m}'
end


上述填好之后进行下一步验证podspec文件有没有填对, 命令行cd到最外层的ZLFastUI文件夹.

cd 拖最外层文件夹ZLFastUI到这里按回车
pod lib lint --allow-warnings // 执行这行命令行检查
如果检查正确了会提示
ZLFastUI passed validation.

4.将pod生成的lib库提交到远程

命令行现在还是在最外层的,接下来执行命令行

// 将lib库添加到远程私有库,这个远程库地址是第二步自己创建的那个
git remote add origin https://gitee.com/smile_dandy/zlfast-uikit.git 
git add .
git commit -a -m "第一次提交 版本为0.0.1"
git push -u origin master
git tag 0.2.1 // 这里要跟podspec文件中的s.version保持一致
git push --tag(将tag提交到远程)

上述命令行完成后,代码就已经成功上传到远程代码私有库中了,可以去网站查看下提交记录。接下来把本地索引podspec添加到索引私有库:

// 前面的那个是自己在第一步创建的本地的索引库,后面的那个是lib中的podspec文件
pod repo push xxxxSpec ZLFastUI.podspec --allow-warnings 

这一步做了两个操作:一个是将podspec推送到私有的远程索引仓库,可以去网站对应的索引仓库中查看;另一个是将其 copy 到对应的本地索引仓库,这个可以去目录:/Users/admin/.cocoapods/repos/ZLFastUIKitSpec 下查看到对应的文件夹。
如果都成功了,可以使用pod search ZLFastUI搜索到自己制作的。

二、在工程中使用自己制作的私有库

在使用时Podfile文件的写法:在顶部写上source源的地址,如:

source 'https://gitee.com/xxxx/xxxxSpec.git'#这里是放自己私有库的索引库地址的,不要放私有库代码地址去了?
source 'https://github.com/CocoaPods/Specs.git'# 使用了私有的,那么这个官方的也要加上,如果不加上,那么在github上的三方库会pod install不成功!
pod 'ZLKit', '~> 0.2.1'

执行pod install
更多Podfile语法参考

三、私有库发布新版本

  1. 改好类库文件代码,执行没有错误之后,修改ZLFastUI.podspec文件,修改s.version = ‘0.2.2’
  2. 命令行执行pod lib lint –allow-warnings
  3. 回到lib库最外层文件夹,跟这一步一样的操作4.将pod生成的lib库提交到远程
  4. 在使用的项目中Podfile修改对应版本号执行pod install就会找到新的版本安装。

四、关于使用cocoapods时可能存在的一些问题

  • 有的第三方的库由于网络很难pod install成功

cocoapods的三方库缓存在下面两个地方,我们只需要从别人电脑中拷贝对应版本的代码到那两个地方就可以pod install成功

  1. ~/Library/Caches/CocoaPods/Pods/Release
  2. ~/Library/Caches/CocoaPods/Pods/Specs/Release

五、更新本地索引库

远程对应的私有索引库更新了,而我们本地的索引库却还停留在原地,我们需要更新本地私有库索引库,更新时指定只更新自己的索引库,否则会更新cocoapod索引,太慢了!

// ZLFastUIKitSpec是你的本地索引库的名字
pod repo update ZLFastUIKitSpec 
// 方法二:可以删掉本地.cocoapods/repos里面的对应本地索引库,然后重新添加远程私有索引库到本地
pod repo add ZLFastUIKitSpec https://gitee.com/xxxx/xxxxspec.git

六、给私有库中文件分文件夹

我们在如上这样制作私有库后,会发现在一个新建工程中pod下来,所有文件都在一个文件夹中,如果库中文件多了的话就很不方面查看了,所以接下来我们来给私有库分一下文件夹。—这其实也是建子库的方式。

1.在Classes文件夹中先将文件放到对应的文件夹

私有库分文件夹.png

2.修改.podspec文件, 通过建立subspec 来修改索引

下面是一个例子:

# s.source_files = 'ZLFastUI/Classes/**/*{h,m}' 
s.source_files = 'ZLFastUI/Classes/*{h,m}' # 这里因为我只引用Classes文件夹下文件,子文件下文件分到subspec中引用了。
s.subspec 'Tools' do |ss|
    ss.source_files = 'ZLFastUI/Classes/Tools/*.{h,m}'
end
s.subspec 'Extension' do |ss|
    ss.source_files = 'ZLFastUI/Classes/Extension/*.{h,m}'
end
s.subspec 'CustomUI' do |ss|
    ss.source_files = 'ZLFastUI/Classes/CustomUI/*.{h,m}'
    ss.dependency 'ZLFastUI/Tools' // CustomUI中用到了Tools中内容
    ss.dependency 'ZLFastUI/Extension'// CustomUI中用到了Extension中内容
end

3.改好后,按照之前的方式发布一个私有库版本到远程

按照上述私有库发布新版本的流程操作

4.在自己测试项目的Podfile里面引用新版本

pod install下来就可以看到分好文件夹了, 谢谢!

七、查看pod install的进度

有时我们pod安装本地库或三方库时,长时间停留在某个库的安装中,这时我们可以通过不定时手动查看进度来定位问题

// 用这个命令来代替pod install
pod install --verbose 

image-1.png
如出现上图中进度卡主,则新打开命令窗口,cd到图中的路径就可以看到具体的进度了。

cd /var/folders/7g/0ldmby4s2bgg2dbm1mx894mw0000gn/T/d20211014-42072-h3qgr3
du -sh

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYmmU8ig' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片