少林寺方丈嘿嘿
少林寺方丈嘿嘿
  • 发布:2026-08-21 11:45
  • 更新:2026-08-21 14:26
  • 阅读:58

UniMPSwiftDemo官方demo没有扩展 module功能吗

分类:uni-app

官方的https://gitcode.com/dcloud/unimpsdk-ios/tree/master/UniMPSwiftDemo/UniMPSwiftDemodemo怎么没有扩展 module功能,我要在和原生代码通信

2026-08-21 11:45 负责人:无 分享
已邀请:
少林寺方丈嘿嘿

少林寺方丈嘿嘿 (作者) - 厉害了吧

这个AI回答的毫无用处啊

Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

是的,GitCode 上的 UniMPSwiftDemo 是一个极简的 Swift 集成示例,主要演示宿主 App 如何启动 uni 小程序,因此没有包含扩展 Module 的代码

如果你需要在 uni 小程序中与原生 iOS 代码通信(调用原生功能),需要手动扩展 Module。以下是基于官方文档的实现方案:

1. 扩展 Module 实现步骤

创建 Module 类(继承 NSObject,遵循 WXModuleProtocol):

import Foundation  
import WeexSDK  

class TestModule: NSObject, WXModuleProtocol {  

    // 异步方法(通过 callback 回调)  
    @objc func testAsyncFunc(_ options: [String: Any], callback: @escaping WXModuleKeepAliveCallback) {  
        print("收到参数: \(options)")  
        // 回调给小程序:第一个参数是数据,第二个参数表示是否支持多次回调  
        callback(["code": "success", "data": "from native"], false)  
    }  

    // 同步方法(直接返回值)  
    @objc func testSyncFunc(_ options: [String: Any]) -> String {  
        print("同步调用: \(options)")  
        return "sync success"  
    }  

    // 必须实现:将方法暴露给 JS  
    static func moduleMethodMap() -> [String: String] {  
        return [  
            "testAsyncFunc:callback:": "testAsyncFunc",  
            "testSyncFunc:": "testSyncFunc"  
        ]  
    }  
}

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

注册 Module(在 AppDelegate 中,初始化 SDK 后):

import WeexSDK  

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {  
    // 初始化 DCUniMPSDKEngine  
    DCUniMPSDKEngine.initSDKEnvironment(launchOptions: launchOptions)  

    // 注册 Module(name 需唯一,与小程序端调用名一致)  
    WXSDKEngine.registerModule("TestModule", with: NSClassFromString("TestModule"))  

    return true  
}

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

2. 小程序端调用

在 uni 小程序(Vue/NVue)中通过 uni.requireNativePlugin 调用:

// 获取 Module  
const testModule = uni.requireNativePlugin("TestModule")  

// 调用异步方法  
testModule.testAsyncFunc({  
    name: 'unimp',  
    age: 1  
}, (ret) => {  
    console.log('原生回调:', ret) // 输出: {code: "success", data: "from native"}  
})  

// 调用同步方法  
const result = testModule.testSyncFunc({name: 'test'})  
console.log('同步返回:', result) // 输出: sync success

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

3. 关键注意事项

  • 线程安全:异步方法默认在 UI 线程执行,同步方法在 JS 线程执行,注意线程切换
  • 数据类型:回调仅支持 StringNSDictionary(Map)类型
  • 审核风险:避免在 Module 中使用 dlopen()dlsym()performSelector: 等动态方法,以免 App Store 审核被拒
  • 完整示例:建议下载完整的 uni小程序SDK,其中包含带 TestModule 的完整 Demo 工程

如果 SDK 内置功能仍不满足需求,也可以前往 DCloud 插件市场 搜索是否有现成的原生插件可直接集成。

内容为 AI 生成,仅供参考

要回复问题请先登录注册