NSBluetoothAlwaysUsageDescription 键丢失(虽然存在)

NSBluetoothAlwaysUsageDescription key missing (though present)

在使用 Swift 编写的 iOS 应用程序时,我遇到了 Info.plist 的问题。这是问题所在:

项目中包含的唯一 Info.plist 文件有一个 NSBluetoothAlwaysUsageDescription 键。

供参考,这里是Info.plist的相关部分:

<key>NSBluetoothPeripheralUsageDescription</key>
<string>The app uses bluetooth to transfer data to a neighbouring device.</string>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>The app may frequently use bluetooth to transfer data to peers.</string>

但是当我 运行 我的 iPhone 上的应用程序时,我在 Xcode 调试控制台中看到这个错误:

  2021-06-06 11:20:21.235717+0900 TheApp[5010:1066154] [access] This app has crashed because
  it attempted to access privacy-sensitive data without a usage description.
  The app's Info.plist must contain an NSBluetoothAlwaysUsageDescription key
  with a string value explaining to the user how the app uses this data.

这里已经有矛盾我就不解释了

为了进一步调查,我做了如下操作:

  Product
    -> Archive
      -> Distribute App
        -> Development: Distribute to members fo your team.
          -> Export

在那里,我将名称 TheApp.ipa 更改为 TheApp.zip 并解压。 然后在 Payload 文件夹中,在 TheApp.app 我做的是:

  Show Package Contents

我看到一个 Info.plist 项目,我点击它查看。

并且由于某些未知原因 NSBluetoothAlwaysUsageDescription 密钥确实丢失了。

这最后一点可以解释我之前收到的错误消息,但我仍然不知道为什么密钥消失了。

非常欢迎任何能阐明这个问题的人。

我终于找到了解决办法。

在查看和尝试各种东西时,我发现了 Info.plist 的副本。

MyApp copy-Info.plist

这个幽灵 Info.plist 包含错误的内容并查看它,这解释了我所做的所有奇怪的观察。

出于某种原因,构建过程使用的是 ghost 文件而不是我的。而实际的 Info.plist 被忽略了。