欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
根据你的描述,核心问题是:ios 云端打包时没有识别并编译 uni_modules 下的 uts 插件,导致基座中缺少原生模块,运行时抛出 undefined class 错误。
这个问题的关键在于 uts 插件(特别是 ios 端)在云打包时的识别机制。结合你提供的日志“应用manifest不修改且未使用原生插件的情况下...”,可以推断云端打包流程判断你的项目中“未使用原生插件”,因此跳过了原生模块的编译和注入。
以下是需要重点排查和解决的方向:
1. 确认 uts 插件的 config.json 配置是否正确
你的插件依赖 onnxruntime-objc,这是一个需要通过 CocoaPods 集成的原生库。对于 ios 端的 uts 插件,依赖声明必须准确无误。
请检查 uni_modules/zy-ocr-tool/utssdk/app-ios/config.json 文件(或类似路径下的 ios 配置文件),确保依赖声明格式完全正确。一个典型的、包含 CocoaPods 依赖的 ios uts 插件配置如下:
{
"dependencies": [
{
"name": "onnxruntime-objc",
"type": "pod",
"version": "1.16.0"
}
]
}
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
name 必须是 CocoaPods 仓库中的准确名称。
type 必须指定为 "pod",这是告诉云端打包系统需要执行 pod install 的关键字段。
version 建议明确指定,避免版本冲突。
如果此处格式错误或 type 遗漏,云端打包系统可能无法正确解析依赖,从而忽略整个插件。
2. 检查插件目录结构和命名规范
uts 插件的目录结构必须严格遵守规范,否则编译器可能无法发现插件。
- 确保插件目录完整路径为
项目根目录/uni_modules/zy-ocr-tool/utssdk/app-ios/。
app-ios 目录名不能有任何偏差(例如不能是 ios 或 app-ios-dev)。
app-ios 目录下应包含你的 .uts 源文件、config.json 以及可能的原生桥接文件。
3. 清理打包缓存后重试
云端打包可能存在缓存,导致即使修复了配置,打包时仍使用旧的、错误的判断。请尝试以下步骤:
- 在 HBuilderX 中,找到你的项目。
- 进入
unpackage 目录,删除整个 debug 文件夹(或至少删除其中的 ios 相关输出)。
- 重新执行“发行 → 原生App-云打包 → iOS 自定义调试基座”。
4. 验证插件是否被正确引用
虽然 uts 插件不需要在 manifest.json 的 app-plus -> modules 或 nativePlugins 中手动声明(这是旧版原生插件的做法),但你仍需确保没有在 manifest.json 中错误地配置了任何可能干扰 uts 插件识别的设置。
uts 插件的引用是通过在代码中 import 或 require 来自动完成的。请确认你的业务代码中确实引用了该插件,例如:
// 示例,请根据你的插件实际导出名称调整
import { initOcr } from '@/uni_modules/zy-ocr-tool';
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
如果仅仅是放入了 uni_modules 目录但没有在任何 .vue 或 .js 文件中引用,编译器可能会进行摇树优化(tree-shaking),将其视为未使用的代码而排除。
5. 对比 Android 端配置
既然 Android 端可以正常工作,建议将 Android 和 iOS 两端的 config.json 和目录结构进行详细对比。虽然平台不同,但配置的结构逻辑是相似的。检查是否有针对 Android 的特殊配置,而 iOS 端遗漏了对应的必要字段。
如果以上步骤均无法解决问题,可能是该版本 HBuilderX(5.15)对特定格式的 CocoaPods 依赖解析存在兼容性缺陷。你可以尝试:
- 将
onnxruntime-objc 的版本号调整为一个较早的、广泛兼容的稳定版。
- 创建一个最简单的、仅包含一个 CocoaPods 依赖的 ios uts 插件进行测试,以判断问题是出在你的插件配置上,还是打包环境本身。
根据知识库,类似“应用manifest不修改且未使用原生插件”的提示,往往意味着打包流程在前期文件扫描阶段就做出了错误判断。请重点聚焦于 config.json 的 type: "pod" 声明和插件目录结构的绝对规范性。
3 个回复
2***@qq.com (作者)
{
"deploymentTarget": "13.0",
"validArchitectures": ["arm64"],
"frameworks": [
"Foundation.framework",
"UIKit.framework",
"CoreGraphics.framework",
"Accelerate.framework"
],
"dependencies-pods": [
{
"name": "onnxruntime-objc",
"version": "1.21.0"
}
]
}
已按 官方 CocoaPods 文档 配置
2***@qq.com (作者)
根目录已有完整 UTS 插件且业务已静态 import,Android 云定制基座正常;仅 iOS 云打包日志仍报「未使用原生插件」,连 UTS 编译/pod install 都未进入
Ask小助手
根据你的描述,核心问题是:ios 云端打包时没有识别并编译
uni_modules下的 uts 插件,导致基座中缺少原生模块,运行时抛出undefined class错误。这个问题的关键在于 uts 插件(特别是 ios 端)在云打包时的识别机制。结合你提供的日志“应用manifest不修改且未使用原生插件的情况下...”,可以推断云端打包流程判断你的项目中“未使用原生插件”,因此跳过了原生模块的编译和注入。
以下是需要重点排查和解决的方向:
1. 确认 uts 插件的 config.json 配置是否正确
你的插件依赖
onnxruntime-objc,这是一个需要通过 CocoaPods 集成的原生库。对于 ios 端的 uts 插件,依赖声明必须准确无误。请检查
uni_modules/zy-ocr-tool/utssdk/app-ios/config.json文件(或类似路径下的 ios 配置文件),确保依赖声明格式完全正确。一个典型的、包含 CocoaPods 依赖的 ios uts 插件配置如下:name必须是 CocoaPods 仓库中的准确名称。type必须指定为"pod",这是告诉云端打包系统需要执行pod install的关键字段。version建议明确指定,避免版本冲突。如果此处格式错误或
type遗漏,云端打包系统可能无法正确解析依赖,从而忽略整个插件。2. 检查插件目录结构和命名规范
uts 插件的目录结构必须严格遵守规范,否则编译器可能无法发现插件。
项目根目录/uni_modules/zy-ocr-tool/utssdk/app-ios/。app-ios目录名不能有任何偏差(例如不能是ios或app-ios-dev)。app-ios目录下应包含你的.uts源文件、config.json以及可能的原生桥接文件。3. 清理打包缓存后重试
云端打包可能存在缓存,导致即使修复了配置,打包时仍使用旧的、错误的判断。请尝试以下步骤:
unpackage目录,删除整个debug文件夹(或至少删除其中的 ios 相关输出)。4. 验证插件是否被正确引用
虽然 uts 插件不需要在
manifest.json的app-plus->modules或nativePlugins中手动声明(这是旧版原生插件的做法),但你仍需确保没有在manifest.json中错误地配置了任何可能干扰 uts 插件识别的设置。uts 插件的引用是通过在代码中
import或require来自动完成的。请确认你的业务代码中确实引用了该插件,例如:如果仅仅是放入了
uni_modules目录但没有在任何.vue或.js文件中引用,编译器可能会进行摇树优化(tree-shaking),将其视为未使用的代码而排除。5. 对比 Android 端配置
既然 Android 端可以正常工作,建议将 Android 和 iOS 两端的
config.json和目录结构进行详细对比。虽然平台不同,但配置的结构逻辑是相似的。检查是否有针对 Android 的特殊配置,而 iOS 端遗漏了对应的必要字段。如果以上步骤均无法解决问题,可能是该版本 HBuilderX(5.15)对特定格式的 CocoaPods 依赖解析存在兼容性缺陷。你可以尝试:
onnxruntime-objc的版本号调整为一个较早的、广泛兼容的稳定版。根据知识库,类似“应用manifest不修改且未使用原生插件”的提示,往往意味着打包流程在前期文件扫描阶段就做出了错误判断。请重点聚焦于
config.json的type: "pod"声明和插件目录结构的绝对规范性。要回复问题请先登录或注册
公告
更多>相关问题