Cocoa Keys

Cocoa and Cocoa Touch are the environments used to define apps that run in macOS, iOS, tvOS, and watchOS. The keys associated with the Cocoa environments provide support for Interface Builder nib files and provide support for other user-facing features vended by your bundle.

Cocoa keys use the prefix NS to distinguish them from other keys. For information about developing Cocoa Touch apps for iOS, see App Programming Guide for iOS. For information about developing Cocoa apps for macOS, see Cocoa Fundamentals Guide.

Key Summary Table 1 contains an alphabetical listing of Cocoa keys, the corresponding name for that key in the Xcode property list editor, a high-level description of each key, and the platforms on which you use it. Detailed information about each key is available in later sections. Table 1 Summary of Cocoa keys Key Xcode name Summary Platforms GCSupportedGameControllers (none) Specifies the types of game controllers allowed or required for your app. See GCSupportedGameControllers for details. tvOS 9.0 and later, iOS 7.0 and later, macOS 10.9 and later GCSupportsMultipleMicroGamepads (none) Specifies that the physical Apple TV Remote and the Apple TV Remote app should operate as separate game controllers. See GCSupportsMultipleMicroGamepads for details. tvOS GKGameCenterBadgingDisabled (none) Specifies whether your app is badged. See GKGameCenterBadgingDisabled for details. iOS 7.0 and later GKShowChallengeBanners (none) Specifies whether banners are shown within an app. See GKShowChallengeBannersfor details. iOS 7.0 and later NETestAppMapping (none) Enables testing of per-app VPN app extensions without using an MDM server. See NETestAppMapping for details. iOS 9.0 and later, macOS 10.11 and later NFCReaderUsageDescription "Privacy - NFC Reader Usage Description” Specifies the reason for your app to use the device’s NFC reader. See NFCReaderUsageDescription for details. iOS 11 and later NSAppleMusicUsageDescription “Privacy - Media Library Usage Description” Specifies the reason for your app to use the media library. See NSAppleMusicUsageDescription for details. iOS NSAppleScriptEnabled “Scriptable” Specifies whether AppleScript is enabled. See NSAppleScriptEnabled for details. macOS NSAppTransportSecurity (none) Specifies changes to the default strong security for HTTP connections in iOS and macOS apps and app extensions. See NSAppTransportSecurity for details. iOS 9.0 and later, macOS 10.11 and later NSBluetoothPeripheralUsageDescription “Privacy - Bluetooth Peripheral Usage Description” Specifies the reason for your app to use Bluetooth. See NSBluetoothPeripheralUsageDescription for details. iOS 6.0 and later NSCalendarsUsageDescription “Privacy - Calendars Usage Description” Specifies the reason for your app to access the user’s calendars. See NSCalendarsUsageDescription for details. iOS 6.0 and later NSCameraUsageDescription “Privacy - Camera Usage Description” Specifies the reason for your app to access the device’s camera. See NSCameraUsageDescription for details. iOS 7.0 and later NSContactsUsageDescription “Privacy - Contacts Usage Description” Specifies the reason for your app to access the user’s contacts. See NSContactsUsageDescription for details. iOS 6.0 and later, OS X v10.8 and later NSDockTilePlugIn ”Dock Tile Plugin path” Specifies the name of app’s Dock tile plug-in, if present. See NSDockTilePlugIn for details. macOS NSFaceIDUsageDescription "Privacy - Face ID Usage Description” Specifies the reason for your app to use Face ID. See NSFaceIDUsageDescription for details. iOS 11 and later NSHealthClinicalHealthRecordsShareUsageDescription (none) Specifies text that provides justification for accessing a user’s clinical health records. See NSHealthClinicalHealthRecordsShareUsageDescription for details. iOS 12.0 and later NSHealthRequiredReadAuthorizationTypeIdentifier (none) Specifies an array of HealthKit type identifiers. See NSHealthRequiredReadAuthorizationTypeIdentifier for details. iOS 12.0 and later NSHealthRequiredWriteAuthorizationTypeIdentifiers (none) Specifies an array of HealthKit type identifiers. See NSHealthRequiredWriteAuthorizationTypeIdentifiers for details. iOS 12.0 and later NSHealthShareUsageDescription "Privacy - Health Share Usage Description” Specifies the reason for your app to read the user’s health data. See NSHealthShareUsageDescription for details. iOS 8.0 and later NSHealthUpdateUsageDescription "Privacy - Health Update Usage Description” Specifies the reason for your app to make changes to the user’s health data. See NSHealthUpdateUsageDescription for details. iOS 8.0 and later NSHomeKitUsageDescription “Privacy - HomeKit Usage Description” Specifies the reason for your app to access the user’s HomeKit configuration data. See NSHomeKitUsageDescription for details. iOS, watchOS NSHumanReadableCopyright “Copyright (human-readable)” (Localizable) Specifies the copyright notice for the bundle. See NSHumanReadableCopyright for details. This key replaces the obsolete CFBundleGetInfoString key. macOS NSJavaNeeded “Cocoa Java application” Specifies whether the program requires a running Java VM. See NSJavaNeeded for details. macOS NSJavaPath “Java classpaths” An array of paths to classes whose components are preceded by NSJavaRoot . See NSJavaPath for details. macOS NSJavaRoot “Java root directory” The root directory containing the java classes. See NSJavaRoot for details. macOS NSLocationAlwaysUsageDescription “Privacy - Location Always Usage Description” Specifies the reason for your app to access the user’s location information at all times. See NSLocationAlwaysUsageDescription for details. iOS 8.0 and later, macOS 10.10 and later NSLocationUsageDescription “Privacy - Location Usage Description” Unused. Use NSLocationWhenInUseUsageDescription or NSLocationAlwaysUsageDescription instead. See NSLocationUsageDescription for details. iOS 6.0 and later, OS X v10.9 and later. Unused in iOS 8 and later. NSLocationWhenInUseUsageDescription “Privacy - Location When In Use Usage Description” Specifies the reason for your app to access the user’s location information while your app is in use. See NSLocationWhenInUseUsageDescription for details. iOS 8.0 and later, macOS 10.10 and later NSMainNibFile “Main nib file base name” The name of an app’s main nib file. See NSMainNibFile for details. iOS, macOS NSMicrophoneUsageDescription “Privacy - Microphone Usage Description” Specifies the reason for your app to access any of the device’s microphones. See NSMicrophoneUsageDescription for details. iOS 7.0 and later NSMotionUsageDescription “Privacy - Motion Usage Description” Specifies the reason for your app to access the device’s accelerometer. See NSMotionUsageDescription for details. iOS 7.0 and later NSPersistentStoreTypeKey “Core Data persistent store type” The type of Core Data persistent store associated with a persistent document type. See NSPersistentStoreTypeKey for details. macOS NSPhotoLibraryAddUsageDescription "Privacy - Photo Library Additions Usage Description” Specifies the reason for your app to get write-only access to the user’s photo library. See NSPhotoLibraryAddUsageDescription for details. iOS 11 and later NSPhotoLibraryUsageDescription “Privacy - Photo Library Usage Description” Specifies the reason for your app to access the user’s photo library. See NSPhotoLibraryUsageDescription for details. iOS 6.0 and later NSPrefPaneIconFile “Preference Pane icon file” The name of an image file resource used to represent a preference pane in the System Preferences app. See NSPrefPaneIconFile for details. macOS NSPrefPaneIconLabel “Preference Pane icon label” The name of a preference pane displayed beneath the preference pane icon in the System Preferences app. See NSPrefPaneIconLabel for details. macOS NSPrincipalClass “Principal class” The name of the bundle’s main class. See NSPrincipalClass for details. macOS NSRemindersUsageDescription “Privacy - Reminders Usage Description” Specifies the reason for your app to access the user’s reminders. See NSRemindersUsageDescription for details. iOS 6.0 and later NSServices “Services” An array of dictionaries specifying the services provided by an app. See NSServices for details. macOS NSSiriUsageDescription (none) Specifies the reason for your app to send user data to Siri. See NSSiriUsageDescription for details. iOS 10 and later NSSpeechRecognitionUsageDescription (none) Specifies the reason for your app to send user data to Apple’s speech recognition servers. See NSSpeechRecognitionUsageDescription for details. iOS NSSupportsAutomaticTermination (none) Specifies whether the app may be killed to reclaim memory. See NSSupportsAutomaticTermination for details. OS X v10.7 and later NSSupportsPurgeableLocalStorage (none) Declares that the app can depend on nonlocal storage for user data. See NSSupportsPurgeableLocalStorage for details. iOS 9.3 and later NSSupportsSuddenTermination (none) Specifies whether the app may be killed to allow for faster shut down or log out operations. See NSSupportsSuddenTermination for details. macOS NSUbiquitousContainer (none) Specifies the iCloud Drive settings for each container. See NSUbiquitousContainers for details. iOS, macOS NSUbiquitousContainerIsDocumentScopePublic (none) Specifies whether the iCloud Drive should share the contents of this container. See NSUbiquitousContainerIsDocumentScopePublic for details. iOS, macOS NSUbiquitousContainerName (none) Specifies the name that the iCloud Drive displays for your container. See NSUbiquitousContainerName for details. iOS, macOS NSUbiquitousContainerSupportedFolderLevels (none) Specifies the maximum number of folder levels inside your container’s Documents directory. See NSUbiquitousContainerSupportedFolderLevels for details. iOS, macOS NSUbiquitousDisplaySet (none) Specifies the mobile document data that the app can view. See NSUbiquitousDisplaySet for details. iOS, macOS NSUserActivityTypes (none) Specifies the user activity types that the app supports. See NSUserActivityTypes for details. iOS, macOS NSUserNotificationAlertStyle (none) Specifies whether the notification style should be banner , alert , or none . The default value is banner , which is the recommended style. See NSUserNotificationAlertStyle for details. macOS NSVideoSubscriberAccountUsageDescription “Privacy - TV Provider Usage Description” Specifies the reason for your app to access the user’s TV provider account. See NSVideoSubscriberAccountUsageDescription for details. tvOS UTExportedTypeDeclarations “Exported Type UTIs” An array of dictionaries specifying the UTI-based types supported (and owned) by the app. See UTExportedTypeDeclarations for details. iOS 5.0 and later, OS X v10.7 and later UTImportedTypeDeclarations “Imported Type UTIs” An array of dictionaries specifying the UTI-based types supported (but not owned) by the app. See UTImportedTypeDeclarations for details. iOS, macOS

