iOS项目开发中,咱们制造自己的长途私有库或许开源库,然后用pod方式来装置或许移除比咱们手动去删去或许集成愈加的简单并且也不容易出错,办理起来愈加便利。咱们一般选择在github或许gittee、gitLab上创立开源库或私有库,开源库和私有库原理是相同的,本文是首要关于私有库的制造和后期办理的。

一、制造自己的私有库

假如咱们电脑里边装置了cocoaPods,那么在本地电脑的用户目录下会有躲藏文件夹.cocoapods/repos, 检查躲藏文件夹经过command + shift + .快捷键,在目录里能够看到自己电脑里边包含的Cocoapods官方索引库和自己的索引库(假如有的话)

组件化之CocoaPods私有库的创建和管理
咱们平常去pod repo update更新pod库时就是在更新这儿边的索引库, 假如你看不到自己制造的索引库,那么咱们接下来开端制造一个!

1. 创立自己的长途索引库

咱们能够选择创立一个私有库,这儿运用gitee网站为长途库为例:

组件化之CocoaPods私有库的创建和管理
私有库自己命名,比方: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.

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

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 originhttps://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文件夹中先将文件放到对应的文件夹

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

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 

组件化之CocoaPods私有库的创建和管理
如出现上图中进展卡主,则新翻开指令窗口,cd到图中的途径就能够看到具体的进展了。

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