I’m happy to announce my first complete public project for Mac Admins. Renew is a flexible and highly configurable tool for admins to notify their users when their system uptime is past their recommended threshold.
Renew utilizes SwiftDialog to provide native macOS system notifications and beautiful native looking macOS dialog windows. This project would not have been possible without this awesome contribution from Bart Reardon.
For full documentation, deployment examples, and screenshots check out the wiki on our Github: https://github.com/SecondSonConsulting/
To install Renew and try it out, grab the package from the Releases page and then download one of the Sample Configuration files and look at the wiki for Required and Optional Arguments as well as the Command Line Arguments for Testing
Renew.sh v1.0 – Patch Notes
- First production release!
- Gently (or not so much) urge your users to restart their computers on a regular basis
- Utilize the many amazing features of SwiftDialog to make beautiful native macOS windows and notifications with your branding and messaging of choice.
- Control the branding and operation entirely through a Mobile Configuration file
- Profiles Manifest support (which feeds into iMazing Profile Editor, pending pull request on that project)
- Installomator support (pending pull request on that project)
- Default package includes a Launch Agent to run the script every 30 minutes
- Alternate package does not include a Launch Agent. Configure your own custom scheduling to suit your needs
- Visit the wiki for detailed documentation and deployment scenarios
- Default language support for 5 languages (and will add more upon submission)
- Ask questions or get community support in the #renew channel on the Mac Admins Slack
Anyone that’s worked helpdesk can tell you that there’s a reason the phrase “Did you turn it off and on again?” is a meme. All software has bugs and edge cases. Giving your agents and applications a chance to start fresh after weeks of uptime can avoid common issues or even just be a bandaid fix for things that are outside of your control as an admin :::coughcoughsoftwareupdatedcoughcough:::
In addition to the SwiftDialog dependency, Renew is made up of 3 parts:
- A zsh shell script
- A configuration profile
- This can be delivered via MDM or manually applied
- A means of launching the script on a regular interval.
- A LaunchAgent with default scheduling is provided, but Renew is built to tolerate alternate scheduling/launching methods.
Renew can be tuned both visually and operationally for your environment. Nearly all SwiftDialog options can be passed from your configuration file, allowing you to use company branding, built-in Apple SF Symbols, and differentiate between light mode dark mode icons.
By default, Renew works on a deferral system. Your user will always get the designated number of macOS Notification Center events and/or friendly Dialog messages before entering “Aggressive Mode” where the only choice to dismiss the window is to consent to a restart.
Renew will never forcibly restart a device. Clicking the Restart Now button will make a call to macOS to initiate a Restart sequence that mimics the user choosing to restart from the Apple menu. This means they’ll get a 30 second countdown, and a chance to save any open documents or interrupt the Restart sequence.
Visually, you can customize your Renew notifications/dialogs using any of the ample options provided by the SwiftDialog project.
After testing and discussing with colleagues and fellow Mac Admins, we’re deploying Renew in-house and with our clients utilizing a Deadline configuration. We’ll start giving macOS Notification Center prompts about ever 8 hours after 14 days of uptime, and once the device reaches 21 days of uptime we’ll force “Aggressive Mode” to get devices restarted.
… to the Mac Admins community for encouragement, guidance, and testing on this project.
Once again, Bart Reardon for making this project awesome and adding features and fixes along the way that helped me accomplish my goals here.
Second Son Consulting for giving me time and support to develop this for us and for agreeing to let me share my project with the community.
Special thanks to everyone that contributed ideas and help as I expanded my shell scripting skills to accomplish this (Pico, Brock Walters, Josh Rickets, Adam Codega, ScriptingOSX, Dan Snelson, and so many more I’m probably forgetting.)