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 |
指定自定义配置文件路径 |