Already a NinjaOne customer? Log in to view more guides and the latest updates.

NinjaOne Apple MDM: Custom Payload Examples

Topic

This article shows examples of custom payloads for NinjaOne Mobile Device Management (MDM) devices that can be used to add a mobile configuration to a NinjaOne policy and configure settings not available directly in NinjaOne.

Environment

  • NinjaOne Mobile Device Management (MDM)
  • Apple iOS
  • Apple iPadOS
  • Apple macOS

Description

Technicians with the appropriate MDM permissions can use custom payloads for Apple MDM devices to add a mobile configuration to a NinjaOne policy and configure settings not available directly in the NinjaOne UI.

Select a category to learn more:

Standard Format for Mobile Configuration Files

You will use mobile configuration files to create custom payloads, and Apple documentation defines the required top-level keys for these file types. Refer to TopLevel | Apple Developer Documentation (external link) for more information.

The following example shows the required keys and format for each Apple MDM mobileconfig file:

<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
…
</array>
<key>PayloadDisplayName</key>
<string>Profile Name</string>
<key>PayloadIdentifier</key>
<string>Profile.2DE4CC74-A880-402D-A9CF-6665C87FE12E</string>
<key>PayloadUUID</key>
<string>2DE4CC74-A880-402D-A9CF-6665C87FE12E</string>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>

This structure contains several required fields:

FieldDescription
PayloadContentThis array of dictionaries defines each configuration payload sent to the device. Each mobileconfig must have a minimum of one payload dictionary defined within the PayloadContent array.
PayloadDisplayNameThis is the name of the payload.
PayloadIdentifierThis identifier is unique among all MDM payloads sent to each device. A common practice is to use the format [Name].[UUID]. If you attempt to install two payloads with the same identifier on a device, the second payload will typically fail to install.
PayloadUUID

Use a unique Globally Unique Identifier (GUID) format string among all MDM payloads sent to each device. On a macOS, you can use the following command in Terminal to generate a random Universally Unique Identifier (UUID).

uuidgen
PayloadTypeThis is a string that matches the payload's type. This field should always use the value Configuration or must match one of Apple’s defined payload types.
PayloadVersionThis is the payload version. You can update a payload without incrementing this field.
After you define the custom payload in a policy, you cannot change the PayloadIdentifier and PayloadUUID values. If you need to modify these values, you must first define a new custom payload and delete the old one.

The dictionaries within the PayloadContent array also have a very specific structure. You must include certain standard keys in each dictionary and keys unique to each PayloadType. Refer to Apple developer documentation (external link) for more information. Refer to the following code block to use the standard keys:

<plist version="1.0">
<dict>
   <key>PayloadContent</key>
   <array>
      <dict>
         … {keys specific to the PayloadType} …
         <key>PayloadDisplayName</key>
         <string>Restriction</string>
         <key>PayloadIdentifier</key>
         <string>Restriction.63FBE224-B91A-4030-8D19-0D8D8883C4B7</string>
         <key>PayloadUUID</key>
         <string>63FBE224-B91A-4030-8D19-0D8D8883C4B7</string>
         <key>PayloadType</key>
         <string>com.apple.applicationaccess</string>
         <key>PayloadVersion</key>
         <integer>1</integer>
      </dict>
   </array>
   <key>PayloadDisplayName</key>
   <string>Profile Name</string>
   <key>PayloadIdentifier</key>
   <string>Profile.2DE4CC74-A880-402D-A9CF-6665C87FE12E</string>
   <key>PayloadUUID</key>
   <string>2DE4CC74-A880-402D-A9CF-6665C87FE12E</string>
   <key>PayloadType</key>
   <string>Configuration</string>
   <key>PayloadVersion</key>
   <integer>1</integer>
</dict>
</plist>

You must include the following fields for each dictionary within the PayloadContent array:

FieldDescription
PayloadDisplayNameThis is the human-readable name for the profile payload.
PayloadIdentifierThis identifier is unique among all MDM payloads sent to each device. A common practice is to use the format [Name].[UUID]. If you attempt to install two payloads with the same identifier on a device, the second payload will typically fail to install.
PayloadUUID

This GUID format string should be unique among all MDM payloads sent to each device. On a macOS, you can use the following command in Terminal to generate a random UUID.

