Search code examples
swiftxcodexcode11

How to resolve NSAppleMusicUsageDescription error


I am currently running my app on my own device. The goal is to play songs saved locally in the Music App. I import MediaPlayer and try executing the following

            MPMediaLibrary.requestAuthorization { (status) in
                if status == .authorized {
                    print("authorized")
                }
            }

My Info.plist looks like the following

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>$(PRODUCT_NAME)</string>
    <key>CFBundlePackageType</key>
    <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>NSAppleMusicUsageDescription</key>
    <string>This app requires access to play music</string>
</dict>
</plist>

However, whenever I run the app on my device, it instantly crashes and gives me

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

What am I missing?


Solution

  • Turns out there are multiple instances of Info.plist...I was looking at the one under the directory, the one that was easy to spot.

    Instead you need to access the proper plist by going to Project Settings-> Info tab at the top. Add it there.