Flutter项目调用CoreNFC的NFCNDEFReaderSession.begin()启动失败求助
解决Flutter项目中CoreNFC阅读器会话无法启动的问题
问题核心
你遇到的NFCNDEFReaderSession.readingAvailable = false,本质是Flutter项目的NFC权限配置不完整,导致系统判定当前环境不支持NFC读取——你仅给Release环境配置了权限,但Debug运行环境未同步配置。
分步修复方案
1. 补全全环境的NFC权限
打开Xcode,选中Runner Target:
- 切换到
Signing & Capabilities标签页 - 点击
+ Capability,搜索并添加Near Field Communication Tag Reading - 在权限的
Targets选项中,确保Debug、Release、Profile三个环境全部勾选(之前仅配置了Release)
2. 完善Info.plist的NFC相关配置
确认Info.plist中添加了以下必要配置:
<!-- NFC使用权限说明 --> <key>NFCReaderUsageDescription</key> <string>需要使用NFC功能读取标签信息</string> <!-- 指定支持的NFC格式(iOS 13+必填) --> <key>com.apple.developer.nfc.readersession.formats</key> <array> <string>NDEF</string> </array>
3. 确保会话启动在主线程执行
修改NFCViewController的beginScanning方法,明确在主线程启动会话:
public func beginScanning() { DispatchQueue.main.async { [weak self] in guard NFCNDEFReaderSession.readingAvailable else { print("@@@ beginScanning: readingAvailable = false") return } guard let self = self else { return } self.session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: false) self.session?.alertMessage = "请将iPhone靠近NFC标签以读取信息" self.session?.begin() } }
4. 清理缓存并重新构建
- 执行终端命令:
flutter clean - 在Xcode中选择
Product > Clean Build Folder - 重新将项目部署到真机
额外验证项
- 确认测试设备为iPhone 7及以上(支持CoreNFC)
- 检查设备NFC功能未被禁用(设置 > 通用 > NFC)
- 确认iOS版本在11.0以上(你的iOS 17.3.1符合要求)
完成以上步骤后,点击按钮触发扫描时,readingAvailable会返回true,系统的NFC阅读器会话会正常启动并显示引导界面。
内容的提问来源于stack exchange,提问作者yoichi_KARAOKE
相关产品推荐
相关产品推荐

