Home

Awesome

macOS Support App

GitHub release (latest by date) Github Github

<img src="/Screenshots/generic_version_2.6.png" width="800"> <img src="/Screenshots/generic_version_2.4.png" width="800">

<img src="/Screenshots/generic_light_mode_cropped.png" height="300"> <img src="/Screenshots/generic_version_2.3_small_dark.png" height="300">

Introduction

The Support app is a macOS menu bar app built for organizations to:

The app is developed by Root3, specialized in managing Apple devices. Root3 offers managed workplaces, consultancy and support for organizations to get the most out of their Apple devices and is based in The Netherlands (Halfweg).

Root3 already had a basic in-house support app written in Objective-C and decided to completely rewrite it in Swift using SwiftUI with an all-new design that looks great on macOS Big Sur. We’ve learned that SwiftUI is the perfect way of creating great looking apps for all Apple platforms with minimal effort. In the development process we decided to make it generic so other organizations can take advantage of it and contribute to the Mac admins community.

The easiest and recommended way to configure the app is using a Configuration Profile and your MDM solution.

Requirements

Download

Support App

Package Installer (includes LaunchAgent): Download

Application (zipped): Download

See the MDM deployment section below for more info.

TestFlight

You can participate in beta versions of Support App using TestFlight. This requires macOS 12 or higher.

Join TestFlight

Note There may not always be a TestFlight version available.

Technologies

Features

Menu Bar Icon

The Menu Bar Icon can be customized to your own image such as a PNG with Alpha Channel, an image from URL or an SF Symbol. Any image will be shown as template to match the rest of the Menu Bar Extras. Icons larger than 22 points will automatically be resized to the recommended 16 points and the aspect ratio will be preserved. Optionally a notification badge can overlay the icon to attract the user's attention when an Apple Software Update is available or any other warning was triggered. Please check the preference key StatusBarIconNotifierEnabled.

Note When using a local file, make sure to put the image in a folder accessible from the App Sandbox. We recommend a subfolder in /Library/Application Support/ such as /Library/Application Support/MyOrganization

Note When using an file from URL, the image will be downloaded once when the Support App opens and will be used for subsequent launches of the app, to avoid unnecessary downloads and use cases where the Mac has no internet connection at startup. To use a new icon, the URL must be changed for the Support App to trigger a new download.

Title and logo

The row above the buttons allow a custom title and company logo. The title supports both text and Emoji. On macOS Monterey and higher, it supports Markdown as well. The logo supports a remote URL, an SF Symbol and several local images types like PNG, JPEG and ICNS and will be resized to a maximum height of 48 points. The original aspect ratio will be retained. A PNG with alpha channel is advised to get variable transparency around your logo.

Logo options

Here are the available for the Logo:

Note When using a local file, make sure to put the image in a folder accessible from the App Sandbox. We recommend a subfolder in /Library/Application Support/ such as /Library/Application Support/MyOrganization

Color

All the circles around the symbols have the macOS accent color and will dynamically change with the user's setting in System Preferences --> General. If desired, this color can be customised matching your corporate colors. We recommend keeping the macOS accent color when the color of your choice is too light, as text will be difficult to read.

Diagnostic information

There are a couple of info items with diagnostics available to choose from. A total of four items will be displayed in the top four buttons. Available items:

App, link or command shortcuts

The buttons in the 3rd and 4th row behave as shortcuts to applications or links. Both rows are flexible and can show two or three buttons. The total amount of configurable buttons is possible: 0, 2, 3, 4, 5, 6. You can configure five variables for every of these buttons:

Note The key DistributedNotification is deprecated and replaced with PrivilegedScript

The rows with all configurable items enabled are shown in the screenshot below:

<img src="/Screenshots/configurable_buttons_2.4.png" width="450">

Footer Text

A footer text can optionally be used to put some additional text at the bottom of the Support App. This supports both text and Emoji. On macOS Monterey and higher, it supports Markdown. Also a great way to put additional information using Built-in local variables Use the preference key FooterText to configure the footer.

Notification Icon

The icon shown the about window can be modified by using the preference key NotificationIcon.

See an example below:

<img src="/Screenshots/custom_alert.png" width="350">

Note When using a local file, make sure to put the image in a folder accessible from the App Sandbox. We recommend a subfolder in /Library/Application Support/ such as /Library/Application Support/MyOrganization

