iOS组件化之Pod私有库创建及使用

373 阅读5分钟

一、基础使用

创建私有的pod仓库

1、在公司的git服务器上创建私有远程仓库。克隆地址如:http://192.168.1.11:9099/ll-ios-platform/ll_specs.git

2、新建pod spec仓库(将私有的远程仓库copy到本地)。命令如下:

pod repo add LLIotPodSpecs http://192.168.1.11:9099/ll-ios-platform/ll_specs.git

LLIotPodSpecs为pod spec仓库名称

http://192.168.1.11:9099/ll-ios-platform/ll_specs.git为远程仓库克隆地址

3、执行完毕后,在目录:/Users/admin/.cocoapods/repos 下会多出来一个LLIotPodSpecs文件夹,可使用pod repo命令查看。如下:

LLIotPodSpecs
- Type: git (master)
- URL:  http://192.168.1.11:9099/ll-ios-platform/ll_specs.git
- Path: /Users/admin/.cocoapods/repos/LLIotPodSpecs

trunk
- Type: CDN
- URL:  https://cdn.cocoapods.org/
- Path: /Users/admin/.cocoapods/repos/trunk

2 repos

至此,私有远程仓库LLIotPodSpecs生成完成

创建私有的pod组件库

1、在公司的 git 服务器上面创建 LLNetwork 的 git 远程仓库,克隆地址是:http://192.168.1.11:9099/ll-ios-platform/LLNetwork.git

2、创建私有的pod组件库(如LLNetwork网络组件),执行如下命令:pod lib create LLNetwork。过程中需要填一些选项,按需选择即可。pod组件空模板创建成功后会自动打开工程。

3、删除ReplaceMe文件,将需要封装的文件(如网络组件相关文件)复制到 LLNetwork/LLNetwork/Classes中。

4、修改 LLNetwork.podspec 文件如下:

Pod::Spec.new do |s|
  s.name             = 'LLNetwork'
  s.version          = '1.0.1'
  s.summary          = '网络请求模块'
  s.homepage         = 'https://github.com/hjq/LLNetwork'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'hjq' => 'hjq@ll.cn' }
  s.source           = { :git => 'http://192.168.1.11:9099/ll-ios-platform/LLNetwork.git', :tag => s.version.to_s }
  s.ios.deployment_target = '10.0'
  s.source_files = 'LLNetwork/**/*.{h,m}'
end

5、校验 LLNetwork.podspec 文件

cd到LeelenNetwork.podspec所在文件夹下,执行pod lib lint --allow-warnings,该命令是检查本地配置是否符合推送规则。成功了会打印如下信息:

LLNetwork.podspec passed validation

如有报错,按提示修改。

6、将1创建的远程仓库克隆下来,将2-5创建及修改后的LLNetwork放到克隆下来的文件夹中。

7、上传 LLNetwork.podspec 文件到我们的私有远程仓库 LLIotPodSpecs,命令如下:

pod repo push LLIotPodSpecs LLNetwork.podspec --allow-warnings

上面命令对 LLNetwork.podspec 文件做了两个操作:一个是将其推送到私有的远程仓库,可以去公司的 git 上面 LLIotPodSpecs 仓库中查看;另一个是将其 copy 到私有的本地仓库,这个可以去目录:/Users/admin/.cocoapods/repos/LLIotPodSpecs 下查看到。

至此私有的 pod 库也就完成了,可以在终端执行 pod search LLNetwork来查询它

使用

在项目工程中修改podfile文件,并pod install

source 'http://192.168.1.11:9099/ll-ios-platform/ll_specs.git'
#source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'

platform :ios, '10.0'

target 'llIOT' do
pod 'LLNetwork', '~>1.0.1'
end

注意事项

1、操作的时候,先cd到对应的文件夹下

2、注意操作顺序

a、在develop分支开发、修改LLNetwork代码,修改 LLNetwork.podspec版本号,提交。

b、将develop分支合并到master。

c、在master打tag(如:1.0.1),注意这边的tag应与LLNetwork.podspec中的s.version 版本号一致。

二、依赖第三方库

当我们的私有库需要依赖其它第三方才可以正常使用时,我们就需要在spec文件中开启依赖。例如下面所示代码,表明当前仓库需要依赖AFNetworking和SDWebImage。

