iOS 10 应用程序因试图访问隐私敏感数据而崩溃

Posted

技术标签:

【中文标题】iOS 10 应用程序因试图访问隐私敏感数据而崩溃【英文标题】:iOS 10 App has crashed because it attempted to access privacy-sensitive data 【发布时间】:2017-02-11 00:14:41 【问题描述】:

我正在运行我以前运行良好的项目,但在更新我的 xcode 后,我的应用程序崩溃并出现此错误:

此应用已崩溃,因为它试图在没有使用说明的情况下访问隐私敏感数据。应用的 Info.plist 必须包含一个 NSCameraUsageDescription 键和一个字符串值,向用户解释应用如何使用这些数据

【问题讨论】:

Anbu.Karthik 回答正确。 【参考方案1】:

我什至不会提示我。我插入了 SKAdNetworkItems 键和 NSUserTrackingUsageDescription 键。我还有多个用于本地化的 info.plist,我用密钥更新了它们。

我跑了ATTrackingManager.requestTrackingAuthorization(completionHandler: status in 功能,它正在崩溃。崩溃日志说:“这个应用程序已经崩溃,因为它试图在没有使用说明的情况下访问隐私敏感数据。应用程序的 Info.plist 必须包含一个 NSUserTrackingUsageDescription 键,其字符串值向用户解释应用程序如何使用这些数据。”

但我从未收到要求跟踪许可的提示

    extension ViewController: GADFullScreenContentDelegate 
  func loadVideoAd() 
    func load()
        let request = GADRequest()
        GADInterstitialAd.load(withAdUnitID: GoogleAdKeys.Interstitial, request: request, completionHandler:  ad, error in
            if let error = error 
                print("Failed to load interstitial ad with error: \(error.localizedDescription)")
                return
            
            self.interstitial = ad!
            self.interstitial.fullScreenContentDelegate = self
        )
    
    
    if #available(ios 14, *) 
      ATTrackingManager.requestTrackingAuthorization(completionHandler:  status in
        switch status
        case .notDetermined:
          break
        case .restricted:
          break
        case .denied:
          break
        case .authorized:
          load()
        @unknown default:
          break
        
      )
     else 
      // Fallback on earlier versions
      load()
    
  

    func playVideoAd()  
        interstitial.present(fromRootViewController: self)
    

【讨论】:

我也遇到了同样的问题,你找到解决办法了吗?【参考方案2】:

@Anbu 的答案有一个额外的空间,会引发异常。 Info.plist 条目应如下所示

<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) uses camera</string>

【讨论】:

【参考方案3】:

我通过在info.plist 中添加以下条目在我的模拟器上解决了这个问题

我没有在使用相机的真实设备上尝试过,我认为你也必须输入以下值,

我正在使用 iOS 10.2

【讨论】:

【参考方案4】:

使用 iOS 10 SDK 构建应用时所需的新隐私设置。如果您要访问任何隐私敏感数据,则必须在 Info.plist 文件中提供“用途字符串”。

“Purpose String”只是一条消息,解释了为什么应用程序需要访问将在请求权限时显示给用户的特定服务(就像我们从 iOS 8 开始为定位服务所做的那样)。不提供此“目的字符串”可能会导致您的应用崩溃。

【讨论】:

【参考方案5】:

iOS 10 中的隐私设置

iOS 10 的一个重大变化是您必须提前声明对私有数据的任何访问权限,否则您的应用程序将崩溃。

与 iOS 10 关联后,您必须声明对任何用户私有数据类型的访问权限。为此,您可以在应用的 Info.plist 中添加一个使用密钥以及一个目的字符串。算作私有数据的框架列表很长

通讯录、日历、提醒、照片、蓝牙共享、麦克风、相机、位置、健康、HomeKit、媒体库、Motion、CallKit、语音识别、SiriKit、电视提供商。

您需要将 NSCameraUsageDescription 放入您的 plist。

喜欢

<key> NSCameraUsageDescription </key>
<string>$(PRODUCT_NAME) uses Cameras</string>

例如

查看所有使用说明here。

【讨论】:

以上是关于iOS 10 应用程序因试图访问隐私敏感数据而崩溃的主要内容,如果未能解决你的问题,请参考以下文章

info.plist 中的隐私摄像头描述问题

iOS 10:共享图像/保存图像开始崩溃

IOS10 的 Ionic 框架 Plist

如何在 ios 10.0 中授予访问电话通讯录的权限?

xctest 此应用试图在没有使用说明的情况下访问隐私敏感数据

Meteor + Cordova + iOS:不允许上传文件