ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

mobile_scanner iOS/macOS 扫码权限配置:3 步配好相机权限,附上线前自查清单

mobile_scanner iOS/macOS 扫码权限配置:3 步配好相机权限,附上线前自查清单

mobile_scanner iOS/macOS 扫码权限配置:3 步配好相机权限,附上线前自查清单

【免费下载链接】mobile_scannerA universal Flutter barcode and QR code scanner using CameraX/ML Kit for Android, AVFoundation/Apple Vision for iOS & macOS, and ZXing for web.项目地址: https://gitcode.com/GitHub_Trending/mo/mobile_scanner

mobile_scanner 是跨平台 Flutter 扫码库:iOS 与 macOS 底层走 AVFoundation/Apple Vision,启动相机前必须先拿到系统授权。相机与照片库的权限配置只涉及三个文件:Info.plist 权限描述、PrivacyInfo.xcprivacy 隐私清单、运行时对授权结果的检查。下面按"备文件 → 写配置 → 自查"给速查信息。

开工前:先备好这几样

待改文件作用适用版本
example/ios/Runner/Info.plist声明相机、照片库的访问理由iOS
example/macos/Runner/Info.plist声明相机访问理由macOS
PrivacyInfo.xcprivacy隐私清单,插件已内置,一般只核对iOS 17+ 设备 / App Store 2024 起

工作量很小:iOS 端写两个 key,macOS 端写一个 key,隐私清单大多不用动。

三步完成权限配置

第一步:Info.plist 权限配置步骤

在Info.plist写两对 key,描述必须说清具体用途。以下为示例工程的原文:

<key>NSCameraUsageDescription</key> <string>This app needs camera access to scan QR and barcodes</string> <key>NSPhotoLibraryUsageDescription</key> <string>This app needs photos access to get QR code from photo library</string>

只做相机扫描时,NSPhotoLibraryUsageDescription可以删掉。macOS 工程同理,只需NSCameraUsageDescription。

第二步:PrivacyInfo.xcprivacy 文件声明方法

App Store 自 2024 年起要求随包提交隐私清单。mobile_scanner 已自带清单,并通过 mobile_scanner.podspec 的resource_bundles自动打进宿主 App,核心内容如下:

<key>NSPrivacyTracking</key> <false/> <key>NSPrivacyAccessedAPITypes</key> <array/>

集成方通常无需修改。若你的 App 有 tracking 或收集数据行为,需自行补充NSPrivacyTrackingDomains、NSPrivacyCollectedDataTypes字段。

第三步:对照真实工程核对配置

以项目示例工程为准逐项核对:

  • iOS:example/ios/Runner/Info.plist 中NSCameraUsageDescription与NSPhotoLibraryUsageDescription均已写入
  • macOS:example/macos/Runner/Info.plist 仅声明NSCameraUsageDescription
  • 隐私清单:PrivacyInfo.xcprivacy

key 名必须拼写精确,缺一或写错都会导致系统不弹授权框甚至运行时崩溃。

运行时权限流转:检查、请求与拒绝处理

状态应对动作
尚未请求调用MobileScannerController.start(),系统弹出授权框
hasCameraPermission为 true正常扫码,无需额外处理
错误码为MobileScannerErrorCode.permissionDenied展示原因并引导去系统设置开启
if (!controller.value.hasCameraPermission) { // 引导用户到系统设置开启相机权限 // iOS/macOS 上被拒后无法在应用内再次触发 }

注意:在 iOS、macOS 与 Web 上,用户一旦拒绝,应用内无法再次请求授权,只能引导用户手动到系统设置开启。这个分支必须写。

上线前自查清单

检查项常见配错修正建议
NSCameraUsageDescription漏配或拼错(如 NSCameraDescription)核对官方拼写,写真实用途
NSPhotoLibraryUsageDescription声明了照片库权限但无对应功能删掉声明或落地功能
macOS Info.plist只配了 iOS,漏了 macos/Runner/Info.plistmacOS 端补相机描述
PrivacyInfo.xcprivacy未随包分发,声明与实际不符确认 podspec 的 resource_bundles 生效
Xcode 签名Bundle ID 与描述不一致、提示错位检查 Signing & Capabilities

审核红线

  • 描述与实际用途不符:相机描述写了"用于拍照裁剪"之类与扫码无关的内容
  • 模糊描述:"应用功能需要"这种空话直接打回,要写具体场景
  • 声明与行为不匹配:Info.plist 声明了权限,但代码里没有功能真正使用它
  • 隐私清单与 App 行为矛盾:声明无 tracking,实际却有追踪 API 调用

按清单配完后,首次进入扫描页即会弹出系统授权框。授权通过后扫码开箱即用,被拒时也能优雅跳转设置页,而不是静默失败。

【免费下载链接】mobile_scannerA universal Flutter barcode and QR code scanner using CameraX/ML Kit for Android, AVFoundation/Apple Vision for iOS & macOS, and ZXing for web.项目地址: https://gitcode.com/GitHub_Trending/mo/mobile_scanner

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进