uuidgen
PayloadTypeThis is a string that matches the payload's type. It should always have the value Configuration or must match one of Apple’s defined payload types. Refer to Profile-Specific Payload Keys | Apple Developer Documentation (external link) for more information about the defined payload types.
PayloadVersionThis is the payload version. You can update a payload without incrementing this field.

NinjaOne supports the following variables for custom payloads. NinjaOne will automatically replace the variable with the corresponding information from the device or assigned user:

VariableDescription
${device.location.name}This is the device's assigned location name value.
${device.location.id}This is the device's assigned location ID value.
${device.organization.name}This is the device's organization's name value.
${device.organization.id}This is the device's organization ID value.
${device.serialNumber}This is the device's serial number value.
${device.id}This is the device's GUID value (unique identifier).
${device.owner.email}This is the device's assigned user email address value.
${device.owner.firstName}This is the device's assigned user's first name value.
${device.owner.lastName}This is the device's assigned user's last name value.
${device.owner.displayName}This is the device's assigned user's display name value.

Payloads for iOS, iPadOS, and macOS

Notifications

You can use the Notifications payload to define the notification settings for one or more apps. Users cannot override these settings. Refer to Notifications | Apple Developer Documentation (external link) for more information.

You can modify the following keys to achieve your desired behavior:

KeyDescription
NotificationSettingsThis is an array of dictionaries, each defining the notification settings of an individual app. It contains all keys outside the top level. You can add more dictionaries to this key as needed to manage all desired apps. This field is required.
BundleIdentifierThis is the bundle ID of an individual app whose notification settings you manage. This field is required.
NotificationsEnabledThis Boolean field specifies whether notifications are turned on or off for this app. This field is required.
AlertTypeSet to 0 for None, 1 for Temporary Banner, and 2 for Persistent Banner.
BadgesEnabledSet whether badges are active.
CriticalAlertEnabledSet whether to allow critical alerts to override Do Not Disturb and ringer settings.
GroupingTypeSet to 0 for automatic grouping, 1 for grouping notifications from this app into a single group, and 2 for don’t group notifications.
PreviewTypeSet to 0 for Always show previews, 1 for only show previews when a device is unlocked, and 2 for never show previews.
ShowInCarPlaySet whether notifications show in CarPlay.
ShowInLockScreenSet whether to show notifications on the lock screen.
ShowInNotificationCenterShow notifications in the notification center.
SoundsEnabledActivate sounds for notifications.
<plist version="1.0">
<dict>
   <key>PayloadContent</key>
   <array>
      <dict>
         <key>NotificationSettings</key>
         <array>
            <dict>
               <key>BundleIdentifier</key>
               <string>com.ninjaone.assist</string>
               <key>NotificationsEnabled</key>
               <true/>
               <key>AlertType</key>
               <integer>2</integer>
               <key>BadgesEnabled</key>
               <true/>
               <key>CriticalAlertEnabled</key>
               <true/>
               <key>GroupingType</key>
               <integer>2</integer>
               <key>PreviewType</key>
               <integer>2</integer>
               <key>ShowInCarPlay</key>
               <true/>
               <key>ShowInLockScreen</key>
               <true/>
               <key>ShowInNotificationCenter</key>
               <true/>
               <key>SoundsEnabled</key>
               <true/>
           </dict>
           <dict>
               <key>BundleIdentifier</key>
               <string>com.apple.tips</string>
               <key>NotificationsEnabled</key>
               <false/>
           </dict>
        </array>
        <key>PayloadDisplayName</key>
        <string>Notifications</string>
        <key>PayloadIdentifier</key>
        <string>Notifications.8E87A542-1AF1-4DBF-B1FE-645044C84C64</string>
        <key>PayloadUUID</key>
        <string>8E87A542-1AF1-4DBF-B1FE-645044C84C64</string>
        <key>PayloadType</key>
        <string>com.apple.notificationsettings</string>
        <key>PayloadVersion</key>
        <integer>1</integer>
      </dict>
   </array>
   <key>PayloadDisplayName</key>
   <string>Notifications</string>
   <key>PayloadIdentifier</key>
   <string>Notifications.C10A32DE-C782-4374-8D67-968EC168DD7A</string>
   <key>PayloadUUID</key>
   <string>C10A32DE-C782-4374-8D67-968EC168DD7A</string>
   <key>PayloadType</key>
   <string>Configuration</string>
   <key>PayloadVersion</key>
   <integer>1</integer>
</dict>
</plist>

Certificates

