docs:依赖管理改为纯 SPM + Vendor,移除 CocoaPods(ADR-006)
调研发现 Qiniu SDK 已官方支持 SPM(https://github.com/qiniu/objc-sdk v8.9.x),AMap 仍仅支持 CocoaPods 或手动 XCFramework;CocoaPods 1.15.2 不兼容 Xcode 26 的 PBXFileSystemSynchronizedRootGroup,需绕道 Bundler 才能升到 1.16+。综合性价比决定不引入 CocoaPods 工具链,所有闭源 SDK (含 AMap)统一走 Vendor .xcframework 手动接入。 - Design §14.1 三层策略改写为两层(SPM + Vendor),新增 Vendor 接入 标准流程 6 步法 - Design §14.2 AMap 接入方式从 CocoaPods 改为 Vendor,Qiniu 标注 SPM URL 与版本 - Plan §2.3 / §5 Phase 5.1 / §6.1 / §8 同步 AMap Vendor 化 - Plan 新增 ADR-006 完整决策记录 - CLAUDE.md 新增「依赖管理约定」节,禁止引入 CocoaPods
This commit is contained in:
@@ -62,7 +62,7 @@ Contract Design Plan(本文档)
|
||||
| 微信 AppID(`wx586a9b321e56efb7`)+ Universal Links 配置 | 微信回调 | Phase 4 | 项目方 |
|
||||
| QQ OpenSDK `.framework` + AppID | QQ 分享 | Phase 4 | 项目方 |
|
||||
| 后台 `/wechat/login` 中转接口 | secret 不入 IPA 的前提 | Phase 4 | 后台团队 |
|
||||
| 高德地图 `APIKey` + SDK Pod | 定位 | Phase 5 | 已有 key `b0d4a8e3fcbbcc0dd96283b7df6a4494`,但需新建 Bundle ID 注册 |
|
||||
| 高德地图 `APIKey` + SDK XCFramework | 定位 | Phase 5 | 已有 key `b0d4a8e3fcbbcc0dd96283b7df6a4494`(但绑死 msext Bundle ID,需用新 Bundle ID 重新申请);SDK 走 Vendor 手动接入(ADR-006),下载页 https://lbs.amap.com/api/ios-location-sdk/download |
|
||||
| 七牛上传 token 颁发接口 | 录音上传 | Phase 3 | 后台团队 |
|
||||
| ~~极光 AppKey~~ | ~~用户统计~~ | **已决策暂不集成(ADR-005),未来启用时再协调** | — |
|
||||
| Sentry DSN | 崩溃监控 | Phase 9 | 项目方(需开通账号) |
|
||||
@@ -464,11 +464,11 @@ Contract Design Plan(本文档)
|
||||
|
||||
#### 前置
|
||||
- Phase 1 完成
|
||||
- ⏳ 高德 SDK(CocoaPods 接入,APIKey 已有但 Bundle ID 需重新注册)
|
||||
- ⏳ 高德 SDK XCFramework(Vendor 手动,ADR-006)+ 新 Bundle ID 重新申请 APIKey
|
||||
|
||||
#### 任务清单
|
||||
|
||||
- [ ] **5.1** 加 Podfile + 引入 `AMapLocation` 9.x
|
||||
- [ ] **5.1** 从 [高德官方下载页](https://lbs.amap.com/api/ios-location-sdk/download) 拉取最新 `AMapLocationKit.xcframework` + `AMapFoundationKit.xcframework`,放 `Vendor/AMap/`;Target → General → Embed Frameworks 加入;按 Design §14.1 Vendor 接入标准流程操作;`Vendor/AMap/README.md` 记录版本号 / 下载日期
|
||||
- [ ] **5.2** Info.plist 加 `NSLocationWhenInUseUsageDescription = "{gamehallname}需要访问您的位置以提供本地化服务"`
|
||||
- [ ] **5.3** `Source/SDK/AMap/AMapWrapper.swift`:启动期 `updatePrivacyShow` + `updatePrivacyAgree` + `apiKey` 设置
|
||||
- [ ] **5.4** `Source/Location/LocationService.swift`(actor)
|
||||
@@ -680,10 +680,10 @@ H5 调 `OpenurlTitleData` 打开弹层 WebView,弹层内 H5 用 `window.settin
|
||||
|
||||
| 集成方式 | SDK | 集成 Phase |
|
||||
|---------|-----|----------|
|
||||
| **SPM 优先** | ZIPFoundation / Sentry / 七牛 v8+ | Phase 1 / 9 / 3 |
|
||||
| **CocoaPods** | 高德 AMap | Phase 5 |
|
||||
| **Vendor `.framework`** | 微信 / QQ;闲聊 / Agora / **JAnalytics** 均暂不集成(Noop 占位) | Phase 4 |
|
||||
| **SPM 优先** | ZIPFoundation / Sentry / 七牛 v8.9.x(`https://github.com/qiniu/objc-sdk`) | Phase 1 / 9 / 3 |
|
||||
| **Vendor `.xcframework`** | 微信 / QQ / **高德 AMap**(ADR-006);闲聊 / Agora / JAnalytics 均暂不集成(Noop 占位) | Phase 4 / 5 |
|
||||
| **Vendor `.a`** | opencore-amr | Phase 3 |
|
||||
| ~~CocoaPods~~ | **不引入**(ADR-006,纯 SPM + Vendor 两层管理) | — |
|
||||
|
||||
每集成一个 SDK 立即提交一个独立 commit(CLAUDE.md "及时提交" 规则)。
|
||||
|
||||
@@ -792,7 +792,7 @@ H5 调 `OpenurlTitleData` 打开弹层 WebView,弹层内 H5 用 `window.settin
|
||||
- [ ] 4.12 远程图片分享
|
||||
|
||||
### Phase 5 定位
|
||||
- [ ] 5.1 AMap Pod
|
||||
- [ ] 5.1 AMap Vendor 接入(XCFramework)
|
||||
- [ ] 5.2 定位权限文案
|
||||
- [ ] 5.3 AMapWrapper 启动注册
|
||||
- [ ] 5.4 LocationService
|
||||
@@ -895,7 +895,31 @@ H5 调 `OpenurlTitleData` 打开弹层 WebView,弹层内 H5 用 `window.settin
|
||||
5. Info.plist 加 AppKey + 隐私授权文案
|
||||
- **复盘节点**:上线 3 个月后业务方根据数据需求决定是否启用
|
||||
|
||||
### ADR-006:纯 SPM + Vendor `.xcframework` 两层依赖管理,不引入 CocoaPods(2026-06-21)
|
||||
- **背景**:Design 原方案是"SPM 优先 + CocoaPods 兜底 + Vendor 手动"三层策略,CocoaPods 仅服务于高德 AMap 定位 SDK 一个依赖
|
||||
- **触发事件**:尝试 `pod init` 时,CocoaPods 1.15.2(Homebrew 上的最新版)自带的 `xcodeproj` gem 1.24.0 不识别 Xcode 26.5 默认的 `PBXFileSystemSynchronizedRootGroup`,pod init 直接抛 `unknown ISA` 异常
|
||||
- **调研结论**:
|
||||
- 七牛 SDK 已官方支持 SPM(`https://github.com/qiniu/objc-sdk`,v8.9.x),原计划的"七牛走 CocoaPods"完全无必要
|
||||
- 高德 AMap 定位 SDK 官方未提供 SPM(截至 2026-06),但提供 XCFramework 直接下载
|
||||
- CocoaPods 1.16+ 才支持新 ISA,但 Homebrew 未跟进;需绕道 Bundler + Gemfile / brew --HEAD / rbenv 自管 Ruby,均增加工具链复杂度
|
||||
- **决策**:依赖管理简化为**两层 — SPM 优先 + Vendor `.xcframework` 手动**,**完全不引入 CocoaPods**
|
||||
- SPM:ZIPFoundation / Sentry / Qiniu / WVJB JS(资源文件)
|
||||
- Vendor:微信 / QQ / **高德 AMap** / opencore-amr;闲聊 / Agora / JAnalytics 暂不集成(Noop 占位)
|
||||
- **理由**:
|
||||
- 项目实际只有高德 AMap 1 个 SDK 让 CocoaPods 必要;为 1 个依赖引入整套 Ruby + Bundler + CocoaPods + workspace 工具链 + Xcode 26 兼容性维护,性价比低
|
||||
- 闭源 SDK 本就是 Vendor 性质(微信 / QQ / 闲聊 / JAnalytics / opencore-amr),AMap 走同款流程不增加心智负担
|
||||
- 生态趋势:Google 已宣布 2026 Q2 后 iOS SDK 全部停止 CocoaPods 支持;CocoaPods 维护活跃度下降
|
||||
- 工程入口仍是 `.xcodeproj`(不需要 `.xcworkspace`),团队 / CI 配置不需要切换
|
||||
- **接入标准流程**(Vendor,写入 Design §14.1):
|
||||
1. 二进制放 `Vendor/<SDKName>/<SDKName>.xcframework`
|
||||
2. Target → General → Frameworks → `+`,动态库选 "Embed & Sign",静态库 "Do Not Embed"
|
||||
3. Library / Header Search Paths 用 `$(PROJECT_DIR)/Vendor/<SDKName>` 相对路径
|
||||
4. `Vendor/<SDKName>/README.md` 记录版本号 / 下载日期 / 官方更新页 URL
|
||||
5. 二进制入 git(项目规模可控,暂不强制 git-lfs)
|
||||
- **回滚条件**:未来某天出现 ≥ 3 个仅有 podspec 而无 SPM / XCFramework 的 SDK 必接需求时,重新评估是否引入 CocoaPods
|
||||
- **维护责任**:AMap 升级(年度级)→ 下载新 XCFramework 覆盖 `Vendor/AMap/` + 更新 README + 跑契约测试
|
||||
|
||||
---
|
||||
|
||||
文档完成日期:2026-06-21
|
||||
最后更新:2026-06-21(ADR-005 极光降级 + Resources/ 目录记录)
|
||||
最后更新:2026-06-21(ADR-006 纯 SPM + Vendor 策略 + ADR-005 极光降级 + Resources/ 目录记录)
|
||||
|
||||
Reference in New Issue
Block a user