Flutter iOS端相机权限请求失效问题求助
以下是几个排查和解决的方向:
检查Info.plist配置的正确性
确认NSCameraUsageDescription键名无拼写错误,且直接位于根<dict>节点下,没有嵌套在其他字典中。可以打开Xcode的Info.plist可视化界面查看,避免纯文本编辑时出现格式错误(比如多余空格、标签未闭合)。确认系统权限状态
前往iOS系统设置 → 找到你的应用 → 查看相机权限是否被设置为「拒绝」。如果是,先切换为「询问」,再重新运行应用测试。如果之前用户选择过「永不允许」,权限状态会变为permanentlyDenied,此时需要引导用户去设置开启权限。清理项目缓存并重新构建
执行以下命令清理缓存,确保配置生效:flutter clean flutter pub get cd ios && pod deintegrate && pod install && cd ..完成后通过
flutter run重新启动应用,不要使用热重载。优化权限请求代码
Permission.camera.request()本身会返回权限状态,无需单独再调用Permission.camera.status,避免异步调用导致的状态不一致:getPermissionStatus() async { var status = await Permission.camera.request(); print(status); if (status.isGranted) { log('Camera Permission: GRANTED'); setState(() { isCameraPermissionGranted = true; }); onNewCameraSelected(cameras[0]); refreshAlreadyCapturedImages(); } else if (status.isPermanentlyDenied) { openAppSettings(); } else { log('Camera Permission: DENIED'); } }检查permission_handler包版本
确保使用的permission_handler是最新稳定版,旧版本可能存在iOS权限处理的bug。可以在pubspec.yaml中更新版本后执行flutter pub get。验证Xcode项目配置
打开ios/Runner.xcworkspace,检查Signing & Capabilities中的Team签名是否正确,确保应用能正常签名安装。同时在Xcode的Info界面确认Privacy - Camera Usage Description条目存在且描述正确。
内容的提问来源于stack exchange,提问作者Nico

