github swiftDialog/swiftDialog v3.1.0b4
swiftDialog 3.1.0 Beta 4

pre-release4 hours ago

New Features since Beta 3

Regular dialog

  • Branched workflows - Workflow pages can route to different cards based on user input, with no callback script required. New per-card properties:

    • branch - pick the next card from a dropdown selection (map) or a checkbox state (ifTrue / ifFalse), with an optional default fallback.
    • nextpage - static override that jumps to a specific card id after Next.
    • finalpage - terminates the workflow at this card; Button 1 becomes "Finish" regardless of remaining cards.

    The Previous button is history-aware and unwinds whichever path the user actually took.

  • aria2 partial-file support - cacheExtensions is now a configurable array that marks an item as "downloading" while a partial file with one of these extensions exists in cachePaths. Default is ['download','pkg','dmg']; add 'aria2' for aria2c, which writes <name>.aria2 partials. Leading dot optional. (#617)

Inspect mode

  • Gated cadence engine - DEPNotify-style POLICY_ARRAY replacement. Messages only advance when a real monitored attribute is satisfied (app / file / plist / defaults / json / managedpref), with optional IPC drive (cadence:satisfy, cadence:advance, cadence:goto) and per-entry timeout / minimum-dwell controls. New stepType: "cadence" and matching schema definitions CadenceEntry / CadenceAttribute.

  • cadenceStyle: "carousel" - DEPNotify-style horizontal icon-card row (done/active/pending) for cadence steps.

  • managedpref attribute type - Cadence and gating conditions can read /Library/Managed Preferences/<domain>.plist directly. MDM-agnostic; works with any management vendor. Supports device and user scope.

  • ManagedValueRef for per-tenant branding - Lets brand colour and claims pull from different MDM payload domains via a {domain, key, darkKey} reference. Brand colour can now come from one profile while claim text comes from another.

  • Forced appearance - New appearance config key ("dark" / "light" / "auto") forces the inspect window appearance regardless of the OS setting, in both directions. (#669)

  • Preset 3 redesign - Hero block, bottom footer, slim brand progress line, rebalanced spacing.

  • Persistent footer brand logo - Stays across step transitions, supports dark-mode variant, honours maxHeight.

  • Per-item descriptions - List items across Presets 1, 2, 3, 5, and 6 now support a description string rendered beneath the item title. (#663)

  • Unified brand-tinted info badge - Brand colour falls back to highlightColor when not set.

Inspect IPC

  • Per-PID session discovery - New --published-sessions-dir publishes a <pid>.json file per running Dialog so external drivers (install scripts, ignitecli, MDM helpers) can discover an active session.

  • Enriched session JSON - Published session JSON now includes resultFile, readinessFile, and eventFile paths so consumers don't need to guess.

Documentation

Bug Fixes

  • Pseudo notifications no longer steal focus when delivered. (#674)

  • Preset 2 header subtitle now sourced from message. (#670)

  • Preset 2 card window auto-follows installs. (#565)

  • Preset 2 custom status + progress text now respected. (#571)

  • Distributed notifications: ignore trigger-file content written before the session is ready (test added).

Schema & Cleanup

  • inspect-config schema (inspect-config.schema.json) reconciled against InspectConfig.swift:

    • Added: CadenceAttribute, CadenceEntry, ManagedValueRef definitions; cadence keys on StepBase; new cadence step-type branch and enum value; appearance enum.
    • Removed: duplicate camelCase button keys (button1Disabled, button1Text, button2Text, button2Visible), legacy FeatureItem / features, guidanceContent.multiline.
    • Tightened: cacheExtensions now typed as array<string> with description.
  • Scheme cleanup - Removed a stale absolute --jsonfile launch arg from the Dialog App Bundle scheme.

Don't miss a new swiftDialog release

NewReleases is sending notifications on new releases.