GCSupportedGameControllers GCSupportedGameControllers ( array (dictionary (string : string)) - tvOS, iOS, and macOS) Optional key, used only during the App Store submission process, that specifies the types of game controllers allowed or required for your app. The value for this key is an array. Each array element is a dictionary whose key string is “ ProfileName ” and whose value string is one of the following: Gamepad - Specifies the standard gamepad, supported in iOS 7.0 and later only, corresponding to a formfitting controller for an iOS device with a limited set of controls. Used with the GCGamepad class.

ExtendedGamepad - Specifies the extended gamepad, supported in tvOS 9.0 and later, iOS 7.0 and later, macOS 10.9 and later, and corresponding to either a formfitting controller for an iOS device or a standalone controller for iOS, macOS, or tvOS with an extended set of controls. Used with the GCExtendedGamepad class.

MicroGamepad - Specifies the micro gamepad, supported in tvOS 9.0 and later, and corresponding to a Siri Remote or the Apple TV Remote app running on a connected iOS device. Used with the GCMicroGamepad class. Supported in tvOS 9.0 and later, iOS 7.0 and later, macOS v10.9 and later.

GCSupportsMultipleMicroGamepads GCSupportsMultipleMicroGamepads ( Boolean - tvOS). Specifies that the Apple TV Siri Remote and devices running the Apple TV Remote app should each operate as a discrete game controller. Default value is NO , indicating that input from all connected remotes is unified. Specifically, in a Game Controller framework-based tvOS app that uses a value of NO for this key, all connected remotes are routed to a single GCController object in your app. When a user presses the A button on the Siri Remote, for example, the same in-app action is invoked as if they had pressed the A button on any connected Apple TV Remote app on a device. If you instead specify a value of YES for this key, your tvOS app employs an independent GCController object for each connected remote. Supported in tvOS 10.0 and later.