There are a few payloads you can use to transfer certificates to a device, such as the CertificatePKCS12 or the CertificatePKCS1 payload.

Generally speaking, you will use the PKCS12 payload for certificates that also contain a private key (you will specify the password used to access the private key within the payload) and the PKCS1 payload for certificates without a private key, primarily to ensure the device trusts the specified certificates.

We provide examples of each payload in this section.

PKCS1 Certificate

Use for certificates that do not contain the private key. Note the following key:

KeyDescription
PayloadContentThis key contains the certificate file converted to base64. You can generate this key on a macOS with the command base64 -i {path_to_cert_file}.
<plist version="1.0">
<dict>
   <key>PayloadContent</key>
   <array>
      <dict>
         <key>PayloadContent</key>
         <data>
         LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFakNDQWZxZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFuTVJnd0ZnWURWUVFEREE5VVpYTjAKUTJWeWRHbG1hV05oZEdVeEN6QUpCZ05WQkFZVEFsVlRNQjRYRFRJMU1ESXlNREU1TkRVd05Wb1hEVEkyTURJeQpNREU1TkRVd05Wb3dKekVZTUJZR0ExVUVBd3dQVkdWemRFTmxjblJwWm1sallYUmxNUXN3Q1FZRFZRUUdFd0pWClV6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU1KNHdJS1BBVXlWVXgyandtZUoKU0lSa0VCOUFLQXN3c2VhMnFMWUNTQlhlcmRxZE5SdDArdmdaQnN5T1lwUEY4TXQ0SEdXVVF3OVNEQ2pLQUl3MQovaFl5MDFrZDgrTUsvdnlXcExSNnhxTDZRQTBKajhnVlVid0JxbDBVanlCb3BabW1wMlZWbTlyYTNtRGpnNEFiCkttQkFIZjhldkJPRFBEZ3RaTm01Snk3MVBBelM3N3B3YjFINU4rUURJQy9uV1NLcTBSUjlNbXZZaTMzZUlJcngKT0hiZEN5dlBGMzEwd2Z1WUM1cGhxcU5oOGRLTUw3SnR2RXZVNHlzSzJoa0loTXYxQUhiM1ZIQisybEFWdjNnOQpoQ3FPbjVNd1VKMzNWNEZHWDN4OXhlVnZCSWlTK3F5MXFKSEdvZVJFbmVVZmN1Z2xUU2pNb1lwVUVSRU84QTMwCjJ3a0NBd0VBQWFOSk1FY3dEZ1lEVlIwUEFRSC9CQVFEQWdXZ01CWUdBMVVkSlFFQi93UU1NQW9HQ0NzR0FRVUYKQndNQk1CMEdBMVVkRGdRV0JCUWh3M3JDVTg2SmhPWWwrdDFrNlF6eXlFcmFDVEFOQmdrcWhraUc5dzBCQVFzRgpBQU9DQVFFQVNRM1dwVTdnZHZhMW05cXk4TFZOUlIralMzdHFBOE02T24rYXBNeTVkT0ZNQ3pjTWNhV2J2c2lSCmNCYVQxdXhxeFJMRmRBTUNtTWs1dW1vTGp1c3FJYjVCcVJlUzJFUVRmYm5MeThSV0lsSjM1K0VuUWNDRW9JWUcKWUhIWDY5ZWh2bFlITExaQ01BK21hTVhVYTlVNURMcy9WNG9UdWllVGZMeE0xOXlOT0dIS0VTbWl0QWNseFl3YgpMTUJoTGY1dmVXOW12ak9jc2lKblc0eWU3MVBtWG5oK2RhWFhoZzFJU0lHeEsyTkFvZFRzWFpRNm5iN200ZHNpCjdGVDRwcFFRcTllQWNJS1dSN3pTSVJMenZ6Wm8rSkRPeTltbVYyZVpYTjhIOFA2UVdlUTRoZmM0QW5RWGsxR1IKZmRGYzhKeUtSVktFcUM4UlE0WGR5UXE3RC9jZ2tBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
         </data>
         <key>PayloadDisplayName</key>
         <string>CertificateP1</string>
         <key>PayloadIdentifier</key>
         <string>CertificateP1.95B82EE6-B86D-4F00-A152-7CE20F2E2CD4</string>
         <key>PayloadUUID</key>
         <string>95B82EE6-B86D-4F00-A152-7CE20F2E2CD4</string>
         <key>PayloadType</key>
         <string>com.apple.security.pkcs1</string>
         <key>PayloadVersion</key>
         <integer>1</integer>
      </dict>
   </array>
   <key>PayloadDisplayName</key>
   <string>CertificateP1</string>
   <key>PayloadIdentifier</key>
   <string>CertificateP1.33A95849-29DE-4F61-BBD5-D5D588B5D698</string>
   <key>PayloadUUID</key>
   <string>33A95849-29DE-4F61-BBD5-D5D588B5D698</string>
   <key>PayloadType</key>
   <string>Configuration</string>
   <key>PayloadVersion</key>
   <integer>1</integer>
