iOS能力层打包说明.md 5.1 KB

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. 创建目录结构

mkdir -p CapabilityPush/Sources/CapabilityPush
mkdir -p CapabilityPush/Tests/CapabilityPushTests

2. 创建 Package.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. 本地开发

cd CapabilityPush
swift build                    # 编译
swift test                     # 运行测试

2. 发布到 Git

# 打标签
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. 本地路径依赖

// 在 xdz 项目的 Package.swift 中
dependencies: [
    .package(path: "../CapabilityPush"),
    .package(path: "../BaseCore")
]

方式二:XCFramework(用于分发)

1. 使用 xcodebuild

# 构建 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

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. 完成

在代码中使用

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)在能力层中集成,不暴露给业务层