Flutter iOS实体设备使用nfc_manager实现NFC功能出现CoreNFC XPC错误如何解决
问题原因
- 代码逻辑错误:
startSession为异步执行逻辑,你在启动NFC会话后没有等待标签扫描流程结束,就直接调用了NfcManager.instance.stopSession(),会导致会话刚完成初始化就被强制终止,触发CoreNFC服务连接失效报错。 - iOS运行环境不兼容:使用iOS模拟器运行NFC相关代码,模拟器本身不支持CoreNFC能力;或者测试设备为iPhone7以前的机型、iOS系统版本低于13.0,硬件/系统不满足NFC调用要求。
- 项目配置缺失:Xcode项目没有添加NFC标签读取的能力声明,或者Info.plist没有添加NFC使用权限描述,系统会直接拦截应用的NFC服务请求,断开服务连接。
解决方法
- 首先修正代码逻辑,将
stopSession调用移动到标签发现回调或错误回调中,避免会话被提前终止,参考修改后的代码:
openNFC() async { // Check availability bool isAvailable = await NfcManager.instance.isAvailable(); // Start Session if (isAvailable) { NfcManager.instance.startSession( onDiscovered: (NfcTag tag) async { print(tag); // 处理完标签逻辑后再终止会话 NfcManager.instance.stopSession(); }, // 添加错误回调,异常场景也主动终止会话 onError: (error) async { print(error); NfcManager.instance.stopSession(errorMessage: error.toString()); } ); } else { print("Your device is not compatible with NFC"); } }
- 确认运行环境:必须使用iPhone7及以后的真机测试,系统版本升级到iOS13.0及以上,禁止使用模拟器运行NFC相关功能。
- 完成iOS项目配置:
- 打开Xcode中的iOS项目,进入
Signing & Capabilities页,点击+Capability添加Near Field Communication Tag Reading能力。 - 编辑ios/Runner/Info.plist文件,添加NFC使用权限说明,以及你需要用到的标签类型协议声明,示例如下:
<!-- 权限使用说明,会展示在系统权限申请弹窗中 --> <key>NFCReaderUsageDescription</key> <string>需要使用NFC读取标签信息</string> <!-- 按需添加对应的标签协议,以下为ISO15693类型标签的声明示例 --> <key>com.apple.developer.nfc.readersession.iso15693</key> <array> <string>all</string> </array> <!-- 如果用到NDEF格式标签,可补充对应声明 --> <key>com.apple.developer.nfc.readersession.formats</key> <array> <string>NDEF</string> </array> - 打开Xcode中的iOS项目,进入
- 清理项目编译缓存,重新运行即可。
内容的提问来源于stack exchange,提问作者The_dev69
相关产品推荐
相关产品推荐