GKGameCenterBadgingDisabled GKGameCenterBadgingDisabled ( Boolean - iOS). This key determines if badges are added to your turn based app icon. Set the value of this key to YES to opt out of badging. Defaults to NO .

GKShowChallengeBanners GKShowChallengeBanners ( Boolean - iOS). This key determines if challenge banners are displayed within an app. Set the value of this key to YES to show challenge banners in the app. Set the value to NO to suppress challenge-related banners.

NETestAppMapping NETestAppMapping ( Dictionary - iOS, macOS) Use this key only during development and testing to help you create a per-app VPN app extension. By using this key, you can test per-app VPN communication without the use of a mobile device management (MDM) server. For more information, refer to NETunnelProviderManager Class Reference. Important: The NETestAppMapping key can be used only to create app rules in apps that are signed with a Development provisioning profile. In an app signed with a Distribution provisioning profile, this key has no effect. In addition, the App Store rejects any app with this key defined in its Info.plist file.

NFCReaderUsageDescription NFCReaderUsageDescription ( String - iOS). This key lets you describe the reason your app accesses the device’s NFC reader. Important: To protect user privacy, an iOS app that links on or after iOS 11 and that accesses the device’s NFC reader must statically declare the intent to do so. Include the NFCReaderUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the NFC reader without a corresponding purpose string, your app exits. This key is supported in iOS 11 and later.

NSAppleMusicUsageDescription NSAppleMusicUsageDescription ( String - iOS). This key lets you describe the reason your app accesses the user’s media library. When the system prompts the user to allow access, the value that you provide for this key is displayed as part of the alert. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses the media library, must statically declare the intent to do so. Include the NSAppleMusicUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the media library without a corresponding purpose string, your app exits. This key is supported in iOS 10 and later and in macOS 10.12 and later.

NSAppleScriptEnabled NSAppleScriptEnabled ( Boolean or String - macOS). This key identifies whether the app is scriptable. Set the value of this key to YES (when typed as Boolean ) or "YES" (when typed as String ) if your app supports AppleScript.

NSBluetoothPeripheralUsageDescription NSBluetoothPeripheralUsageDescription ( String - iOS) This key lets you describe the reason your app uses Bluetooth. When the system prompts the user to allow usage, the value that you provide for this key is displayed as part of the alert. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses the Bluetooth interface, must statically declare the intent to do so. Include the NSBluetoothPeripheralUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the Bluetooth interface without a corresponding purpose string, your app exits. This key is supported in iOS 6.0 and later.

NSCalendarsUsageDescription NSCalendarsUsageDescription ( String - iOS) This key lets you describe the reason your app accesses the user’s calendars. When the system prompts the user to allow access, this string is displayed as part of the alert. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses the user’s calendars, must statically declare the intent to do so. Include the NSCalendarsUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the user’s calendars without a corresponding purpose string, your app exits. This key is supported in iOS 6.0 and later.

NSCameraUsageDescription NSCameraUsageDescription ( String - iOS) describes the reason that the app (including an iMessage app) accesses the device’s camera. When the system prompts the user to allow access, this string is displayed as part of the alert. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses the device’s camera, must statically declare the intent to do so. Include the NSCameraUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the device’s camera without a corresponding purpose string, your app exits. This key is supported in iOS 7.0 and later.

