iOS 组件化之使用 Cocoapods 创建本地 Pod

前言

之前在进行非组建化的项目开发时,发现每次进行文件级的更改时,都会改变项目中 project.pbxproj 文件的内容。如果是在多人协作的场景下,会经常需要进行 Git 的冲突解决,一旦解决错误,就会导致项目无法运行。

为了解决这个问题,我打将不同模块之间的隔离,从单纯的文件夹隔离改为 Pod 隔离,即将各模块都封装为本地 Pod。本文也是主要介绍如何使用 Cocoapods 创建本地 Pod,实现代码的 Pod 隔离。

创建本地仓库

1. 创建本地仓库文件夹

首先,我们要在项目的目录下创建一个用于存储项目所有本地 Pod 的文件夹,这里取名为 DevelopmentPods。顺手的话,可以直接用命令行创建,创建文件的命令是 mkdir

效果如下:

在这里插入图片描述

2. 创建本地 Pod

创建本地 Pod 有两种可选的方法

方法一:创建文件夹,再创建 .podspec 文件

DevelopmentPods 目录下创建一个和组件名称一致的文件夹,我这里创建的 Pod 名为 FCUIKit。 同时,还需要创建如下所示的子文件夹,后面 .podspec 文件中填写的 source_filesresource_bundles 路径要与此相对应。

在这里插入图片描述

然后,在DevelopmentPods/FCUIKit 目录下,使用下面命令生成 .podspec 文件。

pod spec create FCUIKit

使用 vim LICENSE 命令创建 LICENSE 文件,内容可以复制下面(名称和邮箱记得修改)

Copyright (c) 2022 VeggieOrz <lwh_233@163.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

使用这种方法创建的本地 Pod 成品目录如下:

在这里插入图片描述

方法二:使用 pod lib create xxx 一键生成

使用该方法会根据 Pod 模版生成组件,里面会带有 git 管理、example 工程、LICENSE 协议等内容,相对比较便捷。命令如下:

pod lib create FCUIKit

输入命令后需要填写一些选项,参考如下:

在这里插入图片描述

因为本地 Pod 也会接受主工程的 Git 管理的,所以可以删除 ECUIKit目录下的 .git ,取消该组件的独立的 Git 管理。命令如下:

rm -rf .git

注意:通过该方法生成的一些文件中可能会存在一些用户信息(如用户名、邮箱),如果不想后续误操作被上传到 Github 上,则需要手动删除替换相关信息!!!

3. 修改 .podsepc 文件

.podsepc 文件相关填写内容如下,因为我们做的是本地 Pod, 一些远端相关的信息可以随意填写进行占位。

Pod::Spec.new do |s|

  s.name             = 'FCUIKit' # 组件名称
  s.version          = '0.1.0'   # 组件版本号
  s.summary          = 'A short description of FCUIKit.'  # 组件简述
  s.description      = <<-DESC   # 组件详细描述
TODO: Add long description of the pod here.
                       DESC
  
  s.homepage         = 'https://github.com/VeggieOrz/FancyCut' # 组件主页地址
  s.license          = { :type => 'MIT', :file => 'LICENSE' }  # 配置的 license 文件信息
  s.author           = { 'VeggieOrz' => 'lwh_233@163.com' }    # 作者信息
  
  # 组件下载源
  s.source           = { 
    :git => 'https://github.com/VeggieOrz/FancyCut.git',  # 资源路径
    :tag => s.version.to_s                                # 资源版本号
  }  
  
  # 最小依赖系统版本
  s.ios.deployment_target = '10.0'          
  # 代码源文件目录
  s.source_files = 'FCUIKit/Classes/**/*' 
  # 资料文件目录
  s.resource_bundles = {
    'FCUIKit' => ['FCUIKit/Assets/*.xcassets']
  }
  
  # 组件依赖
  # s.dependency 'AFNetworking', '~> 2.3' 
end

4. 文件迁移

本地 Pod 的配置已经基本完成,只要需要把原先在模块中文件迁移到对应目录中即可。

在这里插入图片描述

5. 在原项目中依赖新 Pod

然后在项目的 Podfile 中声明对本地 Pod 的依赖。

pod 'FCUIKit', :path => './DevelopmentPods/FCUIKit'

执行完 pod install 后,Xcode 打开工程可以看到开发仓中已经有了刚刚新建的 FCUIKit 啦~

在这里插入图片描述

参考资料