</dict>
</plist>

PKCS12 Certificate

Use this payload for certificates that contain a private key and require a specified password to access it. Note the following keys:

KeyDescription
AllowAllAppsAccessIf true, the system allows apps to access the private key.
KeyIsExtractableIf true, the user can extract the private key from the keychain.
PasswordThis is the password you use to access the certificate's private key.
PayloadContentThis key contains the certificate file converted to base64. Generate this on a macOS with the command base64 -i {path_to_cert_file}.
<plist version="1.0">
<dict>
   <key>PayloadContent</key>
   <array>
      <dict>
         <key>AllowAllAppsAccess</key>
         <true />
         <key>KeyIsExtractable</key>
         <false />
         <key>Password</key>
         <string>ninjaone</string>
         <key>PayloadContent</key>
         <data>
         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
         </data>
         <key>PayloadDisplayName</key>
         <string>CertificateP12</string>
         <key>PayloadIdentifier</key>
         <string>CertificateP12.D1351A32-C4B8-4B6E-B225-51E1CCB2AB8A</string>
         <key>PayloadUUID</key>
         <string>D1351A32-C4B8-4B6E-B225-51E1CCB2AB8A</string>
         <key>PayloadType</key>
         <string>com.apple.security.pkcs12</string>
         <key>PayloadVersion</key>
         <integer>1</integer>
      </dict>
   </array>
   <key>PayloadDisplayName</key>
   <string>CertificateP12</string>
   <key>PayloadIdentifier</key>
   <string>CertificateP12.5530D661-D71D-4D04-8A79-4CB0F516D8EE</string>
   <key>PayloadUUID</key>
   <string>5530D661-D71D-4D04-8A79-4CB0F516D8EE</string>
   <key>PayloadType</key>
   <string>Configuration</string>
   <key>PayloadVersion</key>
   <integer>1</integer>
</dict>
</plist>

Payloads for iOS and iPadOS

Read the following subsections to learn about different custom payloads for iOS and iPadOS devices.

Kiosk mode (AppLock payload)

Use the AppLock payload to lock a device into a single app. Make sure to also deploy the app to the device in the NinjaOne policy, or else the device could be stuck in an unusable state until the AppLock payload is removed. Refer to AppLock | Apple Developer Documentation (external link) to learn more.

Note the following keys, which can be modified to achieve your desired behavior:

KeyDescription
IdentifierThis is the bundleID of the app you want to lock the device into. Make sure the app is deployed to the device.
OptionsThis is a dictionary of options that allow you to activate or deactivate various hardware behaviors or accessibility options.
UserEnabledOptionsBy using the Accessibility Shortcut on your device (press the lock button three times), you can allow the user to modify certain accessibility settings.
<plist version="1.0">
<dict>
   <key>PayloadContent</key>
   <array>
      <dict>
         <key>App</key>
         <dict>
            <key>Identifier</key>
            <string>com.ninjaone.assist</string>
            <key>Options</key>
            <dict>
               <key>DisableAutoLock</key>
               <false />
               <key>DisableDeviceRotation</key>
               <false />
               <key>DisableRingerSwitch</key>
               <false />
               <key>DisableSleepWakeButton</key>
               <false />
               <key>DisableTouch</key>
               <false />
               <key>DisableVolumeButtons</key>
               <false />
               <key>EnableAssistiveTouch</key>
               <false />
               <key>EnableInvertColors</key>
               <false />
               <key>EnableMonoAudio</key>
               <false />
               <key>EnableSpeakSelection</key>
               <false />
               <key>EnableVoiceOver</key>
               <false />
               <key>EnableZoom</key>
               <false />
               <key>EnableVoiceControl</key>
               <false />
            </dict>
            <key>UserEnabledOptions</key>
            <dict>
               <key>AssistiveTouch</key>
               <false />
               <key>InvertColors</key>
               <false />
               <key>VoiceOver</key>
               <false />
               <key>Zoom</key>
               <false />
               <key>VoiceControl</key>
               <false />
            </dict>
         </dict>
         <key>PayloadIdentifier</key>
         <string>com.apple.app.lock.0EB94448-30BA-4CDC-BB8D-6321F60F608E</string>
         <key>PayloadUUID</key>
         <string>0EB94448-30BA-4CDC-BB8D-6321F60F608E</string>
         <key>PayloadType</key>
         <string>com.apple.app.lock</string>
         <key>PayloadVersion</key>
         <integer>1</integer>
      </dict>
   </array>
   <key>PayloadDisplayName</key>
   <string>Kiosk</string>
   <key>PayloadIdentifier</key>
   <string>Kiosk.3E0C188E-AC9E-4AAF-AF4B-943F980B6480</string>
   <key>PayloadUUID</key>
   <string>3E0C188E-AC9E-4AAF-AF4B-943F980B6480</string>
   <key>PayloadType</key>
   <string>Configuration</string>
   <key>PayloadVersion</key>
   <integer>1</integer>