Note When using an file from URL, the image will be downloaded once when the Support App opens and will be used for subsequent launches of the app, to avoid unnecessary downloads and use cases where the Mac has no internet connection at startup. To use a new icon, the URL must be changed for the Support App to trigger a new download.

Note Modifying the app icon when it is not running would compromise the App Sandbox and we decided not to implement this. We suggest hiding the app by running the following command: sudo chflags hidden "/Applications/Support.app"

Welcome Screen

An informational window can optionally be shown when the Support App is opened for the first time. It explains the key features to the user before all data is shown. This can be set using the preference key ShowWelcomeScreen.

<img src="/Screenshots/welcome_screen.png" width="500">

Software Update integration

The Support App shows the current version of macOS and a notification badge if there is an update or upgrade available. Clicking the info item shows more details like the name of the update(s) available and also allows organizations to add a custom text. This can be used to provide more context and explain the user about the organization's update policy or anything else. The text string supports Markdown to style it further and include links. Please check Built-in local variables for an example using Markdown and variables.

It allows the user to open System Settings and install the update or upgrade. If there is no update or upgrade available, the popover simply shows "Your Mac is up to date".

If an update declaration is sent using Declarative Device Management (macOS 14 and higher), the available update will show the enforcement date and time for the update. If present in the declaration, the DetailsURL will also show a button "Details" and opens the DetailsURL link.

<img src="/Screenshots/software_update_integration.png" width="600">

Note When a deferral is set using the preference key forceDelayedMajorSoftwareUpdates in the domain com.apple.applicationaccess, major macOS updates will automatically be hidden indefinitely until the key is removed or set to false. The amount of days configured for the deferral are ignored. Due to limitations and complexity, it is not supported to automatically show the macOS major update once the deferral days are passed. This behaviour replaces the HideMajorUpdates key, previously available in version 2.5 and earlier. More info here: https://developer.apple.com/documentation/devicemanagement/restrictions

App Catalog integration

The Support App integrates with Root3's App Catalog. The App Catalog is an automated patch management solution for third party macOS applications. It provides unique features such as a daily update schedule, updating both managed and unmanaged apps and a user facing app to quickly install new applications. As some app updates require user interaction, users may defer an update and want to update at a more convenient time. The Support App periodically checks for available app updates and allows the user to update apps whenever they prefer in an accessible way. The menu bar icon also shows a red notification badge when an update is available to inform the user, similar to macOS updates when StatusBarIconNotifierEnabled is set to true.

<img src="/Screenshots/app_catalog_integration.png" width="600">

PPPC requirements

The Support App requires additional permissions to be able to perform app updates. Therefore you need to explicitely grant the SystemPolicyAllFiles (Full Disk Access) permission in a Privacy Preference Policy Control profile (PPPC):

A sample Configuration Profile is provided here

Last Reboot

If UptimeDaysLimit is set and the user click on the Last Reboot Info Item, a view is shown where the administrators reboot recommendation is shown. It also provides a button to quickly perform a graceful restart without leaving the Support App.

<img src="/Screenshots/last_reboot.png" width="600">

Configuration

The configuration of the Support app is optimized for use with your MDM solution. The easiest way to configure the app is using a Configuration Profile so you can use whatever MDM solution you like, as long as it supports custom Configuration Profiles.

Some preference keys like the icon and status bar icon point to a file location. Due to the sandboxed characteristic of the app, 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

Preference domain: nl.root3.support

Below are all available preference keys:

General

All general settings

Preference keyTypeDefault valueDescriptionExample
TitleStringSupportText shown in the top left corner when the app opens.“Your Company Name“, “IT Helpdesk“ etc.
LogoStringApp IconRemote 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
LogoDarkModeStringApp IconRemote 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
NotificationIconStringApp IconRemote 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
StatusBarIconStringRoot3 LogoRemote 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
StatusBarIconSFSymbolStringRoot3 LogoCustom status bar icon using an SF Symbol. Ignored when StatusBarIcon is also set“lifepreserver”
StatusBarIconNotifierEnabledBooleanfalseShows a small notification badge in the Status Bar Icon when an info items triggers a warning or notificationtrue
UpdateTextString-The text shown below the software update details popover"Your organization requires you to update as soon as possible. More info..."
CustomColorStringmacOS Accent ColorCustom 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 readHEX color in RGB format like "#8cc63f"
CustomColorDarkModeStringmacOS Accent ColorCustom 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 readHEX color in RGB format like "#8cc63f"
HideFirstRowInfoItemsBooleanfalseHides the first row of info items.true
HideSecondRowInfoItemsBooleanfalseHides the second row of info items.true
HideThirdRowInfoItemsBooleanfalseHides the third row of info items.true
HideFirstRowButtonsBooleanfalseHides the first row of configurable items.true
HideSecondRowButtonsBooleanfalseHides the second row of configurable items.true
ErrorMessageStringPlease contact IT supportShown when clicking an action results in an error"Please contact the servicedesk", "Please contact COMPANY_NAME"
ShowWelcomeScreenBooleanfalseShows the welcome screen when the Support App is opened for the first time.true
FooterTextString-Text shown at the bottom as footnote"Provided by your IT department with ❤️"
OpenAtLoginBooleanfalseLaunch Support (non-PKG) automatically at login and keep it open (macOS 13 and higher). 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 LaunchAgentfalse
DisablePrivilegedHelperToolBooleanfalseDisable the Privileged Helper Tool for the PKG installer during the time of installation or at launch of the Support Apptrue

