33

I'm running my project which was working fine previously but after updating my xcode my app crashes and giving this error:

This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data

Eric Aya
  • 69,473
  • 35
  • 181
  • 253
Irfan
  • 4,301
  • 6
  • 29
  • 46

5 Answers5

43

Privacy Settings in iOS 10

A significant change in iOS 10 is that you must declare ahead of time any access to private data or your App will crash.

Once you link with iOS 10 you must declare access to any user private data types. You do this by adding a usage key to your app’s Info.plist together with a purpose string. The list of frameworks that count as private data is a long one

Contacts, Calendar, Reminders, Photos, Bluetooth Sharing, Microphone, Camera, Location, Health, HomeKit, Media Library, Motion, CallKit, Speech Recognition, SiriKit, TV Provider.

You need to put the NSCameraUsageDescription in your plist.

Like

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

for e.g

enter image description here

Check all the usage descriptions here.

Iulian Onofrei
  • 9,188
  • 10
  • 67
  • 113
Anbu.Karthik
  • 82,064
  • 23
  • 174
  • 143
5

I solved this problem on my simulator by adding the following entry in the info.plist

enter image description here

I havent tried above on real device using camera, I think for that you have to enter the following value as well,

enter image description here

I am using iOS 10.2

3stud1ant3
  • 3,586
  • 2
  • 12
  • 15
5

@Anbu's answer has an extra space which throws an exception. The Info.plist entry should look as follows

<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) uses camera</string>
Arunabh Das
  • 13,212
  • 21
  • 86
  • 109
2

My won't even prompt me. I inserted the SKAdNetworkItems key, and NSUserTrackingUsageDescription key. I also have multiple info.plist for localization which all of them I updated with the keys.

I ran ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in function and it's crashing. Crash log says: "This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSUserTrackingUsageDescription key with a string value explaining to the user how the app uses this data."

But I never received a prompt asking for tracking permission

    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)
    }
}
Andre V
  • 199
  • 2
  • 11
0

The new Privacy settings that are required if you build your apps with the iOS 10 SDK.A “Purpose String” MUST be provided in your Info.plist file if you’re accessing any of the privacy sensitive data.

A “Purpose String” is just a message explaining why does the app need to access that specific service that will be displayed to the user when requesting permission (just like we’re doing for the Location services since iOS 8). Not providing this “Purpose String” may cause your app to crash.

Siddharth Sunil
  • 233
  • 2
  • 10