</dict>
</plist>

Web Clips

You can use the WebClip payload to add icons to the device home screen that link directly to a specified webpage. Refer to WebClip | Apple Developer Documentation (external link) to learn more.

Each dictionary within the PayloadContent array will configure an individual web clip, but you can define multiple dictionaries to configure multiple web clips. Note the following keys, which you can modify to achieve your desired behavior:

KeyDescription
LabelThis is the label for the icon that will appear on the device.
URLThis is the exact URL that the user will navigate to when they tap the icon.
IsRemovableThis key allows you to determine whether the user can remove the icon from the home screen.
FullScreenThis key allows you to determine whether the webpage should appear in full screen or the browser navigation menu should be visible.
TargetApplicationBundleIdentifierThis optional key lets you specify the bundleID of a browser to use to launch the web clip. If not included, the device will use the default browser.
Icon

This is a base64-encoded string containing the contents of an image file to use as the icon. The device will use a default “blank” icon if it is not included. On a macOS, you can generate this string using the following command in Terminal:

base64 -i {path_to_icon}
<plist version="1.0">
<dict>
   <key>PayloadContent</key>
   <array>
      <dict>
         <key>Label</key>
         <string>N1</string>
         <key>URL</key>
         <string>https://www.ninjaone.com</string>
         <key>IsRemovable</key>
         <false />
         <key>FullScreen</key>
         <true />
         <key>Icon</key>
         <data>
         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
         </data>
         <key>PayloadDisplayName</key>
         <string>N1</string>
         <key>PayloadIdentifier</key>
         <string>N1.E935A83C-30E0-4F4F-A04B-6CF1B900714D</string>
         <key>PayloadUUID</key>
         <string>E935A83C-30E0-4F4F-A04B-6CF1B900714D</string>
         <key>PayloadType</key>
         <string>com.apple.webClip.managed</string>
         <key>PayloadVersion</key>
         <integer>1</integer>
      </dict>
      <dict>
         <key>Label</key>
         <string>Apple</string>
         <key>URL</key>
         <string>https://www.apple.com</string>
         <key>IsRemovable</key>
         <false />
         <key>FullScreen</key>
         <true />
         <key>TargetApplicationBundleIdentifier</key>
         <string>com.apple.mobilesafari</string>
         <key>Icon</key>
         <data>
         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
         </data>
         <key>PayloadDisplayName</key>
         <string>Apple</string>
         <key>PayloadIdentifier</key>
         <string>Apple.D06CCEE5-DD8A-4E00-B6C4-D8F8C64F54E2</string>
         <key>PayloadUUID</key>
         <string>D06CCEE5-DD8A-4E00-B6C4-D8F8C64F54E2</string>
         <key>PayloadType</key>
         <string>com.apple.webClip.managed</string>
         <key>PayloadVersion</key>
         <integer>1</integer>
      </dict>
   </array>
   <key>PayloadDisplayName</key>
   <string>WebClips</string>
   <key>PayloadIdentifier</key>
   <string>WebClips.013CE3FD-8844-4334-9506-2EF8693E6C56</string>
   <key>PayloadUUID</key>
   <string>013CE3FD-8844-4334-9506-2EF8693E6C56</string>
   <key>PayloadType</key>
   <string>Configuration</string>
   <key>PayloadVersion</key>
   <integer>1</integer>
