-
Notifications
You must be signed in to change notification settings - Fork 191
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
mainContentNote
value ofImportant Notes
would 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-profile
to test profile logic-
-bundle-mode
has been renamed to-bundle-mode-json
-
- You can now pass two formats of strings to
requiredInstallationDate
-
2025-01-01T00:00:00Z
for UTC -
2025-01-01T00:00:00
for local time - If you are using a MDM profile and passing the original
Date
key, you must change to utilizingString
as Apple requires ISO8601 formatted dates
-
- You can now pass the strings
latest
,latest-supported
andlatest-minor
in therequiredMinimumOSVersion
key-
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
-
activelyExploitedCVEsMajorUpgradeSLA
under theosVersionRequirement
key will default to 14 days -
activelyExploitedCVEsMinorUpdateSLA
under theosVersionRequirement
key will default to 14 days -
nonActivelyExploitedCVEsMajorUpgradeSLA
under theosVersionRequirement
key will default to 21 days -
nonActivelyExploitedCVEsMinorUpdateSLA
under theosVersionRequirement
key will default to 21 days -
standardMajorUpgradeSLA
under theosVersionRequirement
key will default to 28 days -
standardMinorUpdateSLA
under theosVersionRequirement
key will default to 28 days - These dates are calculated against the
ReleaseDate
key 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
nudgeMajorUpgradeEventLaunchDelay
andnudgeMinorUpdateEventLaunchDelay
- 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
disableNudgeForStandardInstalls
key underoptionalFeatures
to true
-
-
- You can now disable the
Days Remaining To Update:
item on the left side of the UI.- Configure the
showDaysRemainingToUpdate
key underuserInterface
to false
- Configure the
-
screenshotDisplay
view had a bug that may result in the screenshot being partially cut off or zoomable -
fallbackLanguage
would 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
elapsedRefreshCycle
being 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
softwareupdate
logic to reduce potential errors - Fixed errors when moving to Swift 5.10
- Fixed wrong
requiredInstallationDate
calculations when using Non-Gregorian calendars - Fixed UI logic when requiredInstallationDate is under an hour and
allowLaterDeferralButton
is set to false- Issue 475
- To artificially change the
requredInstallationDate
thereby giving your users a default grace period for all Nudge events updates, please configure thenudgeMajorUpgradeEventLaunchDelay
andnudgeMinorUpdateEventLaunchDelay
keys underuserExperience
in amount of days. - A local image path can now be specified for the notification event when Nudge terminates and application
- Please configure the
applicationTerminatedNotificationImagePath
key 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
applicationTerminatedTitleText
andapplicationTerminatedBodyText
keys under theupdateElements
key inUserInterface
- Please configure the
- Remote URLs can now be used on
iconDarkPath
,iconLightPath
,screenShotDarkPath
andscreenShotLightPath
- 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
showActivelyExploitedCVEs
key underuserInterface
to false
- To disable this item, please configure the
- An admin can now allow users to move the Nudge window with
userExperience
keyallowMovableWindow
- To ease testing, you can now pass
-disable-random-delay
as an argument to ignore therandomDelay
key 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
utilizeSOFAFeed
keyfalse
underoptionalFeatures
to 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
refreshSOFAFeedTime
key underoptionalFeatures
in seconds - If you are utilizing a custom sofa feed, please configure the
customSOFAFeedURL
key underoptionalFeatures
- Set the
- "Unsupported device" UI in standard mode that utilizes the SOFA feed
- Set the
attemptToCheckForSupportedDevice
keyfalse
underoptionalFeatures
to disable this feature - There are new keys to set all of text fields:
actionButtonTextUnsupported
,mainContentHeaderUnsupported
,mainContentNoteUnsupported
,mainContentSubHeaderUnsupported
,mainContentTextUnsupported
,subHeaderUnsupported
under theupdateElements
key inUserInterface
-
unsupportedURL
andunsupportedURLs
can change the information button itself, but it will remain in theosVersionRequirement
key withunsupportedURLs
andunsupportedURLs
. - 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
requiredInstallationDate
as a item on the left side of nudge.- To enable this, please configure the
showRequiredDate
key underuserInterface
to true - You can also expirement with the format of this date through the key
requiredInstallationDisplayFormat
underuserInterface
- 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
Quit
button.- Set the
honorCycleTimersOnExit
key totrue
underoptionalFeatures
to 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
,Preparing
orStaged
for installation. - Nudge can now attempt to honor DoNotDisturb/Focus times
- To enable this, please configure the
honorFocusModes
key inoptionalFeatures
to 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"
}
]
}
}