Support Companion is a macOS helper application, designed to empower end-users by providing them with quick and easy access to crucial information and actions. This application is built to streamline a variety of tasks, eliminating the need for extensive searching and complex navigation. Support Companion is equipped with a range of features that enhance user productivity.
It integrates with Munki and Intune for application information and updates, providing a unified platform for managing these services. Users can view system information such as macOS version, model, and serial number at a glance, and perform actions such as changing passwords, rebooting, and more with just a few clicks.
This initial version relies on Munki and/or Intune for application information and updates. If you are not using Munki or Intune, this app may not provide as detailed information at the moment.
If there are wishes to add other MDM specific actions and information, please let me know. I am open to adding more MDM providers in the future if there is a demand for it. I am only able to test with Intune, so if you have another MDM provider, I would appreciate your help in testing.
- Actions: Perform actions such as Change Password, Kill Intune MDM Agent, gather logs, reboot and more.
- System Information: Quickly view system information such as macOS version, model, serial number and last boot time.
- Evergreen: See which Munki catalogs the devices is a member of (requires a local device manifest with the SN as name).
- Battery: View battery information such as cycle count and health.
- MDM: View MDM information such as enrollment status and enrollment date.
- Disk: View disk information such as disk space and FileVault status.
- Application Patching Progress: View the progress of patching applications.
- Pending Updates: View pending updates for applications.
- Applications: View installed applications and their versions.
- Identity: View the current user's profile information and Kerberos SSO or Platform SSO information.
- Desktop Info: Show information on the desktop such as device name, serial number, macOS version, and IP address.
- Custom Widgets: Add custom widgets to the Home view, this allows for displaying information specific to your organization.
- Self Service: Shows all actions in the app configured in the MDM profile. This allows for a self-service experience for the user using the UI and not only the menu bar icon.
The app is localized to Swedish
, Norwegian
, French
and German
. The app will display in the user's preferred language if it is set to one of these languages in macOS. If the user's preferred language is not one of these, the app will default to English.
Contributions to other languages are welcome!
- Obtain the latest PKG installer from releases.
- Download and install the MacAdmins Python package from here.
- This is required for the app to run the scripts such as collecting MDM information.
- Run the PKG installer.
- Optional
- Install the Launch Agent package attached to the release to automatically start and keep the app running.
The app is installed in the /Applications/Utilities
folder and the following files and folders are installed:
/Applications/Utilities/SupportCompanion.app
- The app bundle/Library/Application Support/SupportCompanion
- Folder containing the following files:Scripts
- Scripts used to get information such as MDM status- JSON files generated by the scripts for the app to read
/Library/LaunchDaemons/com.almenscorner.supportcompanion.plist
- LaunchDaemon for the app to run the scripts~/Library/Application Support/SupportCompanion/
- Folder containing app data such as notification time stamps
An uninstaller script is included in the app bundle. The script can be found in the following location:
/Applications/Utilities/Support Companion.app/Contents/Resources/Uninstall.sh
The Launch Agent provided as a signed, notarized and stapled package will, if installed and loaded:
- Start the app if it is not running
- Start the app again if quit by the user
- Start the app on login
This Launch Agent is optional and you are free to create your own Launch Agent if you prefer.
The suite package is a signed, notarized and stapled package that contains the app and the Launch Agent package. This package is provided for convenience and can be used to install the app and the Launch Agent at the same time.
A recipe for AutoPkg is available here.
When configuring icons for custom widgets or actions, the icon name should be a material icon name from https://pictogrammers.com/library/mdi/. For example apple-finder would be AppleFinder.
When the app is started, a menu bar icon will appear. Clicking the icon will show available actions to take like opening the app. No dock icon will be shown for the app and the app should be accessed from the menu bar icon. This is to keep the app out of the way and not clutter the dock and make it easy for admins to start the app from a terminal or script without showing the app to the end-user. Initializing the app this way sends notifications to the user if they have available software updates for example.
Logs can be viewed by running the following command in the terminal:
log stream --debug --info --predicate 'subsystem contains "com.almenscorner.supportcompanion"'
Or by searching for subsystem: com.almenscorner.supportcompanion
in the Console app.
Many aspects of the app can be configured using MDM profiles, the folloing keys are available:
Key | Type | Default | Required | Description |
---|---|---|---|---|
BrandName |
String | None | False | Configures the brand name shown in the menu |
BrandColor |
String | Blue | False | Configures the brand color shown in the app, available colors are: Blue, Green, Red, Orange |
BrandLogo |
String | None | False | Configures the brand logo shown in the apps side menu. Specify a local path or base64 string |
SupportPageUrl |
String | None | False | Configures the URL to open when the user clicks on the Get Support button |
ChangePasswordUrl |
String | None | False | Configures the URL to open when the user clicks on the Change Password button |
ChangePasswordMode |
String | local | False | Configures the mode for the Change Password button, available modes are: local , SSOExtension , url |
SupportEmail |
String | None | False | Configures the email address shown when the user clicks on the Support Info button |
SupportPhone |
String | None | False | Configures the phone number shown when the user clicks on the Support Info button |
HiddenWidgets |
Array | None | False | Configures which widgets to hide, available widgets are: DeviceInfo , MunkiPendingApps , MunkiUpdates , IntunePendingApps , IntuneUpdates , Storage , MdmStatus , Actions , Battery , EvergreenInfo |
HiddenActions |
Array | None | False | Configures which actions to hide, available actions are: Support , ManagedSoftwareCenter , ChangePassword , Reboot , KillAgent , SoftwareUpdates , GatherLogs |
NotificationInterval |
Integer | 4 | False | Configures the interval for notifications in hours for Application Updates and Software Updates notifications. Setting to 0 disables notifications |
NotificationTitle |
String | Support Companion | False | Configures the title for notifications |
NotificationImage |
String | None | False | Configures an image to add to notifications. Path should be specified |
SoftwareUpdateNotificationMessage |
String | You have software updates available. Take action now! \ud83c\udf89 | False | Configures the message for notifications for Software Updates notifications |
SoftwareUpdateNotificationButtonText |
String | Details \ud83d\udc40 | False | Configures the button text for notifications for Software Updates notifications |
AppUpdateNotificationMessage |
String | You have app updates available. Take action now! \ud83c\udf89 | False | Configures the message for notifications for App Updates notifications |
AppUpdateNotificationButtonText |
String | Details \ud83d\udc40 | False | Configures the button text for notifications for App Updates notifications |
CustomColors |
Array | None | False | Configures custom colors for the app, should be specified in hex format, see example below. Do not use BrandColor in conjunction with this key |
IntuneMode |
Bool | False | False | Configures the app to use Intune for application information. Only supports PKG and DMG type apps, not LOB. |
LogFolders |
Array | /Library/Logs/Microsoft | False | Configures the log folders to gather logs from. Only used when gathering logs. |
Actions |
Array | None | False | Configures custom actions to add to the tray menu. See example below. |
ShowMenuToggle |
Bool | True | False | Configures whether to show the menu toggle button in the apps side menu. |
ShowDesktopInfo |
Bool | False | False | Configures whether to show information on the desktop. |
DesktopPosition |
String | TopRight | False | Configures the position of the desktop info, available positions are: TopLeft , TopRight , BottomLeft , BottomRight |
DesktopInfoLevel |
String | Full | False | Configures the level of information to show on the desktop, available levels are: Minimal , Hardware , Full , Custom |
DesktopInfoCustomItems |
Array | None | False | If DesktopInfoLevel is set to Custom , use this array to determine which information to show. Available info are: HostName , Model , SerialNumber , Processor , IpAddress , MemSize , OsBuild , OsVersion , LastBootTime , StorageInfo , SupportPhone , SupportEmail , Separator |
DesktopInfoBackgroundColor |
String | Transparent | False | Configures the background color for the desktop info. Configure using Hex format |
DesktopInfoBackgroundOpacity |
Real | 1.0 | False | Configures the background opacity for the desktop info. Configure a value between 1.0 - 0.1 |
DesktopInfoColorHighlight |
Bool | True | False | Configures whether to highlight the text in the desktop info. |
DesktopInfoFontSize |
Integer | 17 | False | Configures the font size for the desktop info. |
CustomWidgetsPath |
String | None | False | Configures a path to a JSON file containing custom widgets to show on the Home view. |
SystemProfilerApps |
Bool | None | False | Configures the app to list all applications installed under /Applications and their versions. Useful if Munki or Intune is not used. |
To switch from Munki to Intune for application information, add the following key to the profile:
<key>IntuneMode</key>
<true/>
<?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>
<key>PayloadContent</key>
<array>
<dict>
<key>BrandName</key>
<string>AwesomeCorp</string>
<key>ChangePasswordMode</key>
<string>SSOExtension</string>
<key>CustomColors</key>
<array>
<dict>
<key>PrimaryColor</key>
<string>#00A0D0</string>
<key>AccentColor</key>
<string>#45637A</string>
</dict>
</array>
<key>Actions</key>
<array>
<dict>
<key>Name</key>
<string>Restart clipboard 🥹</string>
<key>Command</key>
<string>killall pboard</string>
</dict>
<dict>
<key>Name</key>
<string>Restart Intune Agent ⚡️</string>
<key>Command</key>
<string>/usr/bin/osascript -e 'do shell script \"sudo killall IntuneMdmAgent\" with administrator privileges'</string>
</dict>
<dict>
<key>Name</key>
<string>️Some awesome action</string>
<key>Command</key>
<string>echo "I am awesome"</string>
<!-- Optional key to specify an icon for the action which will display in the self service view -->
<key>Icon</key>
<string>AppleFinder</string>
</dict>
</array>
<key>NotificationTitle</key>
<string>AwesomeCorp IT</string>
<key>PayloadDisplayName</key>
<string>SupportCompanion</string>
<key>PayloadIdentifier</key>
<string>SupportCompanion</string>
<key>PayloadType</key>
<string>SupportCompanion</string>
<key>PayloadUUID</key>
<string>a7a0d79f-1cf0-42f2-bc7e-e67d7413a3c5</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>SupportEmail</key>
<string>demo@example.com</string>
<key>SupportPhone</key>
<string>123-456-789</string>
<key>SupportUrl</key>
<string>https://awesomecorp.support</string>
</dict>
</array>
<key>PayloadDisplayName</key>
<string>SupportCompanion</string>
<key>PayloadIdentifier</key>
<string>9c4a8e5e-4c70-4b82-83f7-44a053c146f4</string>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>3D47F3E6-62ED-4668-A30F-6DA1DAE87B18</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>