Skip to content

Managed App Config Schema

This page documents the full Managed App Configuration XML schema that SupportID reads from UserDefaults via the com.apple.configuration.managed key.

  1. You define a configuration dictionary in your MDM console
  2. Your MDM pushes the configuration to the device alongside the app
  3. iOS stores it in UserDefaults under the key com.apple.configuration.managed
  4. SupportID reads this dictionary at launch and when changes occur
// How SupportID reads the configuration
let config = UserDefaults.standard.dictionary(
forKey: "com.apple.configuration.managed"
)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- General Configuration -->
<key>appTitle</key>
<string>SupportID</string>
<key>uiStyle</key>
<string>Large</string>
<!-- Data Point 1 -->
<key>dataPoint1</key>
<string></string>
<key>dataPoint1Label</key>
<string>Data Point 1</string>
<key>dataPoint1Icon</key>
<string>1.circle.fill</string>
<key>dataPoint1Visible</key>
<true/>
<!-- Data Point 2 -->
<key>dataPoint2</key>
<string></string>
<key>dataPoint2Label</key>
<string>Data Point 2</string>
<key>dataPoint2Icon</key>
<string>2.circle.fill</string>
<key>dataPoint2Visible</key>
<true/>
<!-- Data Point 3 -->
<key>dataPoint3</key>
<string></string>
<key>dataPoint3Label</key>
<string>Data Point 3</string>
<key>dataPoint3Icon</key>
<string>3.circle.fill</string>
<key>dataPoint3Visible</key>
<true/>
<!-- Data Point 4 -->
<key>dataPoint4</key>
<string></string>
<key>dataPoint4Label</key>
<string>Data Point 4</string>
<key>dataPoint4Icon</key>
<string>antenna.radiowaves.left.and.right</string>
<key>dataPoint4Visible</key>
<true/>
<!-- Data Point 5 -->
<key>dataPoint5</key>
<string></string>
<key>dataPoint5Label</key>
<string>Data Point 5</string>
<key>dataPoint5Icon</key>
<string>ipad.and.iphone</string>
<key>dataPoint5Visible</key>
<true/>
<!-- Section Visibility -->
<key>showStorageSection</key>
<true/>
<key>showShortcutsSection</key>
<true/>
<!-- Self Service Configuration -->
<key>selfServiceProvider</key>
<string>jamf</string>
<!-- Settings Links (no defaults — links hidden when absent) -->
<key>contactSupportURL</key>
<string>https://devscape.io/support</string>
<key>privacyPolicyURL</key>
<string>https://devscape.io/privacy-policy</string>
<key>termsAndConditionsURL</key>
<string>https://devscape.io/terms-and-conditions</string>
</dict>
</plist>

The configuration uses standard plist value types:

Plist Type Example Used For
<string> <string>barcode</string> Text values, icon names, provider names, URLs
<true/> / <false/> <true/> Boolean toggles (visibility, feature flags)
<integer> <integer>30</integer> Numeric values (refresh intervals)

MDM platforms substitute variables in string values before delivering the configuration:

Platform Syntax Example
Jamf Pro $VARIABLE $SERIALNUMBER
Kandji {{VARIABLE}} {{SERIAL_NUMBER}}
Intune {{variable}} {{serialnumber}}
Workspace ONE {Variable} {SerialNumber}

The configuration is delivered to the device when:

  • The app is first installed as a managed app
  • The configuration profile is updated in the MDM
  • The device checks in and receives updated policies

SupportID listens for changes to UserDefaults and updates the UI automatically when new configuration arrives.

After deploying, verify the configuration in SupportID:

  1. Open the app and tap the gear icon
  2. Check Configuration Status — should show Active
  3. Verify that all data point values are populated correctly