# iOS 能力层打包说明 ## 📦 架构设计 iOS 的能力层使用 **Swift Package Manager (SPM)** 来管理,每个能力都是一个独立的 Swift Package,可以单独打包为 SDK。 ### 目录结构 ``` xdz_ios/ ├── BaseCore/ # 基础核心层(Swift Package) ├── BaseCommon/ # 业务封装层(Swift Package) ├── CapabilityPush/ # 推送能力层(独立的 Swift Package)✅ ├── CapabilityShare/ # 分享能力层(独立的 Swift Package) ├── CapabilitySocketIO/ # SocketIO 能力层(独立的 Swift Package) └── xdz/ # 业务层(Xcode 项目,依赖所有能力层) ``` ## 🔧 创建能力层模块 ### 1. 创建目录结构 ```bash mkdir -p CapabilityPush/Sources/CapabilityPush mkdir -p CapabilityPush/Tests/CapabilityPushTests ``` ### 2. 创建 Package.swift ```swift // swift-tools-version: 5.9 import PackageDescription let package = Package( name: "CapabilityPush", platforms: [ .iOS(.v15) ], products: [ .library( name: "CapabilityPush", targets: ["CapabilityPush"] ) ], dependencies: [ // 依赖 BaseCore(本地路径) .package(path: "../BaseCore") ], targets: [ .target( name: "CapabilityPush", dependencies: [ .product(name: "BaseCore", package: "BaseCore") ] ), .testTarget( name: "CapabilityPushTests", dependencies: ["CapabilityPush"] ) ] ) ``` ### 3. 实现接口 在 `CapabilityPush` 中实现 `BaseCore` 中定义的接口(如 `IPushService`)。 ## 📦 单独打包 SDK ### 方式一:Swift Package Manager(推荐) #### 1. 本地开发 ```bash cd CapabilityPush swift build # 编译 swift test # 运行测试 ``` #### 2. 发布到 Git ```bash # 打标签 git tag 1.0.0 git push origin 1.0.0 # 在其他项目中使用 dependencies: [ .package(url: "https://github.com/your-org/CapabilityPush.git", from: "1.0.0") ] ``` #### 3. 本地路径依赖 ```swift // 在 xdz 项目的 Package.swift 中 dependencies: [ .package(path: "../CapabilityPush"), .package(path: "../BaseCore") ] ``` ### 方式二:XCFramework(用于分发) #### 1. 使用 xcodebuild ```bash # 构建 XCFramework xcodebuild archive \ -scheme CapabilityPush \ -destination "generic/platform=iOS" \ -archivePath "./build/CapabilityPush-iOS.xcarchive" \ SKIP_INSTALL=NO \ BUILD_LIBRARY_FOR_DISTRIBUTION=YES # 创建 XCFramework xcodebuild -create-xcframework \ -archive "./build/CapabilityPush-iOS.xcarchive" \ -framework "CapabilityPush.framework" \ -output "./build/CapabilityPush.xcframework" ``` #### 2. 分发 XCFramework 将生成的 `CapabilityPush.xcframework` 打包分发,其他项目可以直接导入使用。 ### 方式三:CocoaPods(可选) 如果需要支持 CocoaPods,可以创建 `CapabilityPush.podspec`: ```ruby Pod::Spec.new do |s| s.name = 'CapabilityPush' s.version = '1.0.0' s.summary = '推送能力层模块' s.homepage = 'https://github.com/your-org/CapabilityPush' s.license = { :type => 'MIT' } s.author = { 'Your Name' => 'your@email.com' } s.source = { :git => 'https://github.com/your-org/CapabilityPush.git', :tag => s.version } s.ios.deployment_target = '15.0' s.source_files = 'Sources/CapabilityPush/**/*.swift' s.dependency 'BaseCore' end ``` ## 🔗 在业务项目中使用 ### 在 Xcode 项目中添加依赖 1. 打开 `xdz.xcodeproj` 2. File → Add Package Dependencies 3. 选择 "Add Local..." 4. 选择 `CapabilityPush` 目录 5. 完成 ### 在代码中使用 ```swift import CapabilityPush import BaseCore // 使用推送服务 let pushService = PushServiceFactory.create() pushService.initialize(appKey: "your-key", channel: "App Store", debugMode: false) ``` ## 📋 能力层列表 | 能力层 | 说明 | 状态 | |--------|------|------| | CapabilityPush | 推送能力(JPush) | ✅ 已创建示例 | | CapabilityShare | 分享能力(友盟分享) | ⏳ 待创建 | | CapabilitySocketIO | SocketIO 能力 | ⏳ 待创建 | | CapabilityBLE | 蓝牙能力 | ⏳ 待创建 | | CapabilityNFC | NFC 能力 | ⏳ 待创建 | | CapabilityQRCode | 二维码能力 | ⏳ 待创建 | ## 🎯 优势 1. **独立打包**:每个能力层都是独立的 Swift Package,可以单独打包和发布 2. **版本管理**:每个能力层可以独立版本管理 3. **依赖解耦**:通过接口实现 BaseCore 与能力层的解耦 4. **灵活集成**:业务项目可以选择性集成需要的能力层 5. **易于测试**:每个能力层可以独立测试 ## 📝 注意事项 1. **依赖顺序**:能力层依赖 BaseCore,业务层依赖能力层 2. **接口定义**:接口定义在 BaseCore 中,实现类在能力层中 3. **版本兼容**:确保 BaseCore 版本与能力层版本兼容 4. **第三方 SDK**:第三方 SDK(如 JPush)在能力层中集成,不暴露给业务层