Info items

Configuration of the top four items with diagnostic information.

Preference keyTypeDefault valueDescriptionExample
InfoItemOneStringComputerNameInfo item shown in the upper left corner"ComputerName", "MacOSVersion", "Network", "Password", "Storage", "Uptime", "ExtensionA" or "ExtensionB"
InfoItemTwoStringMacOSVersionInfo item shown in the upper right corner"ComputerName", "MacOSVersion", "Network", "Password", "Storage", "Uptime", "ExtensionA" or "ExtensionB"
InfoItemThreeStringUptimeInfo item shown in the second row left"ComputerName", "MacOSVersion", "Network", "Password", "Storage", "Uptime", "ExtensionA" or "ExtensionB"
InfoItemFourStringStorageInfo item shown in the second row right"ComputerName", "MacOSVersion", "Network", "Password", "Storage", "Uptime", "ExtensionA" or "ExtensionB"
InfoItemFiveString-Info item shown in the third row left"ComputerName", "MacOSVersion", "Network", "Password", "Storage", "Uptime", "ExtensionA" or "ExtensionB"
InfoItemSixString-Info item shown in the third row right"ComputerName", "MacOSVersion", "Network", "Password", "Storage", "Uptime", "ExtensionA" or "ExtensionB"
UptimeDaysLimitInteger0 (Disabled)Days of uptime after which a notification badge is shown, disabled by default7
PasswordTypeStringAppleThe account type to use with the Password info item: local user account (Apple), Jamf Connect, Kerberos SSO Extension or NoMAD"Apple", "JamfConnect", "KerberosSSO" or "Nomad"
PasswordExpiryLimitInteger0 (Disabled)Days until password expiry after which a notification badge is shown, disabled by default14
PasswordLabelStringMac PasswordAlternative text label shown in the Password info item"AD Password", "Company Password"
StorageLimitInteger0 (Disabled)Percentage of storage used after which a notification badge is shown, disabled by default80

First row of configurable items: Item left

Preference keyTypeDefault valueDescriptionExample
FirstRowTitleLeftStringRemote SupportThe text shown in the button label.“Share My Screen”, “TeamViewer“, “Software Updates“ “My core application” etc.
FirstRowSubtitleLeftString-Subtitle text will appear under title when the user hovers over the button. Ignored if left empty.“Click to open“, “Share your screen“
FirstRowTypeLeftStringAppType 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 (Privileged script)
FirstRowLinkLeftStringcom.apple.ScreenSharingThe Bundle Identifier of the App, URL or command to open.“com.teamviewer.TeamViewerQS“ (App), “x-apple.systempreferences:com.apple.preferences.softwareupdate“ (URL)
FirstRowSymbolLeftStringcursorarrowThe SF Symbol shown in the button.“binoculars.fill”, “cursorarrow.click.2” or any other SF Symbol. Please check the SF Symbols section.

First row of configurable items: Item middle

Preference keyTypeDefault valueDescriptionExample
FirstRowTitleMiddleString-The text shown in the button label.“Self Service“, “App Store“
FirstRowSubtitleMiddleString-Subtitle text will appear under title when the user hovers over the button. Ignored if left empty.“Click to open”, “Download apps“
FirstRowTypeMiddleStringURLType 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 (Privileged script)
FirstRowLinkMiddleString-The Bundle Identifier of the App, URL or command to open.“com.jamfsoftware.selfservice.mac”
FirstRowSymbolMiddleString-The SF Symbol shown in the button.“briefcase.fill”, “bag.circle”, “giftcard.fill”, “gift.circle” or any other SF Symbol. Please check the SF Symbols section.