NSContactsUsageDescription NSContactsUsageDescription ( String - iOS) The key lets you describe the reason your app accesses the user’s contacts. When the system prompts the user to allow access, this string is displayed as part of the alert. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses the user’s contacts, must statically declare the intent to do so. Include the NSContactsUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the user’s contacts without a corresponding purpose string, your app exits. This key is supported in iOS 6.0 and later.

NSDockTilePlugIn NSDockTilePlugIn ( String - macOS). This key contains the name of a plug-in bundle with the .docktileplugin filename extension and residing in the app’s Contents/PlugIns directory. The bundle must contain the Dock tile plug-in for the app. For information about creating a Dock tile plug-in, see Dock Tile Programming Guide .

NSFaceIDUsageDescription NSFaceIDUsageDescription ( String - iOS). This key lets you describe the reason your app uses Face ID. Important: To protect user privacy, an iOS app that links on or after iOS 11 and that would access Face ID if the hardware supports it, must statically declare the intent to do so. Include the NSFaceIDUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access Face ID without a corresponding purpose string, your app may exit. This key is supported in iOS 11 and later.

NSHealthClinicalHealthRecordsShareUsageDescription NSHealthClinicalHealthRecordsShareUsageDescription ( String - iOS). This key contains a string that is displayed in an authorization prompt when your app requests access to the user’s clinical records. This string should provide justification for accessing these records. This key is supported in iOS 12.0 and later.

NSHealthRequiredReadAuthorizationTypeIdentifier NSHealthRequiredReadAuthorizationTypeIdentifier ( Array - iOS). This key must contain an array of three or more HealthKit type identifiers. If the user does not authorize permission for all the required types, authorization fails with a HKErrorRequiredAuthorizationDenied error. This key is supported in iOS 12.0 and later.

NSHealthRequiredWriteAuthorizationTypeIdentifiers NSHealthRequiredWriteAuthorizationTypeIdentifiers ( Array - iOS). This key must contain an array of three or more HealthKit type identifiers. If the user does not authorize permission for all the required types, authorization fails with a HKErrorRequiredAuthorizationDenied error. This key is supported in iOS 12.0 and later.

NSHealthShareUsageDescription NSHealthShareUsageDescription ( String - iOS). This key lets you describe the reason your app reads the user’s health data. The system prompts the user to allow access when you call the requestAuthorizationToShareTypes:readTypes:completion: method, and this string is displayed as part of the alert. For more information, read HKHealthStore Class Reference and Setting Up HealthKit. This string is localizable. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that reads the user’s health data, must statically declare the intent to do so. Include the NSHealthShareUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to read the user’s health data without a corresponding purpose string, your app exits. This key is supported in iOS 8.0 and later.

NSHealthUpdateUsageDescription NSHealthUpdateUsageDescription ( String - iOS). This key lets you describe the reason your app makes changes to the user’s health data. The system prompts the user to allow access when you call the requestAuthorizationToShareTypes:readTypes:completion: method, and this string is displayed as part of the alert. For more information, read HKHealthStore Class Reference and Setting Up HealthKit. This string is localizable. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that reads the user’s health data, must statically declare the intent to do so. Include the NSHealthUpdateUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to change the user’s health data without a corresponding purpose string, your app exits. This key is supported in iOS 8.0 and later.

NSHomeKitUsageDescription NSHomeKitUsageDescription ( String - iOS, watchOS). This key lets you describe the reason your app access the user’s HomeKit configuration data. When the system prompts the user to allow access, this string is displayed as part of the alert. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses user’s HomeKit configuration data, must statically declare the intent to do so. Include the NSHomeKitUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to change the user’s HomeKit configuration data without a corresponding purpose string, your app exits.

NSHumanReadableCopyright NSHumanReadableCopyright ( String - macOS). This key contains a string with the copyright notice for the bundle; for example, © 2016, My Company . You can load this string and display it in an About dialog box. The system uses this string in the app’s Info window in Finder. This key can be localized by including it in your InfoPlist.strings files. This key replaces the obsolete CFBundleGetInfoString key. See also CFBundleShortVersionString.

NSJavaNeeded NSJavaNeeded ( Boolean or String - macOS). This key specifies whether the Java VM must be loaded and started up prior to executing the bundle code. This key is required only for Cocoa Java apps to tell the system to launch the Java environment. If you are writing a pure Java app, do not include this key. You can also specify a string type with the value “YES” instead of a Boolean value if desired. Deprecated in OS X v10.5.

NSJavaPath NSJavaPath ( Array - macOS). This key contains an array of paths. Each path points to a Java class. The path can be either an absolute path or a relative path from the location specified by the key NSJavaRoot. The development environment (or, specifically, its jamfiles) automatically maintains the values in the array. Deprecated in OS X v10.5.

NSJavaRoot NSJavaRoot ( String - macOS). This key contains a string identifying a directory. This directory represents the root directory of the app’s Java class files.

NSLocationAlwaysUsageDescription NSLocationAlwaysUsageDescription ( String - iOS) This key lets you describe the reason your app accesses the user’s location information at all times. Include this key when your app uses location services in a potentially nonobvious way while running in the foreground or the background. For example, a social app might include this key when it uses location information to track the user’s location and display other users that are nearby. In this case, the fact that the app is tracking the user’s location might not be readily apparent. The system includes the value of this key in the alert panel displayed to the user when requesting permission to use location services. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses the user’s location information, must statically declare the intent to do so. Include the NSLocationAlwaysUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the user’s location information without a corresponding purpose string, your app exits. This key is required when you use the requestAlwaysAuthorization method of the CLLocationManager class to request authorization for location services. If this key is not present and you call the requestAlwaysAuthorization method, the system ignores your request and prevents your app from using location services. This key is supported in iOS 8.0 and later.

