-
Notifications
You must be signed in to change notification settings - Fork 205
v2.0 features
Erik Gomez edited this page Sep 2, 2024
·
9 revisions
Nudge v2.0 is a significant upgrade and includes more than 46 bug fixes and requested features from Mac Admins.
-
macOS 11 is now unsupported
- Please use Nudge 1.x releases for macOS 11
- Due to implementing markdown support, many of the elements within Nudge may no longer be in bold if you customize them.
- To work around this please add
**elements to these customizations - For example: The
mainContentNotevalue ofImportant Noteswould become**Important Notes** - Text Level Markdown
- To work around this please add
- The SOFA feed is opt-out, which included the new
Unsupported UI. If you do not want the Unsupported UI features, you will need to actively opt-out of these options.
- Now built on Swift 5.10, Xcode 15.4 and macOS 14
- New Xcode Scheme
-bundle-mode-profileto test profile logic-
-bundle-modehas been renamed to-bundle-mode-json
-
- You can now pass two formats of strings to
requiredInstallationDate-
2025-01-01T00:00:00Zfor UTC -
2025-01-01T00:00:00for local time - If you are using a MDM profile and passing the original
Datekey, you must change to utilizingStringas Apple requires ISO8601 formatted dates
-
- You can now pass the strings
latest,latest-supportedandlatest-minorin therequiredMinimumOSVersionkey-
latest: always force latest release and if the machine can't this version, show the new "unsupported device" user interface -
latest-supported: always get the latest version sofa shows that is supported by this device -
latest-minor: stay in the current major release and get the latest minor updates available - This requires utilizing the SOFA feed features to properly work, which is opt-out by default
- Nudge will then utilize two date integers to automatically calculate the
requiredInstallationDate-
activelyExploitedCVEsMajorUpgradeSLAunder theosVersionRequirementkey will default to 14 days -
activelyExploitedCVEsMinorUpdateSLAunder theosVersionRequirementkey will default to 14 days -
nonActivelyExploitedCVEsMajorUpgradeSLAunder theosVersionRequirementkey will default to 21 days -
nonActivelyExploitedCVEsMinorUpdateSLAunder theosVersionRequirementkey will default to 21 days -
standardMajorUpgradeSLAunder theosVersionRequirementkey will default to 28 days -
standardMinorUpdateSLAunder theosVersionRequirementkey will default to 28 days - These dates are calculated against the
ReleaseDatekey in the SOFA feed, which is UTC formatted. Local timezones will not be supported with the automatic sofa feed unless you use a custom feed and change this value yourself, following ISO-8601 date formats- To artificially delay the SOFA nudge events, see the details below for
nudgeMajorUpgradeEventLaunchDelayandnudgeMinorUpdateEventLaunchDelay
- To artificially delay the SOFA nudge events, see the details below for
- If you'd like to not have nudge events for releases without any known CVEs, please configure the
disableNudgeForStandardInstallskey underoptionalFeaturesto true
-
-
- You can now disable the
Days Remaining To Update:item on the left side of the UI.- Configure the
showDaysRemainingToUpdatekey underuserInterfaceto false
- Configure the
-
screenshotDisplayview had a bug that may result in the screenshot being partially cut off or zoomable -
fallbackLanguagewould return the wrong language even when specified in the configuration- Fixes 582
- The timer controller logic was utilizing hours remaining vs seconds, which resulted in the
elapsedRefreshCyclebeing used at the final hour of the nudge event vs theimminentRefreshCycle. This has been corrected to calculate the seconds remaining.- Fixes 568
- More descriptive logs when loading json/mdm profile keys
- Refactor portions of the
softwareupdatelogic to reduce potential errors - Fixed errors when moving to Swift 5.10
- Fixed wrong
requiredInstallationDatecalculations when using Non-Gregorian calendars - Fixed UI logic when requiredInstallationDate is under an hour and
allowLaterDeferralButtonis set to false- Issue 475
- To artificially change the
requredInstallationDatethereby giving your users a default grace period for all Nudge events updates, please configure thenudgeMajorUpgradeEventLaunchDelayandnudgeMinorUpdateEventLaunchDelaykeys underuserExperiencein amount of days. - A local image path can now be specified for the notification event when Nudge terminates and application
- Please configure the
applicationTerminatedNotificationImagePathkey underuserInterface - Due to limitations within Apple's API, a local path is only supported at this time
- Please configure the
- An admin can now alter the text when Nudge terminates and application
- Please configure the
applicationTerminatedTitleTextandapplicationTerminatedBodyTextkeys under theupdateElementskey inUserInterface
- Please configure the
- Remote URLs can now be used on
iconDarkPath,iconLightPath,screenShotDarkPathandscreenShotLightPath- Please note that these files will be downloaded each time Nudge is ran and there is currently not a way to cache these objects.
- If these files fail to download, a default company logo will be shown.
- Actively Exploited CVEs in the left sidebar
- To disable this item, please configure the
showActivelyExploitedCVEskey underuserInterfaceto false
- To disable this item, please configure the
- An admin can now allow users to move the Nudge window with
userExperiencekeyallowMovableWindow - To ease testing, you can now pass
-disable-random-delayas an argument to ignore therandomDelaykey if it is set by a JSON or mobileconfig - Basic SwiftUI support for Markdown text options
- Utilizing Apple's markdown features, you can now utilize, bold, italic, underline, subscript and url links directly into any of the text fields
-
SOFA feed support
- Set the
utilizeSOFAFeedkeyfalseunderoptionalFeaturesto disable this feature - Nudge will by default check the feed every 24 hours and save a cache file under
~/Library/Application Support/com.github.macadmins.Nudge/sofa-macos_data_feed.json - In order to change this, please configure the
refreshSOFAFeedTimekey underoptionalFeaturesin seconds - If you are utilizing a custom sofa feed, please configure the
customSOFAFeedURLkey underoptionalFeatures
- Set the
- "Unsupported device" UI in standard mode that utilizes the SOFA feed
- Set the
attemptToCheckForSupportedDevicekeyfalseunderoptionalFeaturesto disable this feature - There are new keys to set all of text fields:
actionButtonTextUnsupported,mainContentHeaderUnsupported,mainContentNoteUnsupported,mainContentSubHeaderUnsupported,mainContentTextUnsupported,subHeaderUnsupportedunder theupdateElementskey inUserInterface -
unsupportedURLandunsupportedURLscan change the information button itself, but it will remain in theosVersionRequirementkey withunsupportedURLsandunsupportedURLs. - An icon will appear as an overlay on top of the company image to further emphasize the device is no longer supported
- Set the
- An admin can now show the
requiredInstallationDateas a item on the left side of nudge.- To enable this, please configure the
showRequiredDatekey underuserInterfaceto true - You can also expirement with the format of this date through the key
requiredInstallationDisplayFormatunderuserInterface - Be aware that the format you desire may not look good on the UI.
- To enable this, please configure the
- Nudge can now honor the current cycle timers when user's press the
Quitbutton.- Set the
honorCycleTimersOnExitkey totrueunderoptionalFeaturesto enable this feature - Issue 548
- Set the
- When the device is running macOS 12.3 or higher, Nudge uses the delta logic for macOS Upgrades
- Nudge can now bypass activations and re-activations when a macOS update is
Downloading,PreparingorStagedfor installation. - Nudge can now attempt to honor DoNotDisturb/Focus times
- To enable this, please configure the
honorFocusModeskey inoptionalFeaturesto true - This is an expiremental feature and may not work due to significant changes that Apple has designed for detecting these events.
- To enable this, please configure the
- Nudge now attempts to reload the preferences if the MDM profile is updated
- Issue 370
{
"optionalFeatures": {
"acceptableUpdatePreparingUsage": true,
"disableNudgeForStandardInstalls": false,
"honorFocusModes": true,
"honorCycleTimersOnExit": true,
"refreshSOFAFeedTime": 86400,
"utilizeSOFAFeed": true,
"attemptToCheckForSupportedDevice": true
},
"osVersionRequirements": [
{
"requiredMinimumOSVersion": "latest",
"activelyExploitedCVEsMajorUpgradeSLA": 14,
"activelyExploitedCVEsMinorUpdateSLA": 14,
"nonActivelyExploitedCVEsMajorUpgradeSLA": 21,
"nonActivelyExploitedCVEsMinorUpdateSLA": 21,
"standardMajorUpgradeSLA": 28,
"standardMinorUpdateSLA": 28,
"unsupportedURL": "https://support.apple.com/unsupported",
"unsupportedURLs": [
{
"_language": "en",
"unsupportedURL": "https://support.apple.com/unsupported-en"
},
{
"_language": "es",
"unsupportedURL": "https://support.apple.com/unsupported-es"
}
]
}
],
"userExperience": {
"allowMovableWindow": true,
"nudgeMajorUpgradeEventLaunchDelay": 7,
"nudgeMinorUpdateEventLaunchDelay": 2
},
"userInterface": {
"applicationTerminatedNotificationImagePath": "/path/to/local/path.png",
"iconDarkPath": "https://example.com/images/logoDark.png",
"iconLightPath": "https://example.com/images/logoLight.png",
"screenShotDarkPath": "https://example.com/images/screenShotDark.png",
"screenShotLightPath": "https://example.com/images/screenShotLight.png",
"showActivelyExploitedCVEs": true,
"showDaysRemainingToUpdate": false,
"showRequiredDate": true,
"requiredInstallationDisplayFormat": "MM/dd/yyyy",
"updateElements": [
{
"_language": "en",
"actionButtonTextUnsupported": "Replace Your Device",
"applicationTerminatedTitleText": "Application terminated",
"applicationTerminatedBodyText": "Please update your device to use this application",
"mainContentHeaderUnsupported": "Your device is no longer capable of receiving critical security updates",
"mainContentNoteUnsupported": "**Important Notes**",
"mainContentSubHeaderUnsupported": "Please work with your local IT team to obtain a replacement device",
"mainContentTextUnsupported": "A fully up-to-date device is required to ensure that IT can accurately protect your device.",
"subHeaderUnsupported": "A friendly reminder from your local IT team"
},
{
"_language": "es",
"actionButtonTextUnsupported": "Reemplazar su dispositivo",
"applicationTerminatedTitleText": "Aplicación terminada",
"applicationTerminatedBodyText": "Actualice su dispositivo para usar esta aplicación",
"mainContentHeaderUnsupported": "Su dispositivo ya no es capaz de recibir actualizaciones críticas de seguridad",
"mainContentNoteUnsupported": "**Notas importantes**",
"mainContentSubHeaderUnsupported": "Trabaje con su equipo local de TI para obtener un dispositivo de reemplazo",
"mainContentTextUnsupported": "Se requiere un dispositivo completamente actualizado para garantizar que TI pueda proteger su dispositivo con precisión.",
"subHeaderUnsupported": "Un recordatorio amistoso de su equipo de IT local"
}
]
}
}