# Xcode 配置指南 - Swift Package 依赖 ## 📋 问题说明 在 Xcode 中,Swift Package 需要通过以下方式添加依赖: 1. **BaseCommon 依赖 BaseCore** 2. **能力层(CapabilityPush)依赖 BaseCore** 3. **业务项目(xdz)依赖所有模块** ## 🔧 配置步骤 ### 方法一:在 Xcode 项目中添加本地包依赖(推荐) #### 1. 打开 Xcode 项目 ```bash cd xdz_ios/xdz open xdz.xcodeproj ``` #### 2. 添加 BaseCommon 依赖 1. 在 Xcode 中,选择项目 `xdz`(左侧导航栏最顶部) 2. 选择 Target `xdz` 3. 点击 **"General"** 标签 4. 找到 **"Frameworks, Libraries, and Embedded Content"** 部分 5. 点击 **"+"** 按钮 6. 选择 **"Add Other..."** → **"Add Package Dependency..."** 7. 选择 **"Add Local..."** 8. 导航到 `../BaseCommon` 目录并选择 9. 点击 **"Add Package"** **注意**:BaseCommon 已经依赖了 BaseCore,所以添加 BaseCommon 后会自动传递依赖 BaseCore,不需要单独添加 BaseCore! #### 3. 添加 CapabilityPush 依赖 重复步骤 2,但这次选择 `../CapabilityPush` 目录。 **注意**:CapabilityPush 已经依赖了 BaseCore,所以添加 CapabilityPush 后也会自动传递依赖 BaseCore。 ### 方法二:使用 Package.swift(如果项目支持) 如果你的 `xdz` 项目也使用 Swift Package Manager,可以创建 `Package.swift`: ```swift // swift-tools-version: 5.9 import PackageDescription let package = Package( name: "xdz", platforms: [ .iOS(.v15) ], dependencies: [ // 只需要依赖 BaseCommon 和 CapabilityPush // BaseCore 会通过传递依赖自动引入 .package(path: "../BaseCommon"), .package(path: "../CapabilityPush") ], targets: [ .executableTarget( name: "xdz", dependencies: [ // BaseCommon 已经依赖了 BaseCore,所以会自动传递 .product(name: "BaseCommon", package: "BaseCommon"), // CapabilityPush 已经依赖了 BaseCore,所以会自动传递 .product(name: "CapabilityPush", package: "CapabilityPush") ] ) ] ) ``` ### 方法三:使用 Xcode Workspace(推荐用于多模块项目) #### 1. 创建 Workspace ```bash cd xdz_ios xcodebuild -workspace xdz.xcworkspace -list 2>/dev/null || \ mkdir -p xdz.xcworkspace/xcshareddata/swiftpm && \ cat > xdz.xcworkspace/contents.xcworkspacedata << 'EOF' EOF ``` #### 2. 打开 Workspace ```bash open xdz.xcworkspace ``` ## 📝 验证依赖关系 ### 1. 检查 BaseCommon 是否正确依赖 BaseCore 在 `BaseCommon/Sources/BaseCommon/Common/Network/NetworkHelper.swift` 中: ```swift import BaseCore // 应该可以正常导入 ``` ### 2. 检查 CapabilityPush 是否正确依赖 BaseCore 在 `CapabilityPush/Sources/CapabilityPush/Push/Impl/PushServiceImpl.swift` 中: ```swift import BaseCore // 应该可以正常导入 ``` ### 3. 检查 xdz 项目是否正确依赖所有模块 在 `xdz/xdz/xdzApp.swift` 中: ```swift import BaseCommon // 直接导入 BaseCommon(会自动包含 BaseCore) import CapabilityPush // 直接导入 CapabilityPush(会自动包含 BaseCore) // 如果需要直接使用 BaseCore 的接口,也可以导入 import BaseCore // 可选,因为 BaseCommon 已经包含了 ``` ## 🐛 常见问题 ### 问题 1:Xcode 找不到包 **解决方案**: 1. 确保所有 Package.swift 文件都在正确的目录中 2. 在 Xcode 中:File → Packages → Reset Package Caches 3. 重新添加包依赖 ### 问题 2:依赖关系错误 **解决方案**: 1. 检查 `Package.swift` 中的路径是否正确(相对路径) 2. 确保所有包都在同一层级目录中: ``` xdz_ios/ ├── BaseCore/ ├── BaseCommon/ ├── CapabilityPush/ └── xdz/ ``` ### 问题 3:编译错误 "No such module 'BaseCore'" **解决方案**: 1. 确保在 Target 的 "Build Phases" → "Link Binary With Libraries" 中添加了依赖 2. 清理构建:Product → Clean Build Folder (Shift+Cmd+K) 3. 重新构建:Product → Build (Cmd+B) ## 🔍 快速检查脚本 创建一个检查脚本: ```bash #!/bin/bash # check_dependencies.sh cd "$(dirname "$0")" echo "=== 检查 Swift Package 结构 ===" echo "" echo "1. BaseCore Package.swift:" if [ -f "BaseCore/Package.swift" ]; then echo " ✅ 存在" grep -q "name: \"BaseCore\"" BaseCore/Package.swift && echo " ✅ 名称正确" || echo " ❌ 名称错误" else echo " ❌ 不存在" fi echo "" echo "2. BaseCommon Package.swift:" if [ -f "BaseCommon/Package.swift" ]; then echo " ✅ 存在" grep -q "BaseCore" BaseCommon/Package.swift && echo " ✅ 依赖 BaseCore" || echo " ❌ 未依赖 BaseCore" else echo " ❌ 不存在" fi echo "" echo "3. CapabilityPush Package.swift:" if [ -f "CapabilityPush/Package.swift" ]; then echo " ✅ 存在" grep -q "BaseCore" CapabilityPush/Package.swift && echo " ✅ 依赖 BaseCore" || echo " ❌ 未依赖 BaseCore" else echo " ❌ 不存在" fi echo "" echo "=== 检查目录结构 ===" ls -d BaseCore BaseCommon CapabilityPush xdz 2>/dev/null | while read dir; do echo "✅ $dir" done ``` ## 📚 参考 - [Apple 官方文档:Adding Package Dependencies to Your App](https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app) - [Swift Package Manager 文档](https://www.swift.org/package-manager/)