NSLocationUsageDescription NSLocationUsageDescription ( String - iOS) Unused in iOS 8 and later. If you link your app on or after iOS 8, use the NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription key instead. This key lets you describe the reason your app accesses the user’s location information. When the system prompts the user to allow access, this string is displayed as part of the alert panel. This key is supported in iOS 6.0 through iOS 7. This key is ignored in iOS 8 and later.

NSLocationWhenInUseUsageDescription NSLocationWhenInUseUsageDescription ( String - iOS) This key lets you describe the reason your app accesses the user’s location information while your app runs in the foreground and otherwise when in use. Include this key when your app uses location services to track the user’s current location directly. This key does not support using location services to monitor regions or monitor the user’s location using the significant location change service. The system includes the value of this key in the alert panel displayed to the user when requesting permission to use location services. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses the user’s location information, must statically declare the intent to do so. Include the NSLocationWhenInUseUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the user’s location information without a corresponding purpose string, your app exits. This key is required when you use the requestWhenInUseAuthorization method of the CLLocationManager class to request authorization for location services. If the key is not present when you call the requestWhenInUseAuthorization method without including this key, the system ignores your request. This key is supported in iOS 8.0 and later.

NSMainNibFile NSMainNibFile ( String - iOS, macOS). This key contains a string with the name of the app’s main nib file (minus the .nib extension). A nib file is an Interface Builder archive containing the description of a user interface along with any connections between the objects of that interface. The main nib file is automatically loaded when an app is launched. This key is mutually exclusive with the UIMainStoryboardFile key. You should include one of the keys in your Info.plist file but not both.

NSMicrophoneUsageDescription NSMicrophoneUsageDescription ( String - iOS) This key lets you describe the reason your app (including an iMessage app) accesses any of the device’s microphones. When the system prompts the user to allow access, this string is displayed as part of the alert. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses any of the device’s microphones, must statically declare the intent to do so. Include the NSMicrophoneUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access any of the device’s microphones without a corresponding purpose string, your app exits. This key is supported in iOS 7.0 and later.

NSMotionUsageDescription NSMotionUsageDescription ( String - iOS) This key lets you describe the reason your app accesses the device’s accelerometer. When the system prompts the user to allow access, this string is displayed as part of the alert. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses the device’s accelerometer, must statically declare the intent to do so. Include the NSMotionUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the device’s accelerometer without a corresponding purpose string, your app exits. This key is supported in iOS 7.0 and later.

NSPersistentStoreTypeKey NSPersistentStoreTypeKey ( String - macOS). This key contains a string that specifies the type of Core Data persistent store associated with a document type (see CFBundleDocumentTypes).

NSPhotoLibraryAddUsageDescription NSPhotoLibraryAddUsageDescription ( String - iOS) This key lets you describe the reason your app seeks write-only access to the user’s photo library. When the system prompts the user to allow access, this string is displayed as part of the alert. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses the user’s photo library, must statically declare the intent to do so. Include the NSPhotoLibraryAddUsageDescription key (in apps that link on or after iOS 11) or NSPhotoLibraryUsageDescription key in your app’s Info.plist file and provide a purpose string for the key. If your app attempts to access the user’s photo library without a corresponding purpose string, your app exits. This key is supported in iOS 11.0 and later.

NSPhotoLibraryUsageDescription NSPhotoLibraryUsageDescription ( String - iOS) This key lets you describe the reason your app accesses the user’s photo library. When the system prompts the user to allow access, this string is displayed as part of the alert. Although this keys governs read and write access to the user’s photo library, it’s best to use NSPhotoLibraryAddUsageDescription if your app needs only to add assets to the library and does not need to read any assets. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses the user’s photo library, must statically declare the intent to do so. Include the NSPhotoLibraryUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the user’s photo library without a corresponding purpose string, your app exits. This key is supported in iOS 6.0 and later.

NSPrefPaneIconFile NSPrefPaneIconFile ( String - macOS). This key contains a string with the name of an image file (including extension) containing the preference pane’s icon. This key should only be used by preference pane bundles. The image file should contain an icon 32 by 32 pixels in size. If this key is omitted, the System Preferences app looks for the image file using the CFBundleIconFile key instead.

NSPrefPaneIconLabel NSPrefPaneIconLabel ( String - macOS). This key contains a string with the name of a preference pane. This string is displayed below the preference pane’s icon in the System Preferences app. You can split long names onto two lines by including a newline character (‘

’) in the string. If this key is omitted, the System Preferences app gets the name from the CFBundleName key. This key can be localized and included in the InfoPlist.strings files of a bundle.

NSPrincipalClass NSPrincipalClass ( String - macOS). This key contains a string with the name of a bundle’s principal class. This key is used to identify the entry point for dynamically loaded code, such as plug-ins and other dynamically-loaded bundles. The principal class of a bundle typically controls all other classes in the bundle and mediates between those classes and any classes outside the bundle. The class identified by this value can be retrieved using the principalClass method of NSBundle . For Cocoa apps, the value for this key is NSApplication by default.

