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.
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!
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/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 stampsAn 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:
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>