cocoapods-local-override

在不修改 Podfile 的前提下,将指定 pod 从远程依赖切换为本地路径(或替换版本号/branch)。


要求

  • Ruby >= 2.7(YAML 为 Ruby 标准库,无额外依赖)
  • CocoaPods

安装

# 方式一:从 RubyGems 安装(推荐)
gem install cocoapods-local-override

# 方式二:本地构建安装(离线 / 内部环境)
git clone https://github.com/charleszhao888888/cocoapods-local-override.git
cd cocoapods-local-override
gem build cocoapods-local-override.gemspec
gem install --local cocoapods-local-override-*.gem

验证安装:

pod plugins installed | grep local-override

使用

1. 创建配置文件

插件会在首次 pod install 时自动从模板 Podfile.local.example 创建 Podfile.local,无需手动操作。

如需手动创建,可参照仓库中的模板:

cp Podfile.local.example Podfile.local

2. 编辑 Podfile.local

local_pods:
  SomePod: ../path/to/SomePod
  AnotherPod: ../path/to/AnotherPod
  BaseModule: ../../BasicLayer/BaseModule

replace_versions:
  SDWebImage: 1.2.3

replace_branches:
  SomeGitPod: develop-9.6.2

3. 执行 pod install

pod install

插件自动生效,输出示例:

[ LOCAL ] SomePod               →  ../path/to/SomePod
[ LOCAL ] AnotherPod            →  ../path/to/AnotherPod
[ LOCAL ] BaseModule            →  ../../BasicLayer/BaseModule
[ VERSION ] SDWebImage          →  1.2.3
[ BRANCH ] SomeGitPod           →  develop-9.6.2
[ LOCAL ] CommonUtils (via SomePod) →  ../../BasicLayer/CommonUtils
[+] Added Podfile.local to Pods project

4. 恢复远程依赖

注释掉或删除 Podfile.local 中对应的条目,或不创建该文件即可恢复远程依赖。


功能说明

三种覆盖模式

配置项 作用 标签
local_pods 将 pod 替换为 :path 指向本地目录 [ LOCAL ]
replace_versions 覆盖 Podfile 中声明的版本号 [ VERSION ]
replace_branches 修改 :git 声明的 :branch [ BRANCH ]

三种配置按上述优先级依次匹配,命中的第一个生效。其中 local_pods 的本地路径不存在时会输出黄色警告并回退到远程依赖;replace_versions / replace_branches 为纯文本替换,不回退。

传递依赖自动注入

本地 pod 的 podspec 中声明的依赖,如果也在 local_pods 配置中但未在 Podfile 显式声明,插件会自动将其注入为目标依赖,确保整个依赖树使用本地版本。

输出格式:[ LOCAL ] dep_name (via parent) → path

使用 BFS 遍历依赖树,visited set 防循环引用。

Podfile.local 在 Pods 工程可见

每次 pod install 后,插件自动将 Podfile.local 加入 Pods.xcodeproj,排在工程导航栏首位,方便在 Xcode 中直接查看和编辑。

环境变量

变量 作用
COCOAPODS_LOCAL_OVERRIDE_DISABLE=1 禁用插件
COCOAPODS_LOCAL_OVERRIDE_CONFIG=/path/config.yml 指定自定义配置文件路径

License

MIT