Xcode配置指南-详细步骤.md 5.6 KB

Xcode 配置指南 - 详细步骤

🎯 目标

在 Xcode 中正确配置 Swift Package 依赖关系,让所有模块都能正常打开和使用。

📋 当前问题

  1. BaseCommon 依赖 BaseCore - Package.swift 已配置,但需要在 Xcode 中添加
  2. CapabilityPush 依赖 BaseCore - Package.swift 已配置,但需要在 Xcode 中添加
  3. xdz 项目依赖所有模块 - 需要在 Xcode 项目中添加

🔧 解决方案:在 Xcode 中添加本地包依赖

步骤 1:打开 Xcode 项目

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 中添加:

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. 如果还不行,删除并重新添加包依赖

📝 快速验证脚本

运行以下命令检查配置:

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. 单独打开 BaseCoreBaseCommonCapabilityPush 进行开发
  3. 单独打包 CapabilityPush 为 SDK