Skip to content

Migrating from 3.5.0

This document maps every documented App Auto-Patch preference key from the shell-script version (3.5.0) to the native macOS app (4.0). Both versions read from the same xyz.techitout.appAutoPatch preference domain, so most keys carry over byte-for-byte — but 4.0 has added managed keys for background patching, notifications, deferrals, discovery filters, and the menu bar. Those are listed under 4.0-Only User-Facing Keys.

Sources:

  • ✅ = key loaded and honored.
  • ⚠️ = recognized but with caveats noted in the table.
  • ❌ = not loaded by this version.
  • Keys are presented case-sensitive, exactly as the consumer reads them.

Feature 3.5.0 key 4.0 key Notes
Display name override AppTitle ✅ AppTitle ✅ Shown in place of “App Auto-Patch” on the dashboard window, menu bar, notifications, and other user-facing copy. A missing or blank value stays “App Auto-Patch”. This does not rename App Auto-Patch.app or the helper executables.
Interactive level InteractiveMode ✅ InteractiveMode ❌ Retired in 4.x. The 3-mode 3.5.0 concept (silent / silent-discovery+interactive-patch / full-interactive) was a swiftDialog scripting artifact; the native app is always interactive when the user opens the dashboard, and silence is now per-surface. Silent self-update piggybacks on BackgroundPatchClosedAppsEnabled — if the user has opted into background patching, AAP self-updates also install silently; otherwise the dashboard banner is shown. Background patching is independently gated by BackgroundPatchClosedAppsEnabled. Update All always presents the deferral sheet (subject to DeadlineCountHard / DeadlineDaysHard force-install branches). MDM profiles that still ship InteractiveMode are simply ignored.
Patch-week start day PatchWeekStartDay ✅ PatchWeekStartDay ✅ The numbering differs. 3.5.0: 1 = Monday … 7 = Sunday. 4.0: 1 = Sunday … 7 = Saturday (a 0 is read as Sunday), default 2 (Monday). A value carried over from 3.5.0 therefore starts the cycle one day earlier, for example 3 is Wednesday in 3.5.0 and Tuesday in 4.0.
Days until completion-status reset DaysUntilReset ✅ DaysUntilReset ✅ Integer days.
Skip Zoom labels during a call ZoomCallActiveCheck ✅ ZoomCallActiveCheck ✅ Default true in both versions.
Self-update check (Sparkle / script self-update) SelfUpdateEnabled ✅ SelfUpdateEnabled ✅ 4.0 honors this flag, but rather than running Sparkle, it uses the Installomator label named by SelfUpdateLabel (default appautopatch) to update AAP itself through the same XPC pipeline used for every other managed app. When background patching of closed apps is enabled, the self-update installs silently; otherwise the dashboard shows an Update Now banner plus a best-effort notification if permission has already been granted.
Self-update override (4.0-specific) — AppSelfUpdateEnabled ✅ 4.0-only convenience key; if set, takes precedence over SelfUpdateEnabled.
Self-update frequency SelfUpdateFrequency ✅ SelfUpdateFrequency ✅ daily (default) / weekly / monthly. Drives the cadence of the new SelfUpdateScheduler.
Self-update Installomator label — SelfUpdateLabel ✅ 4.0-only. Installomator label used to update AAP itself. Default appautopatch. Override only if you ship AAP through a private Installomator fork that uses a different label name.
Feature 3.5.0 key 4.0 key Notes
Ignored labels IgnoredLabels ✅ IgnoredLabels (preferred) ✅ / AppIgnoredLabels (legacy fallback) ✅ 4.0 reads IgnoredLabels first so an existing 3.5.0 configuration profile keeps working. The value may be a space-separated string, an array containing one space-separated string, or an array with one label per string. A wildcard such as microsoft* stays one label. The same three forms apply to RequiredLabels and OptionalLabels. AppIgnoredLabels is honored on read only as a one-shot back-compat fallback for users who saved Settings on an early 4.0 build that wrote it; the Settings UI now writes back to IgnoredLabels and removes any stale AppIgnoredLabels from the local plist on save.
Required labels RequiredLabels ✅ RequiredLabels ✅ Same key. Always installed/refreshed regardless of installation status.
Optional labels OptionalLabels ✅ OptionalLabels ✅ Same key. Installed only if app is already on disk.
Feature 3.5.0 key 4.0 key Notes
Disable post-workflow relaunch WorkflowDisableRelaunch ✅ WorkflowDisableRelaunch ✅
Disable app discovery WorkflowDisableAppDiscovery ✅ WorkflowDisableAppDiscovery ⚠️ In 4.0 this only makes the root helper skip its scheduled discovery (the DiscoveryFrequency schedule). Manual discovery, Check for Updates and background patching ignore it. Leaving DiscoveryFrequency unset or 0 has the same effect, so the key is not in the profile manifests.
Automatic discovery frequency (hours) DiscoveryFrequency ✅ DiscoveryFrequency ✅ Hours between automatic discovery + update checks. Unset or 0 leaves the schedule off. In 3.x this also required WorkflowDisableRelaunch and WorkflowScheduledDiscovery. In 4.0 DiscoveryFrequency stands alone and is owned by the root helper. Mid-cycle runs refresh the GUI and menu bar only; notifications and the deferral dialog wait until NextAutoLaunch. A cadence reset (monthly or DaysUntilReset) rediscovers immediately with the full notify/dialog path.
Install-Now patching status action WorkflowInstallNowPatchingStatusAction ✅ WorkflowInstallNowPatchingStatusAction ✅ Values: NEVER / ALWAYS / SUCCESS.
Update All errors complete the cycle — WorkflowUpdateAllErrorCompletesPatching Default false. When true, an Update All that finishes with one or more errors still records the patching cadence complete until the next reset, and App Auto-Patch does not retry. When false, the still-pending apps are tried again after DeferralTimerError minutes.
Stage installers before install WorkflowStageUpdates ✅ (added in 3.6, default false) WorkflowStageUpdates ✅ (default true) Same key. When on, every detected update is downloaded to /private/tmp/AAPStage (root-owned, mode 0700) before a background patch of closed apps or any other install. The install then passes downloadURL=file://… so the file is not downloaded again. updateronly labels are skipped. A .version sidecar is replaced when discovery finds a newer build. 4.0 turns this on unless an admin sets the key to false.
Feature 3.5.0 key 4.0 key Notes
Focus deferral count DeadlineCountFocus ✅ DeadlineCountFocus ✅ Maximum automatic focus deferrals. Interchangeable with the day limit. Clamped to at least 1 below DeadlineCountHard.
Hard deferral count DeadlineCountHard ✅ DeadlineCountHard ✅
Focus deferral days DeadlineDaysFocus ✅ DeadlineDaysFocus ✅ Maximum days of automatic focus deferrals from the cycle start. Clamped to at least 1 below DeadlineDaysHard.
Hard deferral days DeadlineDaysHard ✅ DeadlineDaysHard ✅
Default deferral timer (mins) DeferralTimerDefault ✅ DeferralTimerDefault ✅
Deferral menu options DeferralTimerMenu ✅ DeferralTimerMenu ✅ Comma-separated minutes string, e.g. 30,60,1440.
Focus deferral timer DeferralTimerFocus ✅ DeferralTimerFocus ✅ Minutes for one automatic focus deferral. Default 60.
Focus deferral toast — FocusDeferralNotificationsEnabled Default false. The dialog stays hidden either way.
Ignore display-sleep apps — (added in 3.6 as IgnoreDNDApps) IgnoreDNDApps Comma-separated process names. coreaudiod is always ignored.
Error-driven deferral timer DeferralTimerError ✅ DeferralTimerError ✅ Minutes before another attempt after an Update All finishes with errors. Default 60. Values below 1 wait 1 minute. This is the retry wait; DialogTimeoutDeferral remains the on-screen dialog countdown.
Workflow relaunch timer DeferralTimerWorkflowRelaunch ✅ DeferralTimerWorkflowRelaunch ✅
Feature 3.5.0 key 4.0 key Notes
Custom dialog icon (path/URL) DialogIcon ✅ DialogIcon ✅
Force dialogs on top DialogOnTop ✅ DialogOnTop ✅
Deferral dialog timeout (sec) DialogTimeoutDeferral ✅ DialogTimeoutDeferral ✅
Deferral dialog timeout action DialogTimeoutDeferralAction ✅ DialogTimeoutDeferralAction ✅ Defer or Continue.
Use overlay icon (swiftDialog) UseOverlayIcon ✅ UseOverlayIcon ✅ swiftDialog-specific in 3.5.0; 4.0 stores the value but renders dialogs natively, so the overlay style differs.
Auto-close dialog after completion UnattendedExit ✅ UnattendedExit ✅
Auto-close timeout (sec) UnattendedExitSeconds ✅ UnattendedExitSeconds ✅
Feature 3.5.0 key 4.0 key Notes
Raw Installomator options InstallomatorOptions ✅ InstallomatorOptions ✅ 4.0’s Settings UI also surfaces these as typed controls (NOTIFY, BLOCKING_PROCESS_ACTION, LOGO, etc.) but writes them back to this same string.
Installomator branch InstallomatorVersion ✅ InstallomatorVersion ✅ Main / Release / Custom.
Custom Installomator repo path InstallomatorVersionCustomRepoPath ✅ InstallomatorVersionCustomRepoPath ✅
Custom Installomator branch InstallomatorVersionCustomBranchName ✅ InstallomatorVersionCustomBranchName ✅
Disable Installomator self-update InstallomatorUpdateDisable ✅ InstallomatorUpdateDisable ✅ When false (the default), 4.0 re-downloads the configured InstallomatorVersion if the installed stamp differs. main and custom compare the branch commit. release compares fragments/version.sh with the latest tag. When true, 4.0 leaves Installomator.sh and fragments/ alone. TRUE / FALSE strings are accepted. Turning it off while the script is missing retries within a minute.
GitHub API authentication GitHubAPIAuthEnabled (3.7.0, managed only) GitHubAPIAuthEnabled ✅ When true, api.github.com requests that check Installomator send GitHubAPIToken. Default false. TRUE / FALSE strings are accepted. 4.0 also exposes this in Settings. A managed value still wins.
GitHub API token GitHubAPIToken (3.7.0, managed only) GitHubAPIToken ✅ Personal access token used when authentication is on. 4.0 stores it from Settings as well as from a profile. The value is not written to the log.
Remove Installomator after run RemoveInstallomatorPath ✅ RemoveInstallomatorPath ✅
Version comparison method VersionComparisonMethod ✅ VersionComparisonMethod ✅ IS_AT_LEAST (default) or EQUAL_TO.
Allow Installomator DEBUG fallback VersionComparisonInstallomatorFallback ✅ VersionComparisonInstallomatorFallback ✅
Per-label Installomator DEBUG timeout (sec) — installomatorVersionCheckTimeoutSeconds ⚠️ 4.0-only. Currently default-only, no MDM key wired in PreferenceManager yet.
Per-label DEBUG attempts — installomatorVersionCheckMaxAttempts ⚠️ Same — code constant, not yet a managed key.
Discovery concurrency — discoveryMaxConcurrentLabels ⚠️ Same — code constant.
Feature 3.5.0 key 4.0 key Notes
Convert apps in /Users/* ConvertAppsInHomeFolder ✅ ConvertAppsInHomeFolder ✅
Ignore apps in /Users/* IgnoreAppsInHomeFolder ✅ IgnoreAppsInHomeFolder ✅
Feature 3.5.0 key 4.0 key Notes
Monthly cadence enabled MonthlyPatchingCadenceEnabled ✅ MonthlyPatchingCadenceEnabled ✅
Ordinal week MonthlyPatchingCadenceOrdinalValue ✅ MonthlyPatchingCadenceOrdinalValue ✅ `first
Weekday MonthlyPatchingCadenceWeekdayIndex ✅ MonthlyPatchingCadenceWeekdayIndex ✅ sunday–saturday.
Local start time MonthlyPatchingCadenceStartTime ✅ MonthlyPatchingCadenceStartTime ✅ HH:MM:SS. Default 09:00:00.

Note: monthly cadence is fully wired as of build 48. PatchingCadenceManager computes the Nth-weekday-of-month anchor and DeferralWatcher advances the cycle when the anchor rolls forward, even without a prior successful patch run (the stale-anchor fix shipped in build 49). No additional profile keys are needed beyond what is documented above.

Feature 3.5.0 key 4.0 key Notes
Webhook mode WebhookFeature ✅ WebhookFeature ✅ OFF, ALL, FAILURES (case-insensitive in 4.0).
Slack URL WebhookURLSlack ✅ WebhookURLSlack ✅
Teams URL WebhookURLTeams ✅ WebhookURLTeams ✅ Teams Workflows webhook URL. A retired Office 365 connector URL does not receive the Adaptive Card.
Feature 3.5.0 key 4.0 key Notes
Team name SupportTeamName ✅ SupportTeamName ✅ Setting any of these to the literal hide suppresses display in 4.0 (matches 3.5.0).
Phone SupportTeamPhone ✅ SupportTeamPhone ✅
Email SupportTeamEmail ✅ SupportTeamEmail ✅
Website SupportTeamWebsite ✅ SupportTeamWebsite ✅
Feature 3.5.0 key 4.0 key Notes
Verbose logging VerboseMode ✅ VerboseMode ✅
Debug mode DebugMode ✅ DebugMode ✅

These keys are introduced by the native app and have no 3.5.0 equivalent. Empty arrays and unset strings mean “use the built-in default,” not “turn the feature off.”

Feature 4.0 key Default Notes
Show menu bar icon ShowMenuBarIcon true Bound to MenuBarExtra(isInserted:). Toggles the menu-bar item in real time. The Settings toggle is disabled when this key is MDM-managed.
Anonymous usage data TelemetryEnabled true Settings → About toggle. Sends anonymous TelemetryDeck signals for update checks and the number of applications a finished patch updated, separately for background and standard patching. No app names, user names, paths, or serial numbers. The toggle is disabled when this key is MDM-managed. Set false to turn it off.
Silent launch on managed Macs ManagedSilentLaunchEnabled false on a consumer Mac; true when any other AAP managed preference is deployed and this key is unset When true, AAP launches as an accessory app: no Dock icon, dashboard closed, menu bar only. An explicit managed true or false always wins. Pair with the per-user LaunchAgent in Profile Manifests/MDM-LaunchAgent.md so it also starts at login.
Conceal Settings and Quit MenuBarConcealAdvancedActions false on a consumer Mac; true on a managed Mac when this key is unset Hides the Settings… and Quit App Auto-Patch rows until the user holds Option while the popover is open. An explicit managed value wins over the managed-Mac default.
Hide Quit entirely MenuBarHideQuit false Removes the Quit App Auto-Patch row regardless of Option and regardless of MenuBarConcealAdvancedActions.
Lock all settings LockSettings false Disables every Settings control, including groups that have no managed key of their own, such as business hours. The About tab keeps its links and the Generate Diagnostic Bundle button. Save does nothing while this is true.
Auto-reset helper on launch AutoResetHelperOnLaunch true Silently unregister/re-register the root helper when it is registered with SMAppService but unresponsive, or when the embedded helper’s cdhash no longer matches the last successful registration. Capped at one attempt per session and once per hour.
Feature 4.0 key Default Notes
Master switch BackgroundPatchClosedAppsEnabled true Periodically discovers updates and silently patches applications that are not running. Also gates silent self-update: when this is on, an AAP self-update installs without a dashboard prompt.
Interval BackgroundPatchClosedAppsIntervalHours 4 Hours between passes. Clamped to 1–24.
Require AC power BackgroundPatchClosedAppsRequireOnAC true Skip the pass while the Mac is on battery. When a pass is skipped for this reason, AAP can post the acPowerRequired notification.
Allow list BackgroundPatchClosedAppsAllowList empty (all eligible labels) If non-empty, only these Installomator labels are patched in the background. Array of strings, or a whitespace-separated string.
Block list BackgroundPatchClosedAppsBlockList empty Labels that are never patched in the background, even if they are also on the allow list. Same value formats as the allow list.
Notify around the pass BackgroundPatchClosedAppsNotifyOnCompletion true Posts user notifications for the start and completion of a background pass. Which identity posts them is chosen by the notification-routing keys below.
Scheduler BackgroundPatchClosedAppsScheduler inApp inApp runs a timer inside the menu-bar app. helperDaemon runs the schedule in the root LaunchDaemon, so passes continue after the user quits the UI or logs out. Also accepts app and helper.
First-fire jitter BackgroundPatchStartupJitterMaxMinutes 0 (disabled) Maximum minutes of random delay before the first background pass of a cycle. A random offset in [0, max] is picked once, persisted, and reused across restarts, then cleared after a successful cycle. Clamped to 0–1440. A fleet value of 60–240 avoids every Mac hitting Installomator at once.
Feature 4.0 key Default Notes
Updates-available notification UpdatesAvailableNotificationsEnabled true Posts one notification the first time a Check For Updates run surfaces additional pending updates. Suppressed while the AAP window is in the foreground. Deduped with LastNotifiedPendingUpdatesCount.
Force temporary routing TemporaryNotificationTypes empty (built-in defaults) String array of notification type identifiers posted as banners from xyz.techitout.appAutoPatch. Unknown names are ignored.
Force persistent routing PersistentNotificationTypes empty (built-in defaults) String array of type identifiers posted as alerts from the embedded helper. System Settings shows that helper as App Auto-Patch Notification. Its bundle ID is still xyz.techitout.appAutoPatch-persistent. If a type is listed in both arrays, persistent wins.

Built-in routing when a type is in neither array:

Type identifier Meaning Default channel
backgroundPatchStarted A background pass has started. Temporary
backgroundPatchCompleted A background pass finished. Temporary
backgroundPatchFailed A background pass failed. Persistent
updatesAvailable Check For Updates found new pending updates. Persistent
acPowerRequired Closed-app updates are waiting because the Mac is on battery and BackgroundPatchClosedAppsRequireOnAC is on. Persistent
deferralResuming A deferred update prompt is about to come back. Persistent
hardDeadlineReminder Reminder before a hard-deadline install (60, 30, and 5 minutes). Persistent
selfUpdateAvailable An App Auto-Patch update is available and was not installed silently. Persistent

MDM sets banner vs alert per bundle ID, so pre-allow both xyz.techitout.appAutoPatch and xyz.techitout.appAutoPatch-persistent in a com.apple.notificationsettings profile. See Profile Manifests/MDM-Notifications.md.

Feature 4.0 key Default Notes
Business-hours start BusinessHoursStartTime unset (gate off) Inclusive start, HH:mm 24-hour. When both bounds are set, a hard-deadline force-install of open apps is held while the clock is inside [start, end). The deferral prompt is shown instead, and NextAutoLaunch fires the install when the window closes. Overnight windows (22:00 → 06:00) are supported. Does not gate background patching of closed apps.
Business-hours end BusinessHoursEndTime unset (gate off) Exclusive end, HH:mm. Either bound unset or unparseable disables the gate.
Focus-mode suppress retry FocusSuppressRetryMinutes 30 No longer used. Automatic focus deferrals wait DeferralTimerFocus minutes and increment FocusDeferralCount only.
Aggressive patch-day cap AggressivePatchDayDeferral false On hard-deadline day, the longest deferral offered shrinks as PatchingEndTime approaches. Past that time the prompt is skipped and the update installs immediately.
Patching window end PatchingEndTime 17:00 when aggressive cap is on HH:mm 24-hour. Ignored when AggressivePatchDayDeferral is false.
Hard-deadline dialog can close HardDeadlineDialogAllowClose false When true, the user may dismiss the required-update dialog. The countdown continues, and Notification Center reminders fire at 60, 30, and 5 minutes.
Deferral dialog primary button DeferralDialogPrimaryButton update update keeps Update as the Return-key button. defer makes Defer the primary button so an accidental Return does not install. No effect once the hard deadline has removed the Defer button.
Feature 4.0 key Default Notes
Ignore external volumes IgnoreExternalDrives false Drop installed-app matches that resolve off the boot volume (external disks, disk images, network mounts, Time Machine).
Extra ignored path fragments IgnoreFilePaths empty Case-insensitive substrings. A match anywhere in an installed app’s path excludes it. Combined with hard-coded fragments that are always ignored: /Daemon Containers/, /Library/Application Support/JAMF/Composer/, /Applications/Chrome Apps.localized/, /Applications/Edge Apps.localized/. Array of strings, or a whitespace-separated string.
Show AAP in its own app list DiscoverSelfUpdateLabel true When true and self-update is off, the SelfUpdateLabel (default appautopatch) appears in the dashboard so Update All can install it. When self-update is on, the label is always hidden so SelfUpdateScheduler does not double-list it. false hides it in either case.
Feature 4.0 key Default Notes
Admin test mode AdminTestModeEnabled false Shows a Test Mode section in Settings → Deferrals that can bypass normal deferral-cycle guards. Do not deploy true to production fleets.

These are written by the app at runtime and persisted for next launch. They’re not intended to be set via MDM, but listed here so admins know what shows up in the preference plist.

Purpose 3.5.0 key 4.0 key
Next scheduled run timestamp NextAutoLaunch ✅ NextAutoLaunch ✅ — written by DeferralManager on every deferral (now + minutes, ISO 8601 string), polled every 60 s by DeferralWatcher to auto-resurface the prompt or force-install on a hard deadline. Cleared by a successful patch run via resetDeferralCounts().
Automatic focus deferral armed — AutomaticFocusDeferralArmed (Bool) — true while NextAutoLaunch was set by an automatic focus deferral. The menu bar then counts down as a focus check instead of a user reminder. Cleared by a user Defer, a hard-deadline arm, or clearNextAutoLaunch().
Patching completion status AAPPatchingCompletionStatus ✅ —
Patch start date PatchingStartDate ✅ —
Focus deferral count FocusDeferralCount ✅ FocusDeferralCount ✅ — incremented only by an automatic focus deferral, and only when DeadlineCountFocus is set. A user-chosen Defer does not change it.
Hard deferral count HardDeferralCount ✅ HardDeferralCount ✅ — bumped on every deferral; checked against DeadlineCountHard.
Focus deferral deadline date FocusDeferralDate ✅ FocusDeferralDate ✅ — seeded by DeferralManager on the first deferral of a cycle (now + DeadlineDaysFocus), ISO 8601 string. Cleared on a successful patch.
Hard deferral deadline date HardDeferralDate ✅ HardDeferralDate ✅ — same semantics as focus, but driven by DeadlineDaysHard. Surfaced as the Auto-installs by … footer in the deferral prompt.
Last deferral timestamp LastDeferralDate ✅ LastDeferralDate ✅ — written on every deferral.
Last successful discovery — LastDiscoveryDate
Last successful update check — LastUpdateCheckDate
Cached discovered-apps payload — DiscoveredAppsData (JSON)
Inventory fingerprint — LastInventoryFingerprint
Last auto helper-reset attempt — LastAutoHelperResetDate
Last background patch (in-app) — LastBackgroundPatchDate
Last self-update check — LastSelfUpdateCheckDate
Computed focus deadline datetime — ComputedFocusDeadlineDate (ISO 8601) — written by DeferralWatcher whenever the cadence anchor is set, updated by DeferralManager.recordDeferral(). Reflects CurrentPatchingStartDate + DeadlineDaysFocus. Suitable for Jamf EA or MDM reporting.
Computed hard deadline datetime — ComputedHardDeadlineDate (ISO 8601) — same, reflects CurrentPatchingStartDate + DeadlineDaysHard.
Deferrals remaining (focus) — DeferralsRemainingFocus (Int) — DeadlineCountFocus - FocusDeferralCount; absent when no count deadline configured.
Deferrals remaining (hard) — DeferralsRemainingHard (Int) — DeadlineCountHard - HardDeferralCount; absent when no count deadline configured.
Last cdhash registered for the helper — LastRegisteredHelperCDHash
Last helper-driven background pass observed by the GUI — LastObservedHelperPatchRunID
Last pendingUpdates count we notified for — LastNotifiedPendingUpdatesCount — drives UpdatesAvailableNotifier dedup; resets to 0 when pending drops to 0 so a future 0→>0 transition fires fresh.
Last count we notified “connect to AC” for — LastNotifiedACPowerRequiredCount — dedupes the acPowerRequired notification the same way.
First-run setup wizard completed — FirstRunSetupCompleted
Ignored-label defaults already seeded — IgnoredLabelsDefaultsSeeded — one-shot flag so an empty IgnoredLabels list is kept instead of being refilled with the built-in defaults on every launch.
Hard-deadline dialog dismissed until — HardDeadlineDialogDismissedUntil
Last time a hard deadline fired — LastHardDeadlineFiredAt (ISO 8601)
Current patch-cycle anchor — CurrentPatchingStartDate (ISO 8601) — the cadence anchor ComputedFocusDeadlineDate and ComputedHardDeadlineDate are measured from.
Last successful patch completion — LastPatchingCompletionDate (ISO 8601) — DaysUntilReset is evaluated against this.
Chosen startup-jitter offset — BackgroundPatchStartupJitterOffsetMinutes — the random offset drawn for the current cycle.
When that offset was drawn — BackgroundPatchStartupJitterSeedDate (ISO 8601)

These are 3.5.0-only because they describe runtime invocation paths that don’t exist for the GUI app.

  • --workflow-install-now, --workflow-install-now-silent
  • --reset-defaults, --reset-labels, --uninstall
  • --debug-mode, --debug-mode-off, --verbose-mode, --verbose-mode-off
  • --force-self-update-check
  • --deferral-timer-reset-all, --deadline-count-delete-all, --deadline-days-delete-all
  • --zoom-call-active-check-enabled / -disabled
  • All other --* flags from show_usage() in App-Auto-Patch-via-Dialog.zsh.

In 4.0 these are replaced by:

  • The Settings UI (writes the same managed keys to local prefs).
  • The dashboard’s “Discover Applications”, “Check For Updates”, and “Update All” buttons.
  • The Settings › About “Reset Helper” button (and Status banner button) for the helper recovery path.

If you currently deploy a 3.5.0 configuration profile, every key in the “Core / Labels / Workflow / Deadlines / Dialog / Installomator / App Folder / Monthly Cadence / Webhooks / Support / Debug” sections above will be honored by 4.0 with no edits required — including IgnoredLabels. Optional adjustments:

  1. Decide whether you want to pin AutoResetHelperOnLaunch and ShowMenuBarIcon via MDM. Both default to true. On a managed Mac, silent launch and the concealed menu-bar menu turn on by themselves unless you set ManagedSilentLaunchEnabled or MenuBarConcealAdvancedActions explicitly.
  2. WorkflowStageUpdates is on by default in 4.0. A 3.6 profile that sets it to false is still honored. Leave it unset to pre-download installers before background patching closed apps.
  3. Consider deploying the background-patch-of-closed-apps keys (BackgroundPatchClosedAppsEnabled, BackgroundPatchClosedAppsIntervalHours, BackgroundPatchClosedAppsRequireOnAC, BackgroundPatchClosedAppsAllowList / BackgroundPatchClosedAppsBlockList, BackgroundPatchClosedAppsNotifyOnCompletion, BackgroundPatchClosedAppsScheduler). All defaults are reasonable for consumer Macs. Managed Macs usually want BackgroundPatchClosedAppsScheduler = helperDaemon. Notification routing (TemporaryNotificationTypes / PersistentNotificationTypes), business hours, and the other 4.0-only keys are documented in the section above; leaving them unset keeps the built-in defaults.
  4. For managed fleets deploying AAP simultaneously, set BackgroundPatchStartupJitterMaxMinutes to a value like 60–240 to stagger first-run background passes across the fleet and avoid simultaneous load on the Installomator GitHub repository.
  5. If your users are often in Focus or on a call, set DeadlineCountFocus and DeadlineDaysFocus at least one below the matching hard limits, and set DeferralTimerFocus to the quiet interval (for example 30). IgnoreDNDApps can exclude Chrome or caffeinate. Leave AggressivePatchDayDeferral off unless you want tighter options on the hard-deadline day.
  6. If you previously relied on SelfUpdateEnabled for AAP self-updates, re-enable it under 4.0 — the new SelfUpdateScheduler uses the SelfUpdateLabel Installomator label (default appautopatch) to keep AAP itself current. Override SelfUpdateLabel only if you ship AAP through a private Installomator fork that uses a different label name.
  7. If you have any clients that ran an early 4.0 build, the AppIgnoredLabels key may still be present in their local preferences. Saving Settings once on the new build deletes that stale entry; no admin action is required.