</dict>
</plist>

Browser Allowlist

You can use the WebContentFilter payload to define an allowlist that contains all the websites accessible via an Internet browser. In the native Safari browser, these websites will also appear in Favorites. If you allow a domain, the subdomains and subpages are accessible by default. Refer to WebContentFilter | Apple Developer Documentation (external link) to learn more.

Note the following keys, which you can modify to achieve your desired behavior:

KeyDescription
FilterTypeAlways set this key to BuiltIn.
AllowListThis is an array of dictionaries, each specifying a webpage that the device can access through the Internet browser. Each dictionary contains a title (used for the Favorite tab in Safari) and the actual URL. You can specify subdomains for the URL, but you are not required to do so. You can add dictionaries as needed.
<plist version="1.0">
<dict>
   <key>PayloadContent</key>
   <array>
      <dict>
         <key>FilterType</key>
         <string>BuiltIn</string>
         <key>AllowListBookmarks</key>
         <array>
            <dict>
               <key>Title</key>
               <string>NinjaOne</string>
               <key>URL</key>
               <string>ninjaone.com</string>
            </dict>
            <dict>
               <key>Title</key>
               <string>Apple</string>
               <key>URL</key>
               <string>apple.com</string>
            </dict>
         </array>
         <key>PayloadDisplayName</key>
         <string>Allowlist</string>
         <key>PayloadIdentifier</key>
         <string>Allowlist.8ADB4E90-A490-4C8E-BBFE-0DE3BD923923</string>
         <key>PayloadUUID</key>
         <string>8ADB4E90-A490-4C8E-BBFE-0DE3BD923923</string>
         <key>PayloadType</key>
         <string>com.apple.webcontent-filter</string>
         <key>PayloadVersion</key>
         <integer>1</integer>
      </dict>
   </array>
   <key>PayloadDisplayName</key>
   <string>Allowlist</string>
   <key>PayloadIdentifier</key>
   <string>Allowlist.129BBAA6-40E8-46E2-92BF-0CDABAD54BA6</string>
   <key>PayloadUUID</key>
   <string>129BBAA6-40E8-46E2-92BF-0CDABAD54BA6</string>
   <key>PayloadType</key>
   <string>Configuration</string>
   <key>PayloadVersion</key>
   <integer>1</integer>
</dict>
</plist>

Browser Blocklist

You can use the WebContentFilter payload to define a denylist that contains all websites that are inaccessible via a browser. If you block a domain, the subdomains will also be denied. Refer to WebContentFilter | Apple Developer Documentation (external link) to learn more.

KeyDescription
FilterTypeAlways set this key to BuiltIn.
DenyListURLsThis is an array of strings, each specifying a webpage that the device cannot access through the browser. Optionally, you can specify subdomains for the URL. Add strings as needed.
<plist version="1.0">
<dict>
   <key>PayloadContent</key>
   <array>
      <dict>
         <key>FilterType</key>
         <string>BuiltIn</string>
         <key>DenyListURLs</key>
         <array>
            <string>facebook.com</string>
            <string>reddit.com</string>
         </array>
         <key>PayloadDisplayName</key>
         <string>Denylist</string>
         <key>PayloadIdentifier</key>
         <string>DenyList.3CF8F060-E776-4950-8B64-2A6080BBB694</string>
         <key>PayloadUUID</key>
         <string>3CF8F060-E776-4950-8B64-2A6080BBB694</string>
         <key>PayloadType</key>
         <string>com.apple.webcontent-filter</string>
         <key>PayloadVersion</key>
         <integer>1</integer>
      </dict>
   </array>
   <key>PayloadDisplayName</key>
   <string>Denylist</string>
   <key>PayloadIdentifier</key>
   <string>Denylist.C72D246D-F2D6-4D41-B83D-592D195B7A79</string>
   <key>PayloadUUID</key>
   <string>C72D246D-F2D6-4D41-B83D-592D195B7A79</string>
   <key>PayloadType</key>
   <string>Configuration</string>
   <key>PayloadVersion</key>
   <integer>1</integer>
</dict>
</plist>

Mail Configuration

You can use the ExchangeActiveSync payload to configure the native mailing app on a device to connect to an Exchange ActiveSync (EAS) account for email. The user must first authenticate to the EAS account before data will sync. Refer to ExchangeActiveSync | Apple Developer Documentation (external link) to learn more.

