You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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服务请求,断开服务连接。
解决方法
  1. 首先修正代码逻辑,将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");
  }
}
  1. 确认运行环境:必须使用iPhone7及以后的真机测试,系统版本升级到iOS13.0及以上,禁止使用模拟器运行NFC相关功能。
  2. 完成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>
    
  3. 清理项目编译缓存,重新运行即可。

内容的提问来源于stack exchange,提问作者The_dev69

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:18:04