其他语言:English
MBox 的 CocoaPods 插件,用来拓展 MBox 依赖管理能力,添加对 CocoaPods 依赖管理工具的支持。
当 Workspace 下存在依赖关系的仓库时,例如 主项目 + Pod 项目,使用命令 mbox pod install
将会自动使用本地的 Pod 源码项目,代替下载线上版本。
MBoxCocoapods
插件将自动部署 Bundler
环境,然后转发所有命令到 CocoaPods
。因此,原则上支持 CocoaPods
原生所有命令,只需在原始命令前加上 mbox
入口命令即可:
$ mbox pod
Redirect to CocoaPods with MBox environment
该插件 Hook 了 CocoaPods
环境准备,依赖解析等逻辑,以 mbox pod install
为例,将会有以下变化:
- 分析项目中的
Gemfile
和Gemfile.lock
,自动安装并使用正确的Bundler
- 自动分析
Bundler
环境,自动安装所需Gem
- 转发命令到
CocoaPods
- 读取
CocoaPods
Container 中的Podfile
和Podfile.lock
,在 Workspace 根目录下生成一个新的Podfile
,使用该Podfile
作为CocoaPods
的主Podfile
- 如果依赖的组件已经添加到 Workspace 中,会自动使用本地仓库,无需修改
Podfile
,且不会修改项目中的Podfile.lock
注意:
- 如需修改
Podfile
,请修改仓库内的Podfile
,不要修改 Workspace 下的Podfile
。 - Workspace 中添加/移除 Pod 组件,需要重新执行
mbox pod install
更新CocoaPods
依赖关系
通过 Hook MBox 和 CocoaPods 提供了一些能力:
- [MBoxWorkspace]
mbox go
支持打开.xcworkspace
/.xcodeproj
项目文件 - [MBoxContainer] 新增
CocoaPods
容器 - [MBoxDependencyManager] 新增
CocoaPods
组件识别能力
该插件只能在 Workspace 下生效
依赖的 MBox 组件:
- MBoxCore
- MBoxGit
- MBoxRuby
- MBoxWorkspace
- MBoxDependencyManager
- MBoxContainer
依赖的 Ruby 组件:
- Bundler, >= 2.3.0 (会强制升级,无需用户干预)
- CocoaPods, >= 1.7.0, < 1.12.0
- 在 Workspace 层级上激活:
$ mbox plugin enable cocoapods
-
在 仓库 层级上激活,可以同步给其他拥有该仓库的研发人员:
修改仓库根目录的
.mboxconfig
文件,新增配置:
{
"plugins": {
"MBoxCocoapods": {}
}
}
- 为了保证项目的沙盒化,必须使用 Bundler 进行管理 CocoaPods。请先接入 MBoxRuby 容器!
- 配置
.mboxconfig
:- 如果
Podfile
在项目根目录
,则无需额外配置; - 如果
Podfile
不在项目根目录下,则需要新增配置:
- 如果
{
"cocoapods": {
// 只有一个 podspec 文件
"podfile": "XX/Podfile",
// 当存在多个 podspec 文件,可以使用以下形式
"podfiles": {
"name1": "XX/Podfile",
"name2": "YY/Podfile",
}
}
}
- 该插件会自动搜索项目
根目录
下所有的*.podspec
或者*.podspec.json
文件 - 如果
podspec
文件不在根目录,需要在项目根目录下.mboxconfig
配置文件中新增配置:
{
"cocoapods": {
// 只有一个 podspec 文件
"podspec": "xx/yy.podspec",
// 使用通配符匹配文件
"podspec": "xx/*.podspec",
// 当存在多个 podspec 文件,可以使用以下形式
"podspecs": [
"xx/yy1.podspec",
"xx/yy2.podspec"
]
}
}
如果项目既是 Container 又是 Pod,则需要同时设置上述配置。
Please reference the section Contributing
MBox is available under GNU General Public License v2.0 or later.