普通网友 2025-07-10 02:40 采纳率: 98.6%
浏览 18
已采纳

iOS开发中如何正确配置NFCNDEFReaderSession权限?

在iOS开发中,使用`NFCNDEFReaderSession`进行NFC标签读取时,除了在代码中正确初始化会话外,还需在Info.plist文件中配置相应的权限。常见的问题是:**如何正确配置NFC权限以确保应用能够正常启动NFCNDEFReaderSession?** 开发者常常忽略在Info.plist中添加`com.apple.developer.nfc.readersession.formats`这一关键权限声明,导致会话无法启动并抛出异常。此外,还需在Xcode的Signing & Capabilities中启用“Near Field Communication Tag Reading”功能。 因此,一个常见的技术问题是:“**为什么调用NFCNDEFReaderSession时会话无法启动,并提示‘This app has not been configured to use NFC’错误?**”
  • 写回答

1条回答 默认 最新

  • Nek0K1ng 2025-07-10 02:40
    关注

    1. 问题背景与常见现象

    在iOS开发中,使用 NFCNDEFReaderSession 进行 NFC 标签读取是一项常见的功能需求。然而,很多开发者在集成该功能时遇到一个经典错误:

    This app has not been configured to use NFC

    这个错误通常出现在调用 NFCNDEFReaderSession 初始化会话时,系统检测到应用未正确配置 NFC 权限。

    尽管代码逻辑看似无误(如正确导入框架、实现委托方法等),但往往忽略了两个关键配置点:

    • 在 Xcode 的 Signing & Capabilities 中启用“Near Field Communication Tag Reading”能力;
    • 在 Info.plist 文件中添加必要的权限声明,尤其是 com.apple.developer.nfc.readersession.formats

    2. 配置步骤详解

    2.1 启用 NFC 功能(Xcode Capabilities)

    在 Xcode 中打开项目后,进入 “Signing & Capabilities” 页面,点击 “+ Capability”,选择 “Near Field Communication Tag Reading”。这一步会自动修改工程的 entitlements 文件并请求相关权限。

    操作步骤说明
    1. 打开项目设置选中目标 target,切换到 "Signing & Capabilities"
    2. 添加 NFC 能力点击 "+" 号 → 搜索 "Near Field Communication Tag Reading" → 添加

    2.2 Info.plist 中添加 NFC 权限声明

    即使启用了 NFC 能力,若未在 Info.plist 文件中声明支持的 NFC 数据格式,则仍然无法正常启动会话。

    需要在 Info.plist 中添加以下键值对:

    <key>com.apple.developer.nfc.readersession.formats</key>
    <array>
        <string>NDEF</string>
        <string>TAG</string>
    </array>
    • NDEF:表示支持读取 NDEF 格式的 NFC 标签;
    • TAG:表示支持非 NDEF 格式的原始标签数据。

    3. 异常分析与调试建议

    3.1 错误信息解析

    当出现如下错误提示时:

    This app has not been configured to use NFC

    这意味着系统检测到当前应用未满足 NFC 使用的条件。可能原因包括:

    1. Xcode Capabilities 中未启用 NFC Tag Reading 功能;
    2. Info.plist 中缺少 com.apple.developer.nfc.readersession.formats 声明;
    3. 设备不支持 NFC 或 iOS 版本过低(iOS 11 及以上才支持);
    4. Entitlements 文件未正确配置或签名失败。

    3.2 排查流程图

    ```mermaid graph TD A[启动 NFCNDEFReaderSession] --> B{是否启用 NFC Capability?} B -- 是 --> C{Info.plist 是否包含 NFC 权限声明?} C -- 是 --> D[NFC 会话成功启动] C -- 否 --> E[抛出异常: This app has not been configured to use NFC] B -- 否 --> F[抛出异常: NFC 未授权] ```

    4. 完整示例代码与验证方式

    4.1 示例代码片段

    ```swift import CoreNFC class NFCManager: NSObject, NFCNDEFReaderSessionDelegate { var session: NFCNDEFReaderSession? func startNFCSession() { guard NFCNDEFReaderSession.readingAvailable else { print("当前设备不支持 NFC") return } session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: true) session?.begin() } func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) { print("NFC 会话结束: $error.localizedDescription)") } func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) { for message in messages { for record in message.records { print("读取到记录内容: $record.payload)") } } } } ```

    4.2 验证配置是否生效

    1. 运行应用前确保真机连接且支持 NFC;
    2. 尝试读取一张 NFC 标签,观察控制台输出;
    3. 如果仍报错,请检查 Xcode 的 build 日志是否有 entitlements 相关警告。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 7月10日