Ionic App在Xcode报错NSCameraUsageDescription未设置,iOS扫码器无法打开
问题原因与解决方案
嘿,这个问题我之前帮好几个Ionic开发者排查过,其实根源就是iOS严格的隐私权限机制在起作用,咱们一步步拆解:
为什么会出现这个问题?
从iOS 10开始,苹果强制要求所有访问敏感隐私模块(比如相机、相册、麦克风)的App,必须在Info.plist文件中添加对应的权限用途描述。NSCameraUsageDescription就是专门对应相机权限的描述键——如果没配置它:
- Xcode会直接抛出你看到的报错,提醒你缺失必要的权限声明;
- 当你的App尝试调用扫码器(本质是调用相机)时,系统会直接拒绝这个请求,导致扫码器完全打不开,甚至可能让App闪退。
简单说:没给相机权限的“合法理由”,iOS就不让你用相机,扫码器自然歇菜。
怎么解决?
有两种常用的解决方式,根据你的Ionic项目类型选择就行:
方式1:直接在Xcode中编辑Info.plist
- 打开你的Ionic项目对应的Xcode工程;
- 找到项目根目录下的
Info.plist文件,右键选择「Open As」→「Property List」(可视化编辑); - 点击列表顶部的「+」号,添加一个新的Key:
- Key栏输入
Privacy - Camera Usage Description(Xcode会自动匹配对应的系统键NSCameraUsageDescription); - Value栏填写清晰的用途描述,比如
用于扫描条形码以快速识别信息(注意:描述要真实,苹果审核时会检查); - 如果你习惯编辑源码,也可以右键选择「Open As」→「Source Code」,插入这段代码:
<key>NSCameraUsageDescription</key> <string>用于扫描条形码以快速识别信息</string>
- Key栏输入
方式2:在Ionic的配置文件中统一配置(推荐)
如果你用Cordova或Capacitor,可以直接在config.xml中配置,这样每次构建iOS项目时会自动同步到Info.plist,不用每次手动改Xcode:
- 打开项目根目录的
config.xml; - 在
<platform name="ios">标签内添加这段代码:<config-file parent="NSCameraUsageDescription" target="*-Info.plist"> <string>用于扫描条形码以快速识别信息</string> </config-file> - 执行同步命令:
- 用Cordova的话:
ionic cordova build ios - 用Capacitor的话:
ionic cap sync ios
- 用Cordova的话:
额外注意事项
如果你的设备上已经安装过旧版本的App,一定要先卸载旧版本再重新安装——因为iOS的权限提示只会在App第一次安装时弹出,旧版本的权限缓存会导致新的权限声明不生效。
内容的提问来源于stack exchange,提问作者Tanzeel U Rehman
相关产品推荐
相关产品推荐

