9***@qq.com
9***@qq.com
  • 发布:2026-03-04 13:53
  • 更新:2026-03-04 13:53
  • 阅读:14

在ios的uts插件中 使用External申明原生方法,在云打包时报错

分类:uts

以下是HBuilderX云打包编译错误信息,分析一下是什么原因?

Error code = -5000
Error message:
UTS plugin uni_modules/yolo-uts compile error!

uni_modules/yolo-uts

[PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift:4:2: error: unknown attribute 'External'
[PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift:6:2: error: unknown attribute 'External'
[PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift:8:2: error: unknown attribute 'External'
[PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift:4:2: error: unknown attribute 'External'
[PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift:6:2: error: unknown attribute 'External'
[PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift:8:2: error: unknown attribute 'External'
[PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift:5:13: error: expected '{' in body of function declaration
[PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift:7:13: error: expected '{' in body of function declaration
[PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift:9:13: error: expected '{' in body of function declaration
[PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift:13:14: error: cannot convert value of type 'String' to expected argument type 'Bool'
[PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift:13:28: error: cannot convert value of type 'String' to expected argument type 'Bool'
[PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift:57:14: error: cannot convert value of type '[NSNumber]' to expected argument type 'Bool'
BUILD FAILED The following build commands failed:
SwiftCompile normal arm64 [PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift (in target 'unimoduleYoloUts' from project 'UTS')
SwiftEmitModule normal arm64 Emitting\ module\ for\ unimoduleYoloUts (in target 'unimoduleYoloUts' from project 'UTS')
SwiftCompile normal arm64 [PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift (in target 'unimoduleYoloUts' from project 'UTS')
SwiftCompile normal arm64 Compiling\ index.swift [PackagePath]/wgtRoot/UNI9E34736/uni_modules/yolo-uts/utssdk/app-ios/src/index.swift (in target 'unimoduleYoloUts' from project 'UTS')
(4 failures)

2026-03-04 13:53 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

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

问题原因
在 iOS 平台的 UTS 插件里,External 并不是 Swift 的合法属性(attribute)。云打包时 Swift 编译器会严格按照原生语法检查,于是出现

error: unknown attribute 'External'

并连带触发

expected '{' in body of function declaration

等后续错误,最终导致 UTS 插件编译失败(Error code = -5000)。

解决方案

  1. 删除所有 @External 字样,改用 UTS 插件官方提供的导出方式:

    • interface.uts 中用 export 声明接口;
    • app-ios/index.uts 中实现并 export 对应函数或类。
      示例:
    // interface.uts  
    export type MyApi = (arg: string) => void  
    // app-ios/index.uts  
    import { MyApi } from '../interface.uts'  
    
    export const myApi: MyApi = function(arg: string) {  
       // Swift 实现  
    }  
  2. 如果仍需在 Swift 源码中暴露给 UTS,使用 @objc + public 即可,无需 External

    @objc public class Yolo: NSObject {  
       @objc public func detect(_ img: String) -> Bool { … }  
    }  
  3. 修正参数、返回值类型不匹配的错误(日志中的 String/Bool[NSNumber]/Bool 转换问题),确保与接口定义一致。

  4. 清理并重新云打包。若仍报错,可携带复现工程到 DCloud issues 系统 提交详细日志。

参考文档

内容为 AI 生成,仅供参考

要回复问题请先登录注册