-
Notifications
You must be signed in to change notification settings - Fork 72
Configuration
The configuration of Support App is optimized for use with your Device Management Service. The easiest way to configure the app is using a Configuration Profile so you can use whatever Device Management Service you like, as long as it supports custom Configuration Profiles or other integration/feature to configure 3rd party applications.
The easiest way to configure Support App is using its built-in Configurator Mode which allows you to visualize the app, quickly try different layouts, iterate on previous configurations and export the result to a property list of .mobileconfig file to directly upload into your Device Management Service. Please check the Configurator Mode page for more information.
Support App uses the following preference domain for configuration: nl.root3.support
Some preference keys like the icon and status bar icon can point to a file location. Because Support App is sandboxed, not all file locations are allowed. We suggest putting the files in a folder within Application Support such as /Library/Application Support/Your Company/ where the app can read the contents. Other supported file locations can be found in Apple’s documentation about App Sandbox: https://developer.apple.com/library/archive/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW17
A sample Configuration Profile is provided (both signed and unsigned) for macOS 13 and higher to avoid users from disabling the LaunchAgent in System Settings > General > Login Items. The profile uses the Root3 Team ID to only allow signed software from Root3. Samples
You need to configure PPPC in the following scenarios:
- If you are an App Catalog customer and using the App Catalog integration. Support App requires additional permissions to be able to perform app updates.
- If you use Privileged Scripts and trying to read from or write to protected locations.
To explicitely grant the SystemPolicyAllFiles (Full Disk Access) permission in a Privacy Preference Policy Control profile (PPPC), here are the details:
-
Allowed:
true -
Identifier:
nl.root3.support -
IdentifierType: Bundle ID
-
CodeRequirement:
anchor apple generic and identifier "nl.root3.support" and (certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "98LJ4XBGYK") -
Allowed:
true -
Identifier:
/Library/PrivilegedHelperTools/nl.root3.support.helper -
IdentifierType: Path
-
CodeRequirement:
anchor apple generic and identifier "nl.root3.support.helper" and (certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "98LJ4XBGYK")
A sample Configuration Profile is provided here
Below are all available preference keys, categorized in the same way these appear in the Configurator Mode settings.
| Preference key | Type | Default value | Description | Example |
|---|---|---|---|---|
| Title | String | Support | Text shown in the top left corner when the app opens. | “Your Company Name“, “IT Helpdesk“, "Hi $LocalFullName!" etc. |
| FooterText | String | - | Text shown at the bottom as footnote | "Provided by your IT department with ❤️" |
| ErrorMessage | String | Please contact IT support | Shown when clicking an action results in an error | "Please contact the servicedesk", "Please contact COMPANY_NAME" |
| ShowWelcomeScreen | Boolean | false | Shows the welcome screen when Support App is opened for the first time. | true |
| StatusBarIconNotifierEnabled | Boolean | false | Shows a small notification badge in the Status Bar Icon when an info items triggers a warning or notification | true |
| Preference key | Type | Default value | Description | Example |
|---|---|---|---|---|
| Logo | String | App Icon | Remote URL, SF Symbol or path to the logo shown in the top right corner when the app opens. Scales to 48 points maximum height. A subfolder in /Library/Application Support/ is the recommended location due to sandboxing |
/Library/Application Support/Your Company/logo.png or https://domain.tld/url_to_image.png
|
| LogoDarkMode | String | App Icon | Remote URL, SF Symbol or path to the logo shown in the top right corner when the app opens for Dark Mode. Scales to 48 points maximum height. A subfolder in /Library/Application Support/ is the recommended location due to sandboxing |
/Library/Application Support/Your Company/logo_darkmode.png or https://domain.tld/url_to_image.png
|
| NotificationIcon | String | App Icon | Remote URL or path to a custom square image to be shown in alerts and the about window. |
/Library/Application Support/Your Company/logo.png or https://domain.tld/url_to_image.png
|
| StatusBarIcon | String | - | Remote URL or path to the status bar icon shown in the menu bar. Recommended: PNG, 16x16 points. Icons larger than 22 points will automatically be resized to 16 points. A subfolder in /Library/Application Support/ is the recommended location due to sandboxing |
/Library/Application Support/Your Company/statusbaricon.png or https://domain.tld/url_to_image.png
|
| StatusBarIconAllowsColor | Boolean | false | Allow status bar icon to show color when a custom image is used (SF Symbol excluded) | true |
| StatusBarIconSFSymbol | String | "lifepreserver" | Custom status bar icon using an SF Symbol. Ignored when StatusBarIcon is also set | “lifepreserver” |
| CustomColor | String | macOS Accent Color | Custom color for all symbols. Leave empty to use macOS Accent Color. We recommend not to use a very light color as text may become hard to read | HEX color in RGB format like "#8cc63f" |
| CustomColorDarkMode | String | macOS Accent Color | Custom color for all symbols in Dark Mode. Leave empty to use macOS Accent Color or CustomColor if specified. We recommend not to use a very dark color as text may become hard to read | HEX color in RGB format like "#8cc63f" |
| Preference key | Type | Default value | Description | Example |
|---|---|---|---|---|
| UptimeDaysLimit | Integer | 0 (Disabled) | Days of uptime after which a notification badge is shown, disabled by default. Only applicable when the Uptime Info Item is enabled | 7 |
| PasswordType | String | Apple | The account type to use with the Password info item: local user account (Apple), Jamf Connect, Kerberos SSO Extension or NoMAD. Only applicable when the Password Info Item is enabled | "Apple", "JamfConnect", "KerberosSSO" or "Nomad" |
| PasswordExpiryLimit | Integer | 0 (Disabled) | Days until password expiry after which a notification badge is shown, disabled by default. Only applicable when the Password Info Item is enabled | 14 |
| PasswordLabel | String | Mac Password | Alternative text label shown in the Password info item. Only applicable when the Password Info Item is enabled | "AD Password", "Company Password" |
| StorageLimit | Integer | 0 (Disabled) | Percentage of storage used after which a notification badge is shown, disabled by default. Only applicable when the Storage Info Item is enabled | 80 |
| UpdateText | String | - | The text shown below the software update details popover | "Your organization requires you to update as soon as possible. More info..." |
| Preference key | Type | Default value | Description | Example |
|---|---|---|---|---|
| OpenAtLogin | Boolean | false | Launch Support (non-PKG version) automatically at login and keep it open. This setting is ignored if a legacy LaunchAgent is installed/active. Keep disabled if you don't want to open Support at login or use your own LaunchAgent | false |
| DisablePrivilegedHelperTool | Boolean | false | Disable the Privileged Helper Tool for the PKG installer during the time of installation or at launch of Support App | true |
| DisableConfiguratorMode | Boolean | false | Prevents users from enabling Configurator Mode | true |
| OnAppearAction | String | - | Path to privileged script to be executed when Support App is shown by clicking on the menu bar item. The Privileged Helper Tool is required for this feature. | /usr/local/bin/runs_when_support_appears.zsh |
| Key | Type | Description | Example |
|---|---|---|---|
| Rows | Array | Top-level array containing one or more Row dictionaries. Each Row represents a horizontal section of the interface. | – |
| Row | Dictionary | Container that defines one group or section of items. Each Row can contain one or more Items. | – |
| Items | Array | Array of items within a Row. Each Item defines an element shown in the app such as a button, info tile, or extension-based component. | – |
| Item | Dictionary | An item inside a Row. Must include Type; may include Title, Subtitle, Symbol, Action, ActionType, ExtensionID, OnAppearAction. See “Item dictionary” below. | – |
Each Item represents one tile or button in the Support App interface.
The Type key defines what kind of element it is (for example, “Button”, “InfoItem”, “Extension”, etc.).
Other keys control its appearance, behavior, and optional extensions.
| Key | Type | Required | Description | Example |
|---|---|---|---|---|
| Type | String | ✅ | Defines the type of item. Available built-in types include: ComputerName, MacOSVersion, Network, Password, Storage, Uptime, AppCatalog, Extension, Button, ButtonMedium, ButtonSmall etc. |
"Button" |
| Title | String | – | Text displayed as the main title of the item. | “Share My Screen”, “Remote Support“, “Software Updates“ “My core application”, "Company Portal", etc. |
| Subtitle | String | – | Subtitle text will appear under title when the user hovers over the button. Ignored if left empty. | “Click to open“, “Share your screen“ |
| Symbol | String | – | The SF Symbol shown in the button. |
binoculars.fill, cursorarrow.click.2 or any other SF Symbol. Please check the SF Symbols app |
| Action | String | – | The Bundle Identifier of the App, URL, command to run or privileged script to run. |
nl.root3.catalog, "/usr/local/bin/yourscript.zsh", "https://intranet.company.tld", "mailto:support@company.tld"
|
| ActionType | String | – | Type of link the item should open. Can be anything like screen sharing tools, company stores, file servers or core applications in your organization. |
App, URL, Command or PrivilegedScript
|
| ExtensionID | String | – | Identifier for the Support App Extension. This value can be used in a script used in OnAppearAction to populate and update the Extension |
"tld.yourorganization.extension.description" |
| OnAppearAction | String | – | Command or script executed when the item becomes visible in the interface. Useful for dynamic info items. | "/usr/local/bin/update_status.zsh" |
Below is a visualization of the hierarchy of Rows:
Root (Configuration)
└── Rows (Array)
├── Row (Dictionary)
│ └── Items (Array)
│ ├── Item (Dictionary)
│ │ ├── Type (Required)
│ │ ├── Title
│ │ ├── Subtitle
│ │ ├── Symbol
│ │ ├── Action
│ │ ├── ActionType
│ │ ├── ExtensionID
│ │ └── OnAppearAction
│ ├── Item (Dictionary)
│ │ ├── Type (Required)
│ │ ├── Title
│ │ ├── Subtitle
│ │ ├── Symbol
│ │ ├── Action
│ │ ├── ActionType
│ │ ├── ExtensionID
│ │ └── OnAppearAction
│ └── …
│
├── Row (Dictionary)
│ └── Items (Array)
│ └── Item (Dictionary)
│ ├── Type (Required)
│ ├── Title
│ ├── Subtitle
│ ├── Symbol
│ ├── Action
│ ├── ActionType
│ ├── ExtensionID
│ └── OnAppearAction
│
└── …
Below is an example of how the Rows key can be configured:
<key>Rows</key>
<array>
<dict>
<key>Items</key>
<array>
<dict>
<key>Type</key>
<string>ComputerName</string>
</dict>
<dict>
<key>Type</key>
<string>MacOSVersion</string>
</dict>
</array>
</dict>
<dict>
<key>Items</key>
<array>
<dict>
<key>Type</key>
<string>Uptime</string>
</dict>
<dict>
<key>Type</key>
<string>Storage</string>
</dict>
</array>
</dict>
<dict>
<key>Items</key>
<array>
<dict>
<key>Action</key>
<string>com.teamviewer.TeamViewerQS</string>
<key>ActionType</key>
<string>App</string>
<key>Subtitle</key>
<string>Share Screen</string>
<key>Symbol</key>
<string>macwindow.and.pointer.arrow</string>
<key>Title</key>
<string>Remote Support</string>
<key>Type</key>
<string>ButtonMedium</string>
</dict>
<dict>
<key>Action</key>
<string>/usr/local/bin/myscript.zsh</string>
<key>ActionType</key>
<string>PrivilegedScript</string>
<key>Subtitle</key>
<string></string>
<key>Symbol</key>
<string>person.2.badge.gearshape</string>
<key>Title</key>
<string>My Tool</string>
<key>Type</key>
<string>ButtonMedium</string>
</dict>
<dict>
<key>Action</key>
<string>https://myapps.microsoft.com</string>
<key>ActionType</key>
<string>URL</string>
<key>Subtitle</key>
<string>Open</string>
<key>Symbol</key>
<string>square.grid.3x2</string>
<key>Title</key>
<string>My Apps</string>
<key>Type</key>
<string>ButtonMedium</string>
</dict>
</array>
</dict>
</array>