Pod::Spec.new do |s|
  s.name             = 'LLNetwork'
  s.version          = '1.0.3'
  s.summary          = '网络请求模块'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'hjq' => 'hjq@ll.cn' }
  s.source           = { :git => 'http://192.168.1.11:9099/ll-ios-platform/LLNetwork.git', :tag => s.version.to_s }
  s.ios.deployment_target = '10.0'
  s.source_files = 'LLNetwork/**/*.{h,m}'

  #设置第三方依赖
  #s.dependency 'AFNetworking'
  s.dependency 'AFNetworking', '~> 3.2.0'
  s.dependency 'SDWebImage', '~> 4.3.3'
end

修改完spec文件之后,执行pod lib lint --allow-warnings校验spec文件。SourceTree提交代码,打tag(tag注意与LLNetwork.podspec文件内的s.version一致)。执行pod repo push LLIotPodSpecs LLNetwork.podspec --allow-warnings操作。

三、设置子库Subspecs

为什么要设置子库

比如LLTool组件下,有两个功能,一个是网络请求模块NetworkManager,一个缓存模块CacheManager。假设有同事负责的模块只需要缓存的功能,此时他若pod一整LLTool的话,不但NetworkManager功能对他没用,而且还需要安装AFNetworking依赖库。设置子库可以很好的解决只使用LLTool组件下的CacheManager部分。

子库格式

s.subspec '子库名称' do |别名|

end

子库的使用

1、在组件工程中创建子库

如:在组件LLNetwork中创建两个子库,分别是NetworkLog和NetworkManager,其中NetworkLog不需要依赖任何第三方库,内部只有一个log类方法,调用的时候输出"我不需要依赖别的第三方库"。NetworkManager依赖AFNetworking,内部有对get和post方法的二次封装,用于网络请求。

文件结构如下:

![](//upload-images.jianshu.io/upload_images/1876376-3d8085bb27791303.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

2、修改LLNetwork.podspec文件

Pod::Spec.new do |s|
  s.name             = 'LLNetwork'
  s.version          = '1.0.4'
  s.summary          = '网络请求模块'
  s.homepage         = 'https://github.com/hjq/LLNetwork'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'hjq' => 'hjq@ll.cn' }
  s.source           = { :git => 'http://192.168.1.11:9099/ll-ios-platform/LLNetwork.git', :tag => s.version.to_s }
  s.ios.deployment_target = '10.0'

  #之前的样子
  #源文件
  #s.source_files = 'LLNetwork/**/*.{h,m}'
  #设置依赖库
  #s.dependency 'AFNetworking', '~> 3.2.0'

  #修改后的样子
  #设置子库(依赖AFNetworking)
  s.subspec 'NetworkManager' do |m|
    m.source_files = 'LLNetwork/Classes/NetworkManager/*.{h,m}'
    m.dependency 'AFNetworking'
  end

  #设置子库(不依赖其他第三方)
  s.subspec 'NetworkLog' do |l|
    l.source_files = 'LLNetwork/Classes/NetworkLog/*.{h,m}'
  end

end

注意:设置子库时,subspec内使用的是别名,如:s.subspec 'NetworkManager' do |m|的别名是m,则subspec内写成m.dependency 'AFNetworking',如果写成s.dependency 'AFNetworking'会校验不过。

3、修改完spec文件之后,执行pod lib lint --allow-warnings校验spec文件。校验没问题后,SourceTree提交代码,打tag(tag注意与LLNetwork.podspec文件内的s.version一致)。执行pod repo push LLIotPodSpecs LLNetwork.podspec --allow-warnings操作。

4、修改工程中的Podfile文件,cd到工程Podfile文件所在位置,执行pod install

使用NetworkLog功能的Podfile文件修改如下:

source 'http://192.168.1.11:9099/ll-ios-platform/ll_specs.git'
platform :ios, '10.0'
target 'llIOT' do
#修改前
#pod 'AFNetworking'
#pod 'LLNetwork', '~>1.0.3'

#修改后
pod 'LLNetwork/NetworkLog', '~>1.0.4'
end

使用NetworkManager功能的Podfile文件修改如下:

source 'http://192.168.1.11:9099/ll-ios-platform/ll_specs.git'
platform :ios, '10.0'
target 'llIOT' do
#修改前
#pod 'AFNetworking'
#pod 'LLNetwork', '~>1.0.3'

#修改后
pod 'AFNetworking'
pod 'LLNetwork/NetworkManager', '~>1.0.4'
end

至此,子库的配置完成,可在工程中使用子库了。

最后有什么疑惑问题这有个iOS交流群:642363427有一个共同的圈子很重要,结识人脉!里面都是iOS开发,全栈发展,欢迎入驻,共同进步!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)