NSRemindersUsageDescription NSRemindersUsageDescription ( String - iOS) This key lets you describe the reason your app accesses the user’s reminders. When the system prompts the user to allow access, this string is displayed as part of the alert. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses the user’s reminders, must statically declare the intent to do so. Include the NSRemindersUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the user’s reminders without a corresponding purpose string, your app exits. This key is supported in iOS 6.0 and later.

NSServices NSServices ( Array - macOS). This key contains an array of dictionaries specifying the services provided by the app. Table 4 lists the keys for specifying a service: Table 4 Keys for NSServices dictionaries Key Xcode name Type Description Platforms NSPortName “Incoming service port name” String This key specifies the name of the port your app monitors for incoming service requests. Its value depends on how the service provider app is registered. In most cases, this is the app name. For more information, see Services Implementation Guide. macOS NSMessage “Instance method name” String This key specifies the name of the instance method to invoke for the service. In Objective-C, the instance method must be of the form messageName:userData:error: . In Java, the instance method must be of the form messageName(NSPasteBoard,String) . macOS NSSendFileTypes (none) Array This key specifies an array of strings. Each string should contain a UTI defining a supported file type. Only UTI types are allowed; pasteboard types are not permitted. To specify pasteboard types, continue to use the NSSendTypes key. By assigning a value to this key, your service declares that it can operate on files whose type conforms to one or more of the given file types. Your service will receive a pasteboard from which you can read file URLs. Available in OS X v10.6 and later. For information on UTIs, see Uniform Type Identifiers Overview. macOS NSSendTypes “Send Types” Array This key specifies an optional array of data type names that can be read by the service. The NSPasteboard class description lists several common data types. You must include this key, the NSReturnTypes key, or both. In OS X v10.5 and earlier, this key is required. In OS X v10.6 and later, you should use the NSSendFileTypes key instead. macOS NSServiceDescription (none) String This key specifies a description of your service that is suitable for presentation to users. This description string may be long to give users adequate information about your service. To localize the menu item text, create a ServicesMenu.strings file for each localization in your bundle. This strings file should contain this key along with the translated description string as its value. For more information about creating strings files, see Resource Programming Guide. Available in OS X v10.6 and later. macOS NSRequiredContext (none) Dictionary or Array This key specifies a dictionary with the conditions under which your service is made available to the user. Alternatively, you can specify an array of dictionaries, each of which contains a set of conditions for enabling your service. See the discussion after this table for information about specifying the value of this key. Available in OS X v10.6 and later. macOS NSRestricted (none) Boolean Specifying a value of YES for this key prevents the service from being invoked by a sandboxed app. You should set the value to YES if your service performs privileged or potentially dangerous operations that would allow a sandboxed app to escape its containment. For example, you should set it to YES if your service executes arbitrary files or text strings as scripts, reads or writes any file specified by a path, or retrieves the contents of an arbitrary URL from the network on behalf of the client of the service. The default value for this key is false . Available in OS X v10.7 and later. macOS NSReturnTypes “Return Types” Array This key specifies an array of data type names that can be returned by the service. The NSPasteboard class description lists several common data types. You must include this key, the NSSendTypes key, or both. macOS NSMenuItem “Menu” Dictionary This key contains a dictionary that specifies the text to add to the Services menu. The only key in the dictionary is called default and its value is the menu item text. In OS X v10.5 and earlier, menu items must be unique. You can ensure a unique name by combining the app name with the command name and separating them with a slash character “ / ”. This effectively creates a submenu for your services. For example, Mail/Send would appear in the Services menu as a menu named Mail with an item named Send. Submenus are not supported (or necessary) in OS X v10.6 and later. If you specify a slash character in OS X v10.6 and later, the slash and any text preceding it are discarded. Instead, services with the same name are disambiguated by adding the app name in parenthesis after the menu item text. To localize the menu item text, create a ServicesMenu.strings file for each localization in your bundle. This strings file should contain the default key along with the translated menu item text as its value. For more information about creating strings files, see Resource Programming Guide. macOS NSKeyEquivalent “Menu key equivalent” Dictionary This key is optional and contains a dictionary with the keyboard equivalent used to invoke the service menu command. Similar to NSMenuItem , the only key in the dictionary is called default and its value is a single character. Users invoke this keyboard equivalent by pressing the Command modifier key along with the character. The character is case sensitive, so you can assign different commands to the uppercase and lowercase versions of a character. To specify the uppercase character, the user must press the Shift key in addition to the other keys. macOS NSUserData “User Data” String This key is an optional string that contains a value of your choice. macOS NSTimeout “Timeout value (in milliseconds)” String This key is an optional numerical string that indicates the number of milliseconds Services should wait for a response from the app providing a service when a response is required. macOS In OS X v10.6 and later, the NSRequiredContext key may contain a dictionary or an array of dictionaries describing the conditions under which the service appears in the Services menu. If you specify a single dictionary, all of the conditions in that dictionary must be met for the service to appear. If you specify an array of dictionaries, all of the conditions in only one of those dictionaries must be met for the service to appear. Each dictionary may contain one or more of the keys listed in Table 5. All keys in the dictionary are optional. Table 5 Contents of the NSRequiredContext dictionary Key Xcode name Type Description Platform NSApplicationIdentifier (none) String or Array The value of this key is a string or an array of strings, each of which contains the bundle ID ( CFBundleIdentifier key) of an app. Your service appears only if the bundle ID of the current app matches one of the specified values. macOS NSTextScript (none) String or Array The value of this key is a string or an array of strings, each of which contains a standard four-letter script tag, such as Latn or Cyrl . Your service appears only if the dominant script of the selected text matches one of the specified script values. macOS NSTextLanguage (none) String or Array The value of this key is a string or an array of strings, each of which contains a BCP-47 tag indicating the language of the desired text. Your service appears if the overall language of the selected text matches one of the specified values. Matching is performed using a prefix-matching scheme. For example, specifying the value en matches text whose full BCP-47 code is en-US , en-GB , or en-AU . macOS NSWordLimit (none) Number The value of this key is an integer indicating the maximum number of selected words on which the service can operate. For example, a service to look up a stock by ticker symbol might have a value of 1 because ticker symbols cannot contain spaces. macOS NSTextContext (none) String or Array The value of this key is a string or an array of strings, each of which contains one of the following values: URL , Date , Address , Email , or FilePath . The service is displayed only if the selected text contains data of a corresponding type. For example, if the selected text contained an HTTP-based link, the service would be displayed if the value of this key were set to URL . Note that all of the selected text is provided to the service-vending app, not just the parts found to contain the given data types. macOS For additional information about implementing services in your app, see Services Implementation Guide.