There are several configurable options for this payload, but note the following keys in particular:

KeyDescription
PayloadDisplayNameThis is the account name that will appear on the device.
HostThis is the Exchange server hostname or IP address. For Office365, use outlook.office365.com.
EmailAddressThis is the user's email address. When you use the variable ${device.owner.email}, NinjaOne will automatically populate this field with the email address of the device owner specified in NinjaOne. If you use this, ensure a user is assigned to the device. To learn how to assign a device to a user, refer to NinjaOne Endpoint Management: Assigned User.
UserNameThis is the device owner's username. When you use the variable ${device.owner.email} NinjaOne will automatically populate this field with the email address of the device owner specified in NinjaOne. If you use this, ensure the device has an assigned user.
OAuthThis key allows you to determine whether the configuration uses OAuth for federated authentication.
MailNumberOfPastDaysToSyncThis key allows you to determine how many days of mail to sync upon first setup of the account.
SSLEnforce Secure Socket Layer (SSL) for the connection.
PreventMoveThis key allows you to determine whether users can move messages from this account to another account.
PreventAppSheetThis key allows you to determine whether device owners can use an app other than the Apple Mail to send emails.
EnableCalendarsDetermine whether to sync calendars.
EnableCalendarsUserOverridableThis key allows you to determine whether the user can modify the EnableCalendars setting.
EnableContactsDetermine whether to sync contacts.
EnableContactsUserOverridableThis key allows you to determine whether the user can modify the EnableCalendars setting.
EnableMailDetermine whether mail is synced.
EnableMailUserOverridableThis key allows you to determine whether the user can modify the EnableMail setting.
EnableNotesDetermine whether to sync the Notes app.
EnableNotesUserOverridableThis key allows you to determine whether the user can modify the EnableNotes setting.
EnableRemindersDetermine whether to sync the Reminders app.
EnableRemindersUserOverridableThis key allows you to determine whether the user can modify the EnableReminders setting.
<plist version="1.0">
<dict>
   <key>PayloadContent</key>
   <array>
      <dict>
         <key>PayloadDisplayName</key>
         <string>Corporate Email</string>
         <key>Host</key>
         <string>outlook.office365.com</string>
         <key>EmailAddress</key>
         <string>${device.owner.email}</string>
         <key>UserName</key>
         <string>${device.owner.email}</string>
         <key>OAuth</key>
         <true/>
         <key>MailNumberOfPastDaysToSync</key>
         <integer>7</integer>
         <key>SSL</key>
         <true/>
         <key>PreventMove</key>
         <true />
         <key>PreventAppSheet</key>
         <true />
         <key>EnableCalendars</key>
         <true/>
         <key>EnableCalendarsUserOverridable</key>
         <false/>
         <key>EnableContacts</key>
         <true/>
         <key>EnableContactsUserOverridable</key>
         <false/>
         <key>EnableMail</key>
         <true/>
         <key>EnableMailUserOverridable</key>
         <false/>
         <key>EnableNotes</key>
         <true/>
         <key>EnableNotesUserOverridable</key>
         <false/>
         <key>EnableReminders</key>
         <true/>
         <key>EnableRemindersUserOverridable</key>
         <false/>
         <key>PayloadIdentifier</key>
         <string>com.apple.eas.account.9B232C94-3E0A-4E4B-BF88-64370E3BA105</string>
         <key>PayloadUUID</key>
         <string>9B232C94-3E0A-4E4B-BF88-64370E3BA105</string>
         <key>PayloadType</key>
         <string>com.apple.eas.account</string>
         <key>PayloadVersion</key>
         <integer>1</integer>
      </dict>
   </array>
   <key>PayloadDisplayName</key>
   <string>Corporate Email</string>
   <key>PayloadIdentifier</key>
   <string>Corporate Email.158FBE77-8888-4578-A443-DBF46AD4C937</string>
   <key>PayloadType</key>
   <string>Configuration</string>
   <key>PayloadUUID</key>
   <string>158FBE77-8888-4578-A443-DBF46AD4C937</string>
   <key>PayloadVersion</key>
   <integer>1</integer>
</dict>
</plist>

Additional Resources

Refer to NinjaOne MDM: Resource Catalog to learn more about Apple MDM in NinjaOne.

FAQ

Next Steps