# Xcode 配置指南 - 详细步骤 ## 🎯 目标 在 Xcode 中正确配置 Swift Package 依赖关系,让所有模块都能正常打开和使用。 ## 📋 当前问题 1. **BaseCommon 依赖 BaseCore** - Package.swift 已配置,但需要在 Xcode 中添加 2. **CapabilityPush 依赖 BaseCore** - Package.swift 已配置,但需要在 Xcode 中添加 3. **xdz 项目依赖所有模块** - 需要在 Xcode 项目中添加 ## 🔧 解决方案:在 Xcode 中添加本地包依赖 ### 步骤 1:打开 Xcode 项目 ```bash cd /Users/Zhuanz/Documents/code/xindazhou/xdz_ios/xdz open xdz.xcodeproj ``` ### 步骤 2:添加 BaseCommon 依赖 1. 在 Xcode 左侧导航栏,点击最顶部的 **"xdz"** 项目(蓝色图标) 2. 在中间面板,选择 **"xdz"** Target(不是 Tests) 3. 点击顶部的 **"General"** 标签 4. 向下滚动到 **"Frameworks, Libraries, and Embedded Content"** 部分 5. 点击左下角的 **"+"** 按钮 6. 在弹出的窗口中,点击左下角的 **"Add Other..."** 7. 选择 **"Add Package Dependency..."** 8. 在顶部输入框旁边,点击 **"Add Local..."** 9. 导航到:`/Users/Zhuanz/Documents/code/xindazhou/xdz_ios/BaseCommon` 10. 点击 **"Add Package"** 11. 在 "Add Package" 对话框中,确保 **"BaseCommon"** 被选中 12. 点击 **"Add Package"** **重要**:BaseCommon 已经依赖了 BaseCore,所以添加 BaseCommon 后,BaseCore 会自动作为传递依赖被引入,**不需要单独添加 BaseCore**! ### 步骤 3:添加 CapabilityPush 依赖 重复步骤 2,但这次选择 `CapabilityPush` 目录。 **重要**:CapabilityPush 已经依赖了 BaseCore,所以添加 CapabilityPush 后,BaseCore 也会自动作为传递依赖被引入。 ### 步骤 4:验证依赖 在 `xdz/xdz/xdzApp.swift` 中添加: ```swift import SwiftUI import BaseCommon // 直接导入 BaseCommon(会自动包含 BaseCore) import CapabilityPush // 直接导入 CapabilityPush(会自动包含 BaseCore) @main struct xdzApp: App { var body: some Scene { WindowGroup { ContentView() } } } ``` **注意**: - 不需要直接 `import BaseCore`,因为 BaseCommon 和 CapabilityPush 已经包含了 - 如果确实需要直接使用 BaseCore 的接口,也可以 `import BaseCore`(可选) 如果编译通过,说明依赖配置成功! ## 🔍 验证依赖关系 ### 检查 BaseCommon 是否正确依赖 BaseCore 1. 在 Xcode 中,打开 `BaseCommon/Sources/BaseCommon/Common/Network/NetworkHelper.swift` 2. 查看文件顶部是否有 `import BaseCore` 3. 如果 Xcode 没有报错,说明依赖正确 ### 检查 CapabilityPush 是否正确依赖 BaseCore 1. 在 Xcode 中,打开 `CapabilityPush/Sources/CapabilityPush/Push/Impl/PushServiceImpl.swift` 2. 查看文件顶部是否有 `import BaseCore` 3. 如果 Xcode 没有报错,说明依赖正确 ## 🐛 常见问题解决 ### 问题 1:Xcode 找不到包 **现象**:添加包时,Xcode 提示找不到 Package.swift **解决方案**: 1. 确保所有 Package.swift 文件都在正确的目录中: - `BaseCore/Package.swift` ✅ - `BaseCommon/Package.swift` ✅ - `CapabilityPush/Package.swift` ✅ 2. 检查相对路径是否正确: ```swift // BaseCommon/Package.swift .package(path: "../BaseCore") // ✅ 正确 // CapabilityPush/Package.swift .package(path: "../BaseCore") // ✅ 正确 ``` 3. 在 Xcode 中:**File → Packages → Reset Package Caches** ### 问题 2:编译错误 "No such module 'BaseCore'" **现象**:代码中 `import BaseCore` 报错 **解决方案**: 1. 确保在 Target 的 **"Build Phases"** → **"Link Binary With Libraries"** 中添加了依赖 2. 清理构建:**Product → Clean Build Folder** (Shift+Cmd+K) 3. 重新构建:**Product → Build** (Cmd+B) 4. 如果还不行,删除 DerivedData: ```bash rm -rf ~/Library/Developer/Xcode/DerivedData ``` ### 问题 3:Swift Package 在 Xcode 中显示为红色 **现象**:左侧导航栏中,包显示为红色(找不到) **解决方案**: 1. 确保包路径正确 2. 在 Xcode 中:**File → Packages → Resolve Package Versions** 3. 如果还不行,删除并重新添加包依赖 ## 📝 快速验证脚本 运行以下命令检查配置: ```bash cd /Users/Zhuanz/Documents/code/xindazhou/xdz_ios ./check_dependencies.sh ``` ## 🎓 理解依赖关系 ``` xdz (业务项目) ├── 依赖 BaseCommon (业务封装) │ └── 依赖 BaseCore ✅ (传递依赖,自动引入) └── 依赖 CapabilityPush (推送能力) └── 依赖 BaseCore ✅ (传递依赖,自动引入) ``` **关键点**: - **BaseCore** 是基础,不依赖其他模块 - **BaseCommon** 依赖 BaseCore - **CapabilityPush** 依赖 BaseCore - **xdz 项目** 只需要依赖 BaseCommon 和 CapabilityPush - BaseCore 会通过传递依赖自动引入,**不需要直接添加**! **为什么不需要直接依赖 BaseCore?** - Swift Package Manager 支持传递依赖 - 当 xdz 依赖 BaseCommon 时,BaseCommon 的依赖(BaseCore)会自动传递 - 当 xdz 依赖 CapabilityPush 时,CapabilityPush 的依赖(BaseCore)也会自动传递 - 这样可以避免重复依赖,保持依赖关系清晰 ## 💡 提示 1. **首次添加包依赖后**,Xcode 会自动解析依赖关系 2. **如果修改了 Package.swift**,Xcode 会自动更新依赖 3. **建议使用 Workspace**(可选),但直接添加包依赖更简单 ## 📚 下一步 配置完成后,你可以: 1. 在 `xdz` 项目中导入并使用这些模块 2. 单独打开 `BaseCore`、`BaseCommon`、`CapabilityPush` 进行开发 3. 单独打包 `CapabilityPush` 为 SDK