nsfaceidusagedescription是ios应用中用于声明face id使用目的的必需info.plist键,若启用face id模块但该字段缺失或为空,系统在启动时初始化lacontext会因权限描述缺失而抛异常导致闪退。

直接删掉 NSFaceIDUsageDescription 并禁用 Face ID 模块,iOS 端就不会再触发任何生物认证相关弹窗或崩溃。
manifest.json 里必须清理的两项配置
不只删描述文案,两个地方都要动:
-
app-plus → distribute → ios → NSFaceIDUsageDescription字段整行删除(留空或填空字符串都会导致 App 启动闪退) -
app-plus → modules → iOS 模块配置中「FaceID」勾选项必须取消(HBuilderX UI 上显式关闭)
为什么不能只删权限描述?
uni-app 打包时会把 FaceID 模块作为原生能力注入。即使你没调用 uni.checkFaceID 或 uni.startSoterAuthentication,只要模块开着、描述字段存在,iOS 系统在启动阶段就会尝试初始化 LAContext —— 此时若描述为空或缺失,UIApplication 直接抛异常终止进程。
常见现象:App 在启动图后黑屏 1 秒,然后退出,Xcode 控制台报 NSFaceIDUsageDescription is missing 或 LAErrorBiometryNotAvailable,但前端 JS 层完全收不到错误。
删完之后还要检查 nativePlugins
如果你之前手动集成过指纹/人脸原生插件(比如 uni-fingerprint 或厂商 SDK),请确认:
-
nativePlugins/ios/目录下没有残留的 .a/.framework 文件或桥接代码 -
manifest.json → app-plus → nvueStyleCompiler或usingComponents中没有引用相关自定义组件 - HBuilderX 编译日志里不再出现
FaceID、LAContext、Biometric等关键词
真机验证是否生效的最快方式
改完配置后,务必用「自定义基座」真机运行一次,而不是云打包或标准基座:
- 打开系统「设置 → 面容 ID 与密码」,确认当前设备已开启面容/触控 ID —— 这步是为了排除“设备本身禁用”干扰
- 在代码里临时加一行:
console.log(uni.checkFaceID),运行后看控制台是否输出undefined(说明模块已卸载) - 主动调用
uni.startSoterAuthentication,观察是否报错not supported而非弹出生物认证 UI
国产 iOS 设备(如部分红米、荣耀适配版)偶尔会缓存旧配置,删完建议清空 HBuilderX 缓存并重启 IDE 再编译。