First row of configurable items: Item right

Preference keyTypeDefault valueDescriptionExample
FirstRowTitleRightStringCompany StoreThe text shown in the button label.“Self Service“, “App Store“
FirstRowSubtitleRightString-Subtitle text will appear under title when the user hovers over the button. Ignored if left empty.“Click to open”, “Download apps“
FirstRowTypeRightStringAppType 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 (Privileged script)
FirstRowLinkRightStringcom.apple.AppStoreThe Bundle Identifier of the App, URL or command to open.“com.jamfsoftware.selfservice.mac”
FirstRowSymbolRightStringcart.fillThe SF Symbol shown in the button.“briefcase.fill”, “bag.circle”, “giftcard.fill”, “gift.circle” or any other SF Symbol. Please check the SF Symbols section.

Second row of configurable items: Item left

Preference keyTypeDefault valueDescriptionExample
SecondRowTitleLeftStringSupport TicketThe text shown in the button label.“Create ticket”, “Open incident“
SecondRowSubtitleLeftString-Subtitle text will replace the title when the user hovers over the button. Ignored if left empty.“support.company.tld”, “Now”, “Create“
SecondRowTypeLeftStringURLType 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 (Privileged script)
SecondRowLinkLeftStringhttps://yourticketsystem.tldThe Bundle Identifier of the App, URL or command to open.https://yourticketsystem.tld”, “mailto:support@company.tld”, “tel:+31000000000” or “smb://yourfileserver.tld”
SecondRowSymbolLeftStringticketThe SF Symbol shown in the button.“lifepreserver”, “person.fill.questionmark” or any other SF Symbol. Please check the SF Symbols section.

Second row of configurable items: Item middle

Preference keyTypeDefault valueDescriptionExample
SecondRowTitleMiddleString-The text shown in the button label.“Send email”
SecondRowSubtitleMiddleString-Subtitle text will replace the title when the user hovers over the button. Ignored if left empty.support@company.tld”, “Now”
SecondRowTypeMiddleStringURLType 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 (Privileged script)
SecondRowLinkMiddleString-The Bundle Identifier of the App, URL or command to open.https://yourticketsystem.tld”, “mailto:support@company.tld”, “tel:+31000000000” or “smb://yourfileserver.tld”
SecondRowSymbolMiddleString-The SF Symbol shown in the button.“paperplane”, “arrowshape.turn.up.right.fill” or any other SF Symbol. Please check the SF Symbols section.

Second row of configurable items: Item right

Preference keyTypeDefault valueDescriptionExample
SecondRowTitleRightStringPhoneThe text shown in the button label.“Call Helpdesk“, “Phone“
SecondRowSubtitleRightString-Subtitle text will replace the title when the user hovers over the button. Ignored if left empty.“+31 00 000 00 00”, “Now”, “Call“
SecondRowTypeRightStringURLType 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 (Privileged script)
SecondRowLinkRightStringtel:+31000000000The Bundle Identifier of the App, URL or command to open.https://yourticketsystem.tld”, “mailto:support@company.tld”, “tel:+31000000000” or “smb://yourfileserver.tld”
SecondRowSymbolRightStringphoneThe SF Symbol shown in the button.“iphone.homebutton”, “megaphone” or any other SF Symbol. Please check the SF Symbols section.

Advanced configuration

Support App Extensions

Support App Extensions enable administrators to create custom info items and populate those with output from scripts or values from MDM. You can use your MDM solution to run scripts or commands to populate the Support App Extensions. The Support App can also run scripts with elevated privileges everytime the Support App popover appears to make sure data is up to date with the OnAppearAction key. Extensions show a placeholder by default is no value is set. Please read Privileged scripts down below for more info.

Static or dynamic

There are basically two ways to populate the Support App Extensions depending on the use case:

Below are the preference keys to enable Support App Extensions:

Preference keyTypeDefault valueDescriptionExample
ExtensionTitleAString-The title shown in the extension."Last Check-In", "Compliance"
ExtensionValueAStringKeyPlaceholderThe output of the Extension set by script or MDM. If nothing is set, it is shown as placeholder UI elementAnything you want to show here
ExtensionSymbolAString-The SF Symbol shown in the extension."clock.badge.checkmark.fill",
ExtensionTypeAStringAppType 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 (Privileged script)
ExtensionLinkAString-The Bundle Identifier of the App, URL or command to open.defaults write /Library/Preferences/nl.root3.support.plist ExtensionLoadingA -bool true; /usr/local/bin/jamf policy; /usr/local/bin/jamf_last_check-in_time.zsh or any other action you prefer by clicking on the Extension
ExtensionAlertABooleanfalseControls whether to show a warning badge in the Extension. Set to true to enabletrue
ExtensionTitleBString-The title shown in the extension."Account Privileges"
ExtensionValueBStringKeyPlaceholderThe output of the Extension set by script or MDM. If nothing is set, it is shown as placeholder UI elementAnything you want to show here
ExtensionSymbolBString-The SF Symbol shown in the extension."wallet.pass.fill"
ExtensionTypeBStringAppType 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 (Privileged script)
ExtensionLinkBString-The Bundle Identifier of the App, URL or command to open./usr/local/bin/sap_privileges_change_permissions.zsh or any other action you prefer by clicking on the Extension
ExtensionAlertBBooleanfalseControls whether to show a warning badge in the Extension. Set to true to enabletrue
ExtensionValueBStringKeyPlaceholderThe output of the Extension set by script or MDM. If nothing is set, it is shown as placeholder UI elementAnything you want to show here
OnAppearActionString-Path to privileged script to be executed when the 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 such as /usr/local/bin/user_permissions.zsh or /usr/local/bin/jamf_last_check-in_time.zsh or /usr/local/bin/mscp_compliance_status.sh

How to populate Support App Extensions

Support App Extensions must be populated by setting the value in a preference key within the preference domain nl.root3.support. This can be achieved by using a static value in the Configuration Profile, running custom scripts from your MDM solution or using the OnAppearAction key. This last option will allow you to update the Support App Extension values every time the Support App popover appears by running the script.

Below a simple example script including loading effect and placeholder while loading

#!/bin/zsh

# Start spinning indicator
defaults write /Library/Preferences/nl.root3.support.plist ExtensionLoadingA -bool true

# Show placeholder value while loading
defaults write /Library/Preferences/nl.root3.support.plist ExtensionValueA -string "KeyPlaceholder"

# Keep loading effect active for 0.5 seconds
sleep 0.5

# Get output value
command_output=$(PUT_COMMAND_TO_GET_OUTPUT_HERE)

# Set output value
defaults write /Library/Preferences/nl.root3.support.plist ExtensionValueA -string "${command_output}"

# Trigger an orange warning notification badge depending on the output you decide
if [[ "${command_output}" == "OUTPUT_IS_BAD" ]]; then
 defaults write /Library/Preferences/nl.root3.support.plist ExtensionAlertA -bool true
else
 defaults write /Library/Preferences/nl.root3.support.plist ExtensionAlertA -bool false
fi

# Stop spinning indicator
defaults write /Library/Preferences/nl.root3.support.plist ExtensionLoadingA -bool false

Note When using more than one Support App Extension combined with OnAppearAction, it's best to update the values in one script instead of chaining multiple scripts to have the best experience

Note Please do not forget to make the script executable: sudo chmod +x /PATH/TO/SCRIPT

Privileged scripts

To allow scripts to be executed with elevated privileges, the Support App has a built-in Privileged Helper Tool. This upgrade over the deprecated SupportHelper makes sure communication is transmitted more securely between the main app the the built-in Privileged Helper Tools with additional checks such as code requirement and scripts must have proper permissions and owner. The script must me owned by root and have 755 permissions. Additionally, only paths to a script set in a Configuration Profile will be executed. Values set with defaults write are not supported.

Warning Because the script permissions are checked before execution, commands are not supported anymore as of version 2.6.

Below an example to force a MDM check-in using a custom script:

<img src="/Screenshots/generic_version_2.4_beta.gif" width="800">

Use Cases

There are a couple of use cases where privileged scripts can help. For example run a command or script with root privileges:

Disabling or re-enabling

By default, the Privileged Helper Tool is automatically enabled when using the PKG installer. To opt-out, set the key DisablePrivilegedHelperTool to true during the time of installation. Also at launch of the Support App, the Privileged Helper Tool will be removed when the key is set. Please also note that for the App Catalog integration, the Privileged Helper Tool is a requirement.