NSSiriUsageDescription NSSiriUsageDescription ( String - iOS) This key lets you describe the reason your app sends user data to Siri. The first time that your app explicitly requests access to Siri, the system displays this string as part of the alert. If the user’s first interaction with your app occurs in Siri itself, a default string may be used instead. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that accesses Siri, must statically declare the intent to do so. Include the NSSiriUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access Siri without a corresponding purpose string, your app exits.

NSSpeechRecognitionUsageDescription NSSpeechRecognitionUsageDescription ( String - iOS) This key lets you describe the reason your app sends user data to Apple’s speech recognition servers. When the system prompts the user to allow access, this string is displayed as part of the alert. Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and that sends user data to Apple’s speech recognition servers, must statically declare the intent to do so. Include the NSSpeechRecognitionUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to use Apple’s speech recognition service without a corresponding purpose string, your app exits.

NSSupportsAutomaticTermination NSSupportsAutomaticTermination ( Boolean - macOS). This key contains a Boolean value that indicates whether the app supports automatic termination in OS X v10.7 and later. Automatic termination allows an app that is running to be terminated automatically by the system when certain conditions apply. Primarily, the app can be terminated when it is hidden or does not have any visible windows and is not currently being used. The system may terminate such an app in order to reclaim the memory used by the app. An app may programmatically disable and reenable automatic termination support using the disableAutomaticTermination and enableAutomaticTermination methods of NSProcessInfo . The app might do this to prevent being terminated during a critical operation.

NSSupportsPurgeableLocalStorage NSSupportsPurgeableLocalStorage ( Boolean - iOS). This key contains a Boolean value that indicates whether the app is designed to work, without disruption to the user, with the local data container treated as a volatile cache by the system. The default value of this key is NO . If your app supports Shared iPad (a feature of iOS device management), set this key’s value to YES . When set to YES , the system is enabled to purge local storage, at the system’s discretion, when the user is logged out. Supporting Shared iPad entails different work depending on where your app chooses to store nonlocal user data, as follows: User data stored in iCloud is automatically restored by the system, as needed.

Nonlocal user data that is not stored in iCloud must be restored explicitly, by your app, from the app’s non-iCloud service. If your app uses only local storage and does not depend on its persistence (for example, a simple calculator app), you can declare support for Shared iPad by setting this key’s value to YES .

NSSupportsSuddenTermination NSSupportsSuddenTermination ( Boolean - macOS). This key contains a Boolean value that indicates whether the system may kill the app outright in order to log out or shut down more quickly. Use this key to specify whether the app can be killed immediately after launch. The app can still enable or disable sudden termination at runtime using the methods of the NSProcessInfo class. The default value of this key is NO .

NSUbiquitousContainers NSUbiquitousContainers ( Dictionary - iOS and macOS) Specifies the iCloud Drive settings for each container. This dictionary’s keys are the container identifiers for your app’s iCloud containers. The values are dictionaries containing the NSUbiquitousContainerIsDocumentScopePublic , NSUbiquitousContainerName and NSUbiquitousContainerSupportedFolderLevels entries for each container. You must specify the sharing permissions separately for each container.

NSUbiquitousContainerIsDocumentScopePublic NSUbiquitousContainerIsDocumentScopePublic ( Boolean - iOS and macOS) Specifies whether the iCloud drive should share the contents of this container. Defaults to NO .

NSUbiquitousContainerName NSUbiquitousContainerName ( String - iOS and macOS) Specifies the name that the iCloud Drive displays for your container. By default, the iCloud Drive will use the name of the bundle that owns the container.

NSUbiquitousContainerSupportedFolderLevels NSUbiquitousContainerSupportedFolderLevels ( String - iOS and macOS) Specifies the maximum number of folder levels inside your container’s Documents directory. This key can take three different values: None The iCloud Drive only has access to the container’s Documents directory. Your app promises that it does not create any directories inside the Document’s directory. In macOS, the Finder prevents users from creating subdirectories inside your iCloud Drive directory.

