9***@qq.com
9***@qq.com
  • 发布:2026-03-09 11:26
  • 更新:2026-03-09 14:03
  • 阅读:79

我在封装uts组件(API组件)的时候,在ios中引入了xcframework原生代码,写了bridge.swift桥接,但是在index.uts中没法正常调用待原生方法

分类:uts

具体文件如下
config.json

{    
  "frameworks": [    
    "ADY_IMG_SDK.xcframework",  
    "ADY_IMG_SDK.framework",  
    "libz.tbd"  
  ]  
}

bridge.swift

// utssdk/app-ios/src/bridge.swift  
import Foundation  
import ADY_IMG_SDK   // xcframework 里的模块  
@objc(ADY_IMG_SDKBridge)  
class ADY_IMG_SDKBridge : NSObject, UTSSwiftProtocol {  
    // 必须实现的协议方法  
    static func register() {  
        // 这里只做注册,真正调用走下面暴露的方法  
    }  
    // 把 xcframework 中的原生方法包装成 UTS 可调用的形式  
    @objc static func loadmodel(_ paramPath: String, binPath: String) -> Bool {  
        let result = ADY_IMG_SDK.yolo_load_model(paramPath, binPath)  
        return result  
    }  
}

index.uts

export function test3(paramPath : string, binPath : string) {  
    console.log('测试调用原生');  
    return plus.bridge.execSync('{  
    "id": "yolo-uts",  
    "displayName": "yolo-uts",  
    "version": "1.0.0",  
    "description": "YOLO UTS插件",  
    "main": "index.uts",  
    "uni_modules": {  
        "uni-app": {  
            "uts-plugin": {  
                "name": "ADY_IMG_SDK_Plugin",  
                "ios": {  
                    "class": "ADY_IMG_SDKBridge",  
                    "frameworks": ["ADY_IMG_SDK.xcframework","ADY_IMG_SDK.framework"]  
                }  
            }  
        }  
    }  
}', 'loadmodel', [paramPath, binPath])  
}

package.json

{  
    "id": "yolo-uts",  
    "displayName": "yolo-uts",  
    "version": "1.0.0",  
    "description": "YOLO UTS插件",  
    "main": "index.uts",  
    "uni_modules": {  
        "uni-app": {  
            "uts-plugin": {  
                "name": "ADY_IMG_SDK_Plugin",  
                "ios": {  
                    "class": "ADY_IMG_SDKBridge",  
                    "frameworks": ["ADY_IMG_SDK.xcframework","ADY_IMG_SDK.framework"]  
                }  
            }  
        }  
    }  
}
2026-03-09 11:26 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

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

问题出在 index.uts 里调用的方式不对——uni-app x 里已经不再支持 plus.bridge,也不需要在 execSync 里把整个 package.json 传进去。
正确做法是在 index.uts 里直接 import 你在 bridge.swift 里暴露的类,然后像普通函数一样调用即可。

  1. 修改 index.uts(只保留关键代码)
    
    // 引入插件在 iOS 端暴露的类  
    import { ADY_IMG_SDKBridge } from "./bridge"  

export function test3(paramPath: string, binPath: string): boolean {
console.log('测试调用原生')
// 直接调用 swift 侧暴露的静态方法
return ADY_IMG_SDKBridge.loadmodel(paramPath, binPath)
}


2. 确认 package.json 中已声明插件  
```json  
{  
  "uni_modules": {  
    "uni-ext-api": {  
      "uni": {  
        "yolo-uts": {  
          "name": "yolo-uts",  
          "app": {  
            "swift": true  
          }  
        }  
      }  
    }  
  }  
}
  1. 重新打包自定义基座或云打包即可。
    这样即可在 uvue 页面里正常 import 并调用 test3。
内容为 AI 生成,仅供参考
DCloud_UNI_yuhe

DCloud_UNI_yuhe

你好,能够打包提供一下一个简易的复现工程吗?

  • 9***@qq.com (作者)

    上传附件有大小限制,整个项目传不上去

    2026-03-09 13:56

  • 9***@qq.com (作者)

    只能传插件部分

    2026-03-09 14:04

9***@qq.com

9***@qq.com (作者)

插件整体内容如下

要回复问题请先登录注册