Additionally the Support App app bundle comes with scripts to manually disable or re-enable the Privileged Helper Tool. For example when you accidentaly used or misconfigured the DisablePrivilegedHelperTool key, or chose to (not) use it at a later time:

For example, you can run those scripts locally of by your MDM solution. You can verify the Privileged Helper Tool is enabled by checking the file locations mentioned in File locations.

File locations

The Support App installs some files related to the Privileged Helper Tool:

Privileged Helper Tool: /Library/PrivilegedHelperTools/nl.root3.support.helper

LaunchDaemon: /Library/LaunchDaemons/nl.root3.support.helper.plist

Security considerations

As the Support App is able to execute scripts elevated privileges, it needs to be used responsibly. Usually it is only needed for more advanced workflows such as querying additional information in real time, interact with other applications and more. Treat it carefully and only use the PrivilegedScript key when you really need elevated privileged.

Note Only values from a Configuration Profile will be used. Values set by defaults write will be ignored as it imposes a potential security risk.

Variables

You can use variables to dynamically populate text fields, like the title, footer, buttons or any other text field. You have the option to use Local Variables built-in the Support App and are MDM agnostic, or use MDM specific variables if available in your MDM solution.

Note Using Built-in Local Variables or MDM variables depends on the use case you want to achieve or the available variables and you may use both if needed.

Built-in local variables

The Support App supports local variables with device and user details and work independently from your MDM solution.

The following built-in local variables are available with an example:

Examples

Note Built-in local variables are case sensitive

MDM variables

Jamf Pro variables

When using Jamf Pro as the MDM solution, variables from Jamf Pro can also be used in the Configuration Profile values to dynamically populate text fields.

Example

More information about Jamf variables: https://learn.jamf.com/bundle/jamf-pro-documentation-current/page/Computer_Configuration_Profiles.html

How to use SF Symbols

We choose to go all the way with SF Symbols as these good looking icons are designed by Apple and give the app a native look and feel. All icons have a symbol name which you can use in the Configuration Profile. As these icons are built into macOS, it automatically shows the correct icon.

<img src="/Screenshots/how_to_use_sf_symbols.png" width="800">

MDM deployment

It is recommended to deploy the Configuration Profile first before installing the Support app.

Jamf Pro

A Jamf Pro Manifest for Jamf Pro is provided for easy configuration of all the preference keys without creating/modifying a custom Configuration Profile in XML format. Download the JSON file here

More information about the JSON Schema feature in Jamf Pro: https://docs.jamf.com/technical-papers/jamf-pro/json-schema/10.19.0/Overview.html

<img src="/Screenshots/jamf_pro_custom_schema.png" width="800">

Microsoft Intune

Configuring the Support App for Microsoft Intune is the easiest with the following steps:

<key>Title</key>
<string>Hi $LocalFullName!</string>
<key>Logo</key>
<string>/PATH/TO/IMAGE</string>
<key>LogoDarkMode</key>
<string>/PATH/TO/IMAGE</string>
<key>NotificationIcon</key>
<string>/PATH/TO/IMAGE</string>
<key>StatusBarIconNotifierEnabled</key>
<true/>
...
<img width="1158" alt="microsoft_intune_configuration" src="https://github.com/user-attachments/assets/5a69e347-2019-4316-a688-635e0285e0c4">

Installer or app bundle

Depending on your preference or MDM solution you can use either the installer or zipped app bundle. The installer includes a LaunchAgent and is the recommended method to make sure the app stays open and relaunches automatically.

Sample LaunchAgent

A sample LaunchAgent to always keep the app alive is provided here

Sample Configuration Profile

A sample Configuration Profile you can edit to your preferences is provided here

Managed Login Item

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

Logging

Logs can be viewed from Console or Terminal by filtering the subsystems nl.root3.support (Support App), nl.root3.support.helper (Privileged Helper Tool) and nl.root3.catalog (App Catalog).

An example to stream current logs in Terminal for troubleshooting:

log stream --debug --info --predicate 'subsystem CONTAINS "nl.root3.support"'

Or get logs from the last hour:

log show --last 24h --debug --info --predicate 'subsystem CONTAINS "nl.root3.support"'

Known issues

Changelog

Version 2.6

Version 2.4

Version 2.3

Version 2.2

Version 2.1

Privacy policy

We value your privacy. To protect your privacy, the Support App does not collect or send any personal data. The only outgoing network request is to send the computer's serial number to an Apple API to request the model's marketing name. This information is only kept within the app and is never collected elsewhere.

Note and disclaimer