One The iCloud Drive has access to the container’s Documents directory and one additional layer of subdirectories. Your app promises that it only creates a single layer of directories inside the Documents directory. In macOS, the Finder prevents users from creating more than one layer of subdirectories inside your iCloud Drive directory.

Any The iCloud Drive has complete access to your container’s Documents directory. Both your app and the Finder can create as many layers of subdirectories as you (or the user) desire.

NSUbiquitousDisplaySet NSUbiquitousDisplaySet ( String - iOS, macOS) contains the identifier string that you configured in iTunesConnect for managing your app’s storage. The assigned display set determines from which mobile data folder (in the user’s mobile account) the app retrieves its data files. If you create multiple apps, you can use the same display set for your apps or assign different display sets to each. For example, if you create a “lite” version of your app, in addition to a full-featured version, you might use the same display set for both versions because they create and use the same basic data files. Each app should recognize the file types stored in its mobile data folder and be able to open them.

NSUserActivityTypes NSUserActivityTypes (Array of strings - iOS and macOS) Specifies the user activity types that the app supports. This key is valid in iOS 8 and macOS 10.10 and later.

NSUserNotificationAlertStyle NSUserNotificationAlertStyle ( String - macOS) specifies the notification style the app should use. The default value, banner , is recommended; most apps should not need to use the alert style.

NSVideoSubscriberAccountUsageDescription NSVideoSubscriberAccountUsageDescription ( String - tvOS). This key lets you describe the reason your app access the user’s TV provider account. When the system prompts the user to allow access, this string is displayed as part of the alert. Important: To protect user privacy, a tvOS app linked on or after tvOS 10.0, and that accesses user’s TV provider account, must statically declare the intent to do so. Include the NSVideoSubscriberAccountUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the user’s TV provider account without a corresponding purpose string, your app exits.

UTExportedTypeDeclarations UTExportedTypeDeclarations ( Array - iOS, macOS) declares the uniform type identifiers (UTIs) owned and exported by the app. You use this key to declare your app’s custom data formats and associate them with UTIs. Exporting a list of UTIs is the preferred way to register your custom file types; however, Launch Services recognizes this key and its contents only in OS X v10.5 and later. This key is ignored on versions of OS X prior to version 10.5. The value for the UTExportedTypeDeclarations key is an array of dictionaries. Each dictionary contains a set of key-value pairs identifying the attributes of the type declaration. Table 6 lists the keys you can include in this dictionary along with the typical values they contain. These keys can also be included in array of dictionaries associated with the UTImportedTypeDeclarations key. Table 6 UTI property list keys Key Xcode name Type Description Platforms UTTypeConformsTo “Conforms to UTIs” Array (Required) Contains an array of strings. Each string identifies a UTI to which this type conforms. These keys represent the parent categories to which your custom file format belongs. For example, a JPEG file type conforms to the public.image and public.data types. For a list of high-level types, see Uniform Type Identifiers Overview. iOS, macOS UTTypeDescription “Description” String A user-readable description of this type. The string associated with this key may be localized in your bundle’s InfoPlist.strings files. iOS, macOS UTTypeIconFile “Icon file name” String The name of the bundle icon resource to associate with this UTI. You should include this key only for types that your app exports. This file should have a .icns filename extension. You can create this file using the Icon Composer app that comes with Xcode Tools. macOS UTTypeIdentifier “Identifier” String (Required) The UTI you want to assign to the type. This string uses the reverse-DNS format, whereby more generic types come first. For example, a custom format for your company would have the form com.<yourcompany>.<type>.<subtype> . iOS, macOS UTTypeReferenceURL “Reference URL” String The URL for a reference document that describes this type. macOS UTTypeTagSpecification “Equivalent Types” Dictionary (Required) A dictionary defining one or more equivalent type identifiers. The key-value pairs listed in this dictionary identify the filename extensions, MIME types, OSType codes, and pasteboard types that correspond to this type. For example, to specify filename extensions, you would use the key public.filename-extension and associate it with an array of strings containing the actual extensions. For more information about the keys for this dictionary, see Uniform Type Identifiers Overview. iOS, macOS The way you specify icon files in macOS and iOS is different because of the supported file formats on each platform. In iOS, each icon resource file is typically a PNG file that contains only one image. Therefore, it is necessary to specify different image files for different icon sizes. However, when specifying icons in macOS, you use an icon file (with extension .icns ), which is capable of storing the icon at several different resolutions. This key is supported in iOS 3.2 and later and in OS X v10.5 and later. For more information about UTIs and their use, see Uniform Type Identifiers Overview.

UTImportedTypeDeclarations UTImportedTypeDeclarations ( Array - iOS, macOS) declares the uniform type identifiers (UTIs) inherently supported (but not owned) by the app. You use this key to declare any supported types that your app recognizes and wants to ensure are recognized by Launch Services, regardless of whether the app that owns them is present. For example, you could use this key to specify a file format that is defined by another company but which your program can read and export. The value for this key is an array of dictionaries and uses the same keys as those for the UTExportedTypeDeclarations key. For a list of these keys, see Table 6. This key is supported in iOS 3.2 and later and in OS X v10.5 and later. For more information about UTIs and their use, see Uniform Type Identifiers Overview.