Dimina iOS SDK

May 19, 2026 · View on GitHub

系统要求

  • iOS 14.0+
  • Swift 6.0+
  • Xcode 16.0+

快速接入

步骤 1: 添加 SDK 到项目

您可以通过以下方式将 Dimina SDK 添加到您的 iOS 项目中:

Swift Package Manager

在 Xcode 中打开 dimina.xcodeproj,选择:

File > Add Package Dependencies...

然后填写仓库地址:

https://github.com/didi/dimina.git

版本选择 Up to Next Major Version,或按需要固定到具体版本。

步骤 2: 准备小程序资源

将编译好的小程序压缩包放入 iOS/dimina/Resources/JsApp.bundle 文件夹,文件夹以小程序 ID 命名。示例工程可通过 copy-shared-resources.sh 从根目录 shared/jsapp 同步资源。每个小程序文件夹需包含以下内容:

  1. config.json - 小程序配置文件,包含以下字段:
{
  "appId": "wx92269e3b2f304afc", // 小程序唯一标识
  "name": "小程序名称",
  "path": "example/index", // 小程序入口路径
  "versionCode": 1, // 启动小程序时会根据版本号确认是否需要更新
  "versionName": "1.0.0"
}
  1. [appId].zip - 小程序代码包,文件名需与 appId 一致

目录结构示例:

JsApp.bundle/
  ├── wx92269e3b2f304afc/
  │   ├── config.json
  │   └── wx92269e3b2f304afc.zip
  └── wxbaf4b47de04f1d8a/
      ├── config.json
      └── wxbaf4b47de04f1d8a.zip

内置包会在启动时按 versionCode 复制或解压到应用沙盒目录后运行。动态下发、远程下载和 wx.getUpdateManager 的职责边界请参考小程序包更新说明

步骤 3: 启动小程序

import Dimina
import SwiftUI

struct ContentView: View {
    var body: some View {
        Button("启动小程序") {
            launchMiniProgram()
        }
    }

    func launchMiniProgram() {
        if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
            let window = windowScene.windows.first
        {
            let navController = UINavigationController()

            // 创建一个新的 ContentView 作为根视图,可以自行替换
            let contentView = ContentView()
            let hostingController = UIHostingController(rootView: contentView)
            
            hostingController.navigationItem.title = "星河小程序"

            // 设置为根视图
            navController.viewControllers = [hostingController]
            window.rootViewController = navController

            // 创建小程序配置和实例
            let manager: DMPAppManager = DMPAppManager.sharedInstance()
            var appConfig: DMPAppConfig = DMPAppConfig(appName: "小程序名称", appId: "wx92269e3b2f304afc")
            appConfig.isDebugMode = true
            appConfig.updateManifestUrl = "https://example.com/jsapp/wx92269e3b2f304afc.json" // 可选:远程更新 manifest
            let app: DMPApp = manager.appWithConfig(appConfig: appConfig)

            // 设置导航
            app.getNavigator()!.setup(navigationController: navController)

            // 启动小程序
            Task { @MainActor in
                let launchConfig: DMPLaunchConfig = DMPLaunchConfig()
                await app.launch(launchConfig: launchConfig)
            }
        }
    }
}

调试模式与 vConsole

iOS Debug 构建会自动尝试启用 vConsole;也可以通过 appConfig.isDebugMode = true 在指定小程序上启用。启用后,SDK 会在加载 pageFrame 时追加 ?vconsole=1

JSSDK 直接依赖 vConsole,并随 pageFrame 静态同步打包;只有检测到该启用标记时,pageFrame 才会在 render 初始化前同步初始化 vConsole。

关闭小程序

当不再需要小程序时,可以关闭它:

app.destroy()

权限处理

小程序可能需要访问设备的各种权限,如相机、位置等。请确保在 Info.plist 中添加相应的权限描述:

<key>NSCameraUsageDescription</key>
<string>小程序需要使用您的相机</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>小程序需要使用您的位置信息</string>

示例项目

运行命令:

open iOS/dimina.xcodeproj

使用 Xcode 打开 dimina.xcodeproj 可以查看示例项目。示例工程构建前会执行 copy-shared-resources.sh,将根目录 shared/jsappshared/jssdk 中的资源同步到 iOS/dimina/Resources