【问题标题】:iOS 10 App has crashed because it attempted to access privacy-sensitive dataiOS 10 应用程序因试图访问隐私敏感数据而崩溃
【发布时间】:2017-02-11 00:14:41
【问题描述】:
我正在运行我以前运行良好的项目,但在更新我的 xcode 后,我的应用程序崩溃并出现此错误:
此应用已崩溃,因为它试图在没有使用说明的情况下访问隐私敏感数据。应用的 Info.plist 必须包含一个 NSCameraUsageDescription 键和一个字符串值,向用户解释应用如何使用这些数据
【问题讨论】:
标签:
ios
cocoa-touch
ios10
【解决方案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。