Nudge is application for enforcing macOS updates, written in Swift

Related tags

SwiftUI App nudge
Overview

Nudge (macadmin's Slack #nudge)

Nudge is application for enforcing macOS updates, written in Swift 5.5 and SwiftUI 5.2. In order to use the newest features of Swift, Nudge will only work on macOS 11.0 and higher.

This is a replacement for the original Nudge, which was written in Python 2/3. If you need to enforce macOS updates for earlier versions, it is recommend to use nudge-python.

Some enhancements to the SwiftUI version over nudge-python

  • An enhanced UI, redesigned with new functionality
  • A new UI called simpleMode
  • Support for localization
  • Support for Apple Silicon macs
  • Every one of the buttons can be customized
  • Every text element except for the left portion can be customized

OS support

The following operating system and versions have been tested.

  • 11.0, 11.0.1, 11.1, 11.2, 11.2.1, 11.2.2, 11.2.3, 11.3, 11.3.1, 11.4, 11.5, 11.5.1, 11.5.2
  • 12.0 beta

Troubleshooting

Before submitting any issues Nudge, please ensure you using the latest version. You can find the version you are using by running Nudge and clicking on the ? button at the top left.

Alternatively you can run the -version argument through the command line

/Applications/Utilities/Nudge.app/Contents/MacOS/Nudge -version
1.0.0.02202021152516

Tools that work with Nudge

Any MDM that supports the installation of packages (.pkgs) and profiles (.mobileconfig) can deploy and enforce Nudge.

Nudge Functionality Overview

Nudge consists of the following three components:

  1. Nudge.app installed to /Applications/Utilities/Nudge.app
  2. A LaunchAgent installed to /Library/LaunchAgents
  3. A Preference file, either in JSON or mobileconfig format

Rather than trying to install updates via softwareupdate, Nudge merely prompts users to install updates via Apple approved/tested methods - System Preferences and major application upgrades (Ex: Install macOS Monterey.app).

With the optionally provided LaunchAgent package, Nudge will open every 30 minutes, at the 0 and 30 minute mark. If you find this behavior too aggressive, you will need to create your own LaunchAgent.

Deploy Nudge

After installing Nudge through the package, you can attempt to open Nudge through Finder - but you will quickly realize that it immediately closed.

This is because Nudge has not been configured! Please read on to learn how to engage with Nudge through the command line.

Command Line Arguments

For a full listing of the available command line arguments, please see the wiki

To open Nudge through the command-line application, open Terminal and run the following command:

/Applications/Utilities/Nudge.app/Contents/MacOS/Nudge

If you have just installed Nudge for the first time, you will likely see the following message returned:

/Applications/Utilities/Nudge.app/Contents/MacOS/Nudge
Device fully up-to-date.

Demo Mode

In order to trigger Nudge in demo mode, simply pass the -demo-mode argument

/Applications/Utilities/Nudge.app/Contents/MacOS/Nudge \
-demo-mode

This will open Nudge in the English localization and allow you to test the buttons, as well as Light/Dark mode.

If you'd like to trigger simpleMode in Demo mode, chain the both -demo-mode and -simple-mode arguments

/Applications/Utilities/Nudge.app/Contents/MacOS/Nudge \
-demo-mode \
-simple-mode

If you'd like to force the icon in Demo mode, chain the both -demo-mode and -force-screenshot-icon arguments

/Applications/Utilities/Nudge.app/Contents/MacOS/Nudge \
-demo-mode \
-force-screenshot-icon

Simple Mode

If you'd like to force simple mode (and don't want to use the built in preferences configuration), simply pass the -simple-mode argument

/Applications/Utilities/Nudge.app/Contents/MacOS/Nudge \
-simple-mode

JSON Support

Nudge has support for both a local JSON and a remote JSON.

By default, Nudge will look for a JSON located at /Library/Preferences/com.github.macadmins.Nudge.json

Using the -json-url argument

To download a hosted JSON file, simply pass the -json-url argument.

Note: Spaces must be converted to %20, just as a standard URL. (This is required both for web-hosted and local assets.)

The following example uses the JSON included in the Nudge GitHub repository. (You can safely ignore any warnings indicating "There is no application set to open the URL munki://updates. )

/Applications/Utilities/Nudge.app/Contents/MacOS/Nudge \
-json-url \
"https://raw.githubusercontent.com/macadmins/nudge/main/Example%20Assets/com.github.macadmins.Nudge.json"

While the -json-url argument is mainly designed for web-hosted URLs, you can actually pass it a file:// path as well if you want to deploy JSON to a location other than /Library/Preferences or simply want to test your workflow:

  1. Save the sample JSON to your Downloads folder as com.github.macadmins.Nudge.json
  2. Modify with your preferred editor
  3. Execute the following command
/Applications/Utilities/Nudge.app/Contents/MacOS/Nudge \
-json-url \
"file:///Users/`id -n -u`/Downloads/com.github.macadmins.Nudge.json"

See also Testing and resetting Nudge.

Setting the json-url in mobileconfig profile

Using PayloadType com.github.macadmins.Nudge in a mobileconfig, use the json-url


   
    PayloadContent
   

   
        
    
     json-url
    
        
    
     https://example.org/nudge.json
    

   

   
    PayloadType
   

   
    com.github.macadmins.Nudge
   

Scheduling Nudge to run

Every release of Nudge comes with an optional LaunchAgent package.

This LaunchAgent will open Nudge every 30 minutes, at the 0 and 30 minute mark. If you find this behavior too aggressive, you will need to create your own LaunchAgent.

Example LaunchAgent

Label com.github.macadmins.Nudge LimitLoadToSessionType Aqua ProgramArguments /Applications/Utilities/Nudge.app/Contents/MacOS/Nudge RunAtLoad StartCalendarInterval Minute 0 Minute 30 ">
xml version="1.0" encoding="UTF-8"?>
DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Labelkey>
  <string>com.github.macadmins.Nudgestring>
  <key>LimitLoadToSessionTypekey>
  <array>
    <string>Aquastring>
  array>
  <key>ProgramArgumentskey>
  <array>
    <string>/Applications/Utilities/Nudge.app/Contents/MacOS/Nudgestring>
    
    
    
    
    
    
  array>
  <key>RunAtLoadkey>
  <true/>
  <key>StartCalendarIntervalkey>
  <array>
    <dict>
      <key>Minutekey>
      <integer>0integer>
    dict>
    <dict>
      <key>Minutekey>
      <integer>30integer>
    dict>
  array>
dict>
plist>

Localization

By default, Nudge supports the following locales:

  • English
  • French
  • Spanish
  • German
  • Swedish
  • Dutch

If you need additional localizations, you will need the following:

  • Localization.strings for locale of the left side of Nudge and the Additional Machine Details view
  • Preferences file

The following example would add support for the French (fr) locale.

Note: There is already a French localization string to fill the rest of the UI

JSON

{
  "userInterface": {
    "updateElements": [
      {
        "_language": "es",
        "actionButtonText": "Actualizar dispositivo",
        "informationButtonText": "Más información",
        "mainContentHeader": "Su dispositivo se reiniciará durante esta actualización",
        "mainContentNote": "Notas importantes",
        "mainContentSubHeader": "Las actualizaciones pueden tardar unos 30 minutos en completarse",
        "mainContentText": "Se requiere un dispositivo completamente actualizado para garantizar que IT pueda proteger su dispositivo con precisión.\n\nSi no actualiza su dispositivo, es posible que pierda el acceso a algunos elementos necesarios para sus tareas diarias.\n\nPara comenzar la actualización, simplemente haga clic en el botón Actualizar dispositivo y siga los pasos proporcionados.",
        "mainHeader": "Tu dispositivo requiere una actualización de seguridad",
        "primaryQuitButtonText": "Más tarde",
        "secondaryQuitButtonText": "Entiendo",
        "subHeader": "Un recordatorio amistoso de su equipo de IT local"
      },
      {
        "_language": "fr",
        "actionButtonText": "Mettre à jour l'appareil",
        "informationButtonText": "Plus d'informations",
        "mainContentHeader": "Votre appareil redémarrera pendant cette mise à jour",
        "mainContentNote": "Notes Importantes",
        "mainContentSubHeader": "Les mises à jour peuvent prendre environ 30 minutes.",
        "mainContentText": "Un appareil entièrement à jour est nécessaire pour garantir que le service informatique puisse le protéger efficacement.\n\n Si vous ne mettez pas à jour votre appareil, vous risquez de perdre l'accès à certains systèmes nécessaires à vos tâches quotidiennes.\n\nPour commencer la mise à jour, cliquez simplement sur le bouton Mettre à Jour le Périphérique et suivez les étapes fournies.",
        "mainHeader": "Votre appareil nécessite une mise à jour de sécurité",
        "primaryQuitButtonText": "Plus tard",
        "secondaryQuitButtonText": "Je comprends",
        "subHeader": "Un rappel amical de votre équipe informatique locale"
      }
    ]
  }
}

Mobile Config

PayloadContent userInterface updateElements _language es actionButtonText Actualizar dispositivo informationButtonText Más información mainContentHeader Su dispositivo se reiniciará durante esta actualización mainContentNote Notas importantes mainContentSubHeader Las actualizaciones pueden tardar unos 30 minutos en completarse mainContentText Se requiere un dispositivo completamente actualizado para garantizar que IT pueda proteger su dispositivo con precisión. Si no actualiza su dispositivo, es posible que pierda el acceso a algunos elementos necesarios para sus tareas diarias. Para comenzar la actualización, simplemente haga clic en el botón Actualizar dispositivo y siga los pasos proporcionados. mainHeader Tu dispositivo requiere una actualización de seguridad primaryQuitButtonText Más tarde secondaryQuitButtonText Entiendo subHeader Un recordatorio amistoso de su equipo de IT local _language fr actionButtonText Mettre à jour l'appareil informationButtonText Plus d'informations mainContentHeader Votre appareil redémarrera pendant cette mise à jour mainContentNote Notes Importantes mainContentSubHeader Les mises à jour peuvent prendre environ 30 minutes. mainContentText Un appareil entièrement à jour est nécessaire pour garantir que le service informatique puisse protéger votre appareil efficacement. Si vous ne mettez pas à jour votre appareil, vous risquez de perdre l'accès à certains outils nécessaires à vos tâches quotidiennes. Pour commencer la mise à jour, cliquez simplement sur le bouton Mettre à jour le périphérique et suivez les étapes fournies. mainHeader Votre appareil nécessite une mise à jour de sécurité primaryQuitButtonText Plus tard secondaryQuitButtonText Je comprends subHeader Un rappel amical de votre équipe informatique locale ">
xml version="1.0" encoding="UTF-8"?>
DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>PayloadContentkey>
  <array>
    <dict>
      <key>userInterfacekey>
      <dict>
        <key>updateElementskey>
        <array>
          <dict>
            <key>_languagekey>
            <string>esstring>
            <key>actionButtonTextkey>
            <string>Actualizar dispositivostring>
            <key>informationButtonTextkey>
            <string>Más informaciónstring>
            <key>mainContentHeaderkey>
            <string>Su dispositivo se reiniciará durante esta actualizaciónstring>
            <key>mainContentNotekey>
            <string>Notas importantesstring>
            <key>mainContentSubHeaderkey>
            <string>Las actualizaciones pueden tardar unos 30 minutos en completarsestring>
            <key>mainContentTextkey>
            <string>Se requiere un dispositivo completamente actualizado para garantizar que IT pueda proteger su dispositivo con precisión.

Si no actualiza su dispositivo, es posible que pierda el acceso a algunos elementos necesarios para sus tareas diarias.

Para comenzar la actualización, simplemente haga clic en el botón Actualizar dispositivo y siga los pasos proporcionados.string>
            <key>mainHeaderkey>
            <string>Tu dispositivo requiere una actualización de seguridadstring>
            <key>primaryQuitButtonTextkey>
            <string>Más tardestring>
            <key>secondaryQuitButtonTextkey>
            <string>Entiendostring>
            <key>subHeaderkey>
            <string>Un recordatorio amistoso de su equipo de IT localstring>
          dict>
          <dict>
            <key>_languagekey>
            <string>frstring>
            <key>actionButtonTextkey>
            <string>Mettre à jour l'appareilstring>
            <key>informationButtonTextkey>
            <string>Plus d'informationsstring>
            <key>mainContentHeaderkey>
            <string>Votre appareil redémarrera pendant cette mise à jourstring>
            <key>mainContentNotekey>
            <string>Notes Importantesstring>
            <key>mainContentSubHeaderkey>
            <string>Les mises à jour peuvent prendre environ 30 minutes.string>
            <key>mainContentTextkey>
            <string>Un appareil entièrement à jour est nécessaire pour garantir que le service informatique puisse protéger votre appareil efficacement.

Si vous ne mettez pas à jour votre appareil, vous risquez de perdre l'accès à certains outils nécessaires à vos tâches quotidiennes.

Pour commencer la mise à jour, cliquez simplement sur le bouton Mettre à jour le périphérique et suivez les étapes fournies.string>
            <key>mainHeaderkey>
            <string>Votre appareil nécessite une mise à jour de sécuritéstring>
            <key>primaryQuitButtonTextkey>
            <string>Plus tardstring>
            <key>secondaryQuitButtonTextkey>
            <string>Je comprendsstring>
            <key>subHeaderkey>
            <string>Un rappel amical de votre équipe informatique localestring>
          dict>
        array>
      dict>
    dict>
  array>
dict>
plist>

Configuration

Nudge offers significant customization, which might be overwhelming. But don't worry, you don't have to customize everything. 😄

For a full listing of the available preferences, please see the wiki.

Small Example

In this example, Nudge will do the following:

  • Open up in simpleMode
  • Enforce Big Sur version 11.5.2 to the following operating systems
    • all big sur releases
    • an enforcement date of February 28th, 2021
  • The More Info button will open up to Apple's Big Sur English release notes

JSON

{
  "userInterface": {
    "simpleMode": true
  },
  "osVersionRequirements": [
    {
      "aboutUpdateURL": "https://support.apple.com/en-us/HT211896",
      "requiredInstallationDate": "2021-08-28T00:00:00Z",
      "requiredMinimumOSVersion": "11.5.2",
      "targetedOSVersionsRule": "11"
    }
  ]
}

Mobile Config

PayloadContent osVersionRequirements aboutUpdateURL https://support.apple.com/en-us/HT211896 requiredInstallationDate 2021-08-28T00:00:00Z requiredMinimumOSVersion 11.5.2 targetedOSVersionsRule 11 userInterface simpleMode ">
xml version="1.0" encoding="UTF-8"?>
DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>PayloadContentkey>
  <array>
    <dict>
      <key>osVersionRequirementskey>
      <array>
        <dict>
          <key>aboutUpdateURLkey>
          <string>https://support.apple.com/en-us/HT211896string>
          <key>requiredInstallationDatekey>
          <date>2021-08-28T00:00:00Zdate>
          <key>requiredMinimumOSVersionkey>
          <string>11.5.2string>
          <key>targetedOSVersionsRulekey>
          <string>11string>
        dict>
      array>
      <key>userInterfacekey>
      <dict>
        <key>simpleModekey>
        <true/>
      dict>
    dict>
  array>
dict>
plist>

Full Example

For full examples please see the Example Assets folder in this repo.

Examples of the User Interface

simpleMode

English

Light

Dark

Localized (Spanish)

Light

Dark

standardMode

English

Light

Dark

Localized (Spanish)

Light

Dark

Comments
  • Multiple hashes in osVersionRequirements results in undefined behavior

    Multiple hashes in osVersionRequirements results in undefined behavior

    This is somewhat similar to https://github.com/macadmins/nudge/issues/40 in that it will need major re-architecture changes to resolve.

    So I found a bug with Nudge, but I'm not sure if anyone is even using Nudge in this way, and I'm debating dropping it entirely unless I can understand the benefit.

    In the beginning @groob had mentioned creating a list of OS enforcements and having different rules for them, but thinking through it, I'm not sure if I like the complexity.

    Let's say you are on 11.2.1 and you set one nudge event for 11.2.2 and another event for 11.2.3. Which should we respect? Is anyone in here actually creating multiple nudge event windows right now? I just tried it and it doesn't work. Nudge currently loops through the list and when it finds a nudge event in scope, it uses that for its logic.

    What kind of use cases exist for dual nudge events? Perhaps I'm not thinking through it. I was curious to finally try it, but now that I realize it's broken, I can't imagine anyone has even used it.

    {
      "osVersionRequirements": [
        {
          "requiredInstallationDate": "2021-03-29T00:00:00Z",
          "requiredMinimumOSVersion": "11.2.2",
          "targetedOSVersions": [
            "11.0",
            "11.0.1",
            "11.1",
            "11.2",
            "11.2.1"
          ]
        },
        {
          "requiredInstallationDate": "2021-03-15T00:00:00Z",
          "requiredMinimumOSVersion": "11.3",
          "targetedOSVersions": [
            "11.0",
            "11.0.1",
            "11.1",
            "11.2",
            "11.2.1",
            "11.2.2",
            "11.2.3"
          ]
        }
      ],
    }
    

    So in the example above, we have two different kinds of failures

    • If you're on 11.2.3, since you meet or exceed the initial requiredMinimumOSVersion, you don't get nudged - the second event doesn't matter
    • If you're on 11.2.1, you get the first Nudge event, since you're in scope.

    I keep trying to think of why you would want two nudge events and can't really think why it would make sense, unless you you did something like this.

    {
      "osVersionRequirements": [
        {
          "requiredInstallationDate": "2021-03-15T00:00:00Z",
          "requiredMinimumOSVersion": "11.1",
          "targetedOSVersions": [
            "11.0",
            "11.0.1"
          ]
        },
        {
          "requiredInstallationDate": "2021-03-17T00:00:00Z",
          "requiredMinimumOSVersion": "11.2.3",
          "targetedOSVersions": [
            "11.1",
            "11.2",
            "11.2.1",
            "11.2.2"
          ]
        }
      ],
    }
    

    But in a use case like this (say if it was March 18th), wouldn't you really just want everyone on 11.2.3? You'd potentially punish users who are on 11.0/11.0.1, get on 11.1, only to then get nudged immediately when they login post 11.1.

    bug help wanted v1.1 
    opened by erikng 43
  • Background blur

    Background blur

    Adds a background layer that blurs the entire screen behind the main nudge window Also made nudge (and the blurred screen) persist across virtual desktops.

    Needs more work to make it prod ready and trigger the logic that displays the blurred screen as well as remove the blur on command.

    opened by bartreardon 32
  • jamf JSON Schema

    jamf JSON Schema

    Can we have a JSON Schema that we can add to Jamf to build a mobileconfig Profile so all config can be done directly in Jamf, that would be ideal for those who don want to edit the local or remote JSON.

    https://docs.jamf.com/technical-papers/jamf-pro/json-schema/10.26.0/Understanding_the_Structure_of_a_JSON_Schema_Manifest.html

    https://www.jamf.com/jamf-nation/discussions/34839/custom-schemas-for-application-configuration-profiles

    broken-by-vendor 
    opened by erikng 31
  • aggressiveUserFullScreenExperience on Monterey results in unresponsive Mac

    aggressiveUserFullScreenExperience on Monterey results in unresponsive Mac

    When using aggressiveUserFullScreenExperience option (true), at first everything looks fine, but when clicking on the 'Update Device' button the Mac gets unresponsive and only a hard reboot fixes this.

    Can reproduce this issue on Monterey 12.2 and Monterey 12.4. Big Sur works fine tough.

    It happens not directly, but after the Mac starts screensaver and locks the Mac.

    MacError .

    opened by VicFromFrance 17
  • Tweak Simple mode by adding required and current OS

    Tweak Simple mode by adding required and current OS

    This does a few things:

    • Add Required and Current OS versions
    • Tweak weights/titles

    Also I propose making Deferral count hidden by default in Simple mode, but with an option to enable it. The thought process is one can use Simple mode for the first N days of nudging and only switch to full mode if people are ignoring it.

    Here is what it looks like with deferralCount:

    Screen Shot 2021-07-16 at 11 02 21 AM

    And without: Screen Shot 2021-07-16 at 11 02 11 AM

    It looks a lot cleaner without the deferral count, so the option to disable it would be very good to have (or even disable by default, enable by option, which is my preference).

    opened by natewalck 17
  • Two very very minor observations/suggestions

    Two very very minor observations/suggestions

    The Launch Agent com.github.macadmins.Nudge.plist and Launch Daemon com.github.macadmins.Nudge.logger.plist appear to be set to 777. Can they be changed to 644?

    EDIT: The black icons show the files are executable, however it might be they're set to 755, haven't confirmed.

    Per Semantic Versioning, can the CFBundleShortVersionString be changed from 1.1.9.81436 to 1.1.9? The CFBundleVersion is fine as 1.1.9.81436.

    Sweet tool, just starting to test it now.

    opened by donmontalvo 14
  • Accessibility enhancements

    Accessibility enhancements

    Hey y'all, I wanted to put in this request to see if two minor adjustments could be made to improve accessibility of the text in the Nudge prompt window.

    1. "Important Notes" text. It's currently red which can cause challenges for readers that are colorblind. It may take some experimentation to find the right shade that works against the background for both light mode and dark mode (I'd imagine blue for light mode and orange for dark mode would be good options that would maintain a high enough contrast to be more easily readable).
      Apple has some documentation on color for visual design and accessibility here: https://developer.apple.com/design/human-interface-guidelines/macos/visual-design/color/ https://developer.apple.com/design/human-interface-guidelines/accessibility/overview/color-and-contrast/
      There are some other handy resources out there too, like: https://uxdesign.cc/color-blindness-in-user-interfaces-66c27331b858
      and Xcode has its own built-in accessibility inspector: https://zonneveld.dev/accessibility-inspector/

    2. Improving contrast ratio in sidebar text. The integer column (where the required/current OS version, days, deferred counts reside) doesn't meet the standard 4.5 to 1 contrast ratio recommendation for accessibility. Should be a relatively simple color tweak to improve the ratio (something the Xcode accessibility checker can check).

    There are other things that the accessibility checker may flag (e.g., spacing, element layouts) but I think focusing on font colors and contrast is a great place to start.

    Happy to talk through this further with anyone that has the cycles to look into this. 💙

    opened by smashism 14
  • Layout cleanup

    Layout cleanup

    Addresses: https://github.com/macadmins/nudge/issues/241

    This PR covers a lot of changes but the intent is to clean up the code used for layout and make appearance consistent between macOS 11 and macOS 12.

    The bulk of the changes remove (as much as possible) any direct references to individual view width and height declarations on the main body of the code. The window size is defined by two constants declared in main and everything else is positioned accordingly by inheriting the parent window size (also of general note, when defining a window height and using .windowStyle(.hiddenTitleBar) the title bar is hidden but the space it would take up is still there. So a height of 450 is actually 450+28. Thought that was interesting)

    Also I noticed a bunch of duplicated code for common views between standard and simple modes so I've separated them out so they can be re-used elsewhere.

    Nudge.xcodeproj/project.pbxproj somehow made it in to the PR - I though I had removed that from the commits but somehow ~palpatine returned~ it snuck in there. hope that doesn't mess up the PR but can always be overwritten.

    there's still .padding(.leading, -200.0) in primaryQuitButton.swift - I can see the effect but not determined what it's doing (moving it all off screen?) - it should be fine for now but will look at that at some point later.

    not all modes have been fully tested at this stage - everything should still operate though and at worst - please yell at me if something look really off

    enhancement 
    opened by bartreardon 14
  • Minimum Operating System showing (0.0) even thought it is set to 12.2.1?

    Minimum Operating System showing (0.0) even thought it is set to 12.2.1?

    So I set the requiredMinimumOSVersion t0 12.2.1 but I still get (0.0) in the log.

    I have tried setting it to 12.2, 12.3, setting targetedOSVersionsRule to default, to 12, anything you can thing of at this point.

    I am not sure what I am doing wrong, I am running the latest Nudge version. NudgeJSONScreenshotJamf

    I uploaded the JSON to Jamf and modified as instructed by the Wiki. I can see it showing up on the target device too, but every time it runs I get the information below.

    2022-02-15 17:39:04.418882-0500 localhost Nudge[8293]: [com.github.macadmins.Nudge:softwareupdate-download] enforceMinorUpdates: true 2022-02-15 17:39:04.514749-0500 localhost Nudge[8293]: [com.github.macadmins.Nudge:utilities] Current operating system (12.2) is greater than or equal to required operating system (0.0) 2022-02-15 17:39:04.514809-0500 localhost Nudge[8293]: [com.github.macadmins.Nudge:user-interface] Device is fully updated 2022-02-15 17:39:04.514823-0500 localhost Nudge[8293]: [com.github.macadmins.Nudge:user-interface] Nudge is terminating due to condition met

    opened by adonboli 13
  • Default targetedOSVersionRule not working as expected

    Default targetedOSVersionRule not working as expected

    (caveat: as expected by me)

    I have the following config:

    requirements: [ { minimum: 11.6.4 rule: default } , { minimum: 12.2.1 rule: default } ]

    What I see: macOS 11 hosts are not alerted to upgrade (it tries to nag them about macOS 12 but I have the full installer workflow disabled, so it quits.)

    What I expect to see:

    The behavior for Big Sur hosts should be that by default we alert them to upgrade to 11.6.4 instead of targeting the macOS 12 rule.

    need-info 
    opened by groob 11
  • Support for Ventura

    Support for Ventura

    Hello,

    I implemented Nudge via JAMF Pro to bring all the computers in my organization to Monterey 12.6 in preparation for Ventura 13.0 which was released yesterday. It has been implemented successfully and I would like to do the same for Ventura. I have been attempting to test it on four computers and it seems Ventura may not be supported yet. Is this the case? I would like to use Nudge to upgrade all the computers in my organization to Ventura. Thank you!

    opened by Cristal98 10
  • Nudge downloads the wrong update in minor updates workflow, can cause Macs to do major upgrade instead.

    Nudge downloads the wrong update in minor updates workflow, can cause Macs to do major upgrade instead.

    When using Nudge to encourage users to do a minor update (let's say 12.6.2), Nudge will make use of "softwareupdate --list --all" to get the list of updates available. It will then parse list and try and download this update. However, there seems to be an issue with the collection of the "updateLabel" used to do the download:

    Example: Taking what a 12.6.1 systems gets today:

    • Label: Safari16.2MontereyAuto-16.2 Title: Safari, Version: 16.2, Size: 130909KiB, Recommended: YES,
    • Label: macOS Monterey 12.6.2-21G320 Title: macOS Monterey 12.6.2, Version: 12.6.2, Size: 1508533K, Recommended: YES, Action: restart,
    • Label: macOS Ventura 13.1-22C65 Title: macOS Ventura 13.1, Version: 13.1, Size: 3878650K, Recommended: YES, Action: restart,

    Nudge uses a 'for' loop goes through the list of the available updates. It updates the updateLabel value for each Label: https://github.com/macadmins/nudge/blob/5fd6bedcd910fc3edbe578d3a2fac7f57ccca6d5/Nudge/Utilities/SoftwareUpdate.swift#L107-L112 At the end of the loops the updateLabel value is the one of the last update in the list (macOS Ventura 13.1-22C65), not the one of the targeted update (macOS Monterey 12.6.2-21G320).

    Then, a check is made that the list of updates contains the target one and if it does, the download is initiated using the "updateLabel" which isn't necessarily the right one. https://github.com/macadmins/nudge/blob/5fd6bedcd910fc3edbe578d3a2fac7f57ccca6d5/Nudge/Utilities/SoftwareUpdate.swift#L114-L118

    On completion of the download, macOS prepares the update. If the user doesn't visit Software Update but just reboots for another reason, macOS will apply the wrong update (or upgrade in this example). However if the user goes to Software Update panel in System Preferences, and click Update Now on Monterey 12.6.2 update, macOS will download/prepare the right update and apply it properly.

    Issue affects only Intel Macs, as Nudge doesn't attempt to download minor updates on Apple Silicon Macs: https://github.com/macadmins/nudge/blob/5fd6bedcd910fc3edbe578d3a2fac7f57ccca6d5/Nudge/Utilities/SoftwareUpdate.swift#L46-L49 Current workaround: set Nudge "softwareUpdate" to disabled to prevent the use of Software Update.

    See attached log, Nudge is configured to go for 12.6.2 but downloads 13.1 NudgeDebugLog.txt

    bug help wanted 
    opened by Tomfr06 1
  • Feature Request - Allow adding Change Freeze dates to config profile

    Feature Request - Allow adding Change Freeze dates to config profile

    Not sure how feasible it would be, but it would be great if we could add our dates when we are in a change freeze and can't deploy any patches. Then nudge could look and see if those dates are true/false and act accordingly.

    help wanted feature-request 
    opened by n0brainer 1
  • Nudge for Ventura Delta updates

    Nudge for Ventura Delta updates

    As you may already know, macOS Ventura will be offered as a delta update on macs running 12.3+. On managed machines, it will be offered as a delta after 30 days of Ventura release date.

    While testing Nudge on an un-managed mac where I was able to see the delta update, I noticed that when I have attempttoFetchMajorUpgrade key set to false Nudge will show the following in the logs:

    _Device requires major upgrade but attemptToFetchMajorUpgrade is False - skipping download
     Unable to find major upgrade application, exiting Nudge_
    

    If I set attempttoFetchMajorUpgrade key to true, Nudge downloads the full app installer. I also noticed that Under the software update preference pane, offered update also changed from Delta to full app installer as soon as Nudge started downloading the installer. This is not ideal because standard user accounts on macs would not be able to perform this upgrade since the full app installer requires admin rights to install.

    Basically, on MDM-managed macs, after 30 days, devices running 12.3 to 12.6 will treat the Ventura update as a minor update.

    Nudge needs to be able to present users with just the software update pane without actually expecting an app installer bundle to open for a major upgrade. OR Nudge needs to be able to download the delta update as it can do with minor updates.

    opened by anuj530 12
  • Nudge logs report 'Camera is currently' when its not - but Nudge still launches

    Nudge logs report 'Camera is currently' when its not - but Nudge still launches

    At least once a day I see a seemingly bogus entry stating that a camera is active when it's not.

    localhost Nudge[40801]: [com.github.macadmins.Nudge:user-interface] Ignoring Nudge activation - Camera is currently on and not pastRequiredInstallationDate

    In this example, I have ~26 hours remaining on my due date (Im in the Approaching phase but not Immenant). I have Approaching set to 72 hrs and Immenant set to 23 hours.

    It’s strange because even though I see this entry, Nudge will launch a few seconds later anyway. So its a false positive of sorts.

    I have seen this seemingly bogus entry on 2 test Mac thus far. Both were M1 Macs running macOS Monterey. 1 has only the built-in Apple laptop camera (not active and no A/V apps running). And the other Mac had a Logitec USB camera attached, but not active (and no A/V apps running).

    I have tested active cameras quite a bit and Nudge seems to detect them when they are active most of the time, but this false positive is odd - especially since Nudges launches anyway.

    Example plist snippet:

    	<key>optionalFeatures</key>
    	<dict>
    		<key>acceptableAssertionUsage</key>
    		<true/>
    		<key>acceptableCameraUsage</key>
    		<true/>
    		<key>acceptableScreenSharingUsage</key>
    		<true/>
    

    On the flip side of this coin (but related), Im testing Nudge on macOS 13 Ventura beta 6 and I am using Apple Screen Sharing to connect to it when testing Nudge UI (its at a remote location).

    I often see this entry in the logs:

    localhost Nudge[50615]: [com.github.macadmins.Nudge:user-interface] Ignoring Nudge activation - Screen sharing is currently active and not pastRequiredInstallationDate

    But Nudge still activates for me over Screen Sharing.

    (I can open a seperate Issue/case if needed)

    opened by dstranathan 1
  • Failed to respond

    Failed to respond

    After the aggressive mode Nudge popup blocked the all screen but i just closed the LCD and i open after 1 hr then issue started i canot access the nudge window its completely blank attached the video FYI.

    https://user-images.githubusercontent.com/52978899/186938794-6e7d156f-cf41-4341-84b9-871893124013.mov

    Nudge.log

    opened by mani2care 7
Releases(v1.1.10.81462)
  • v1.1.10.81462(Jan 4, 2023)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed and notarized. The package has been signed, notarized and stapled.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Changelog

    Added

    • allowLaterDeferralButton key to remove the "Later" button when using deferrals
    • builtInAcceptableApplicationBundleIDs now includes the Ventura and Monterey upgrade apps
    • CMD + Option + M and CMD + Option + N are now banned hotkeys when Nudge is the primary window
    • AssociatedBundleIdentifiers is now added to the LaunchAgent

    Changed

    • Modernized the Github Action dependencies
    • Xcode 14 or higher is now required to build Nudge
    • Xcode 14.2 is the verison used to build Nudge through Github Actions
    • Built with Swift 5.7.2
    • Monterey is the default icon, decreasing the size of Nudge by 55%!
    • asynchronousSoftwareUpdate is no longer honored when the requiredInstallationDate has been passed
    • The default Nudge package now attempts to install to /Applications/Utilities to improve deployments through Intune
    • The default Nudge LaunchAgent package now attempts to install to /Library/LaunchAgents to improve deployments through Intune
    • The default Nudge Logger package now attempts to install to /Library/LaunchDaemons to improve deployments through Intune
    • German and Danish language improvements

    Fixed

    • All known Xcode 14 warnings
    • Custom Deferral buttons now expand to the entire string length

    Changes

    • c2a4709 - xcode 14.2
    • d66e154 - Google translate translation fixed (#431)
    • 8b2d691 - Update DefaultPreferencesNudge.swift (#416)
    • 1aaade7 - Update default icon to Ventura (#407)
    • 14826fb - Updated German translation and LaunchAgent (#405)
    • 8d14d37 - update launchagent to 1.0.1
    • daa5a16 - v1.0.1 launchagent on github actions
    • 26680fa - update changelog reader to 2.2.2
    • 4c34fcd - fix customDeferralDropdownText truncation
    • 6b36a7d - block CMD+Option M and N
    • 6ed9272 - fix xcode 14.2 warnings
    • d1089d2 - AccentColor
    • e868c34 - allowLaterDeferralButton
    • 8327716 - Use asynchronousSoftwareUpdate until pastRequiredInstallationDate
    • 609d1d8 - more build warnings
    • fafcfa3 - try to install to applications-utilities
    • 55661a4 - v1.1.10 changelog
    • 0ad1d43 - fix the path again but for all three
    • dbb0ced - payload has to exist
    • 0286ad9 - try to remove all the deprecations from the runners
    • a9a2202 - modernize the github actions
    • 70419bc - Update CHANGELOG.md
    • d140699 - fix name
    • be2168a - Update CHANGELOG.md
    • 620c00b - Update CHANGELOG.md
    • b6125e5 - Merge pull request #435 from macadmins/development
    Source code(tar.gz)
    Source code(zip)
    Nudge-1.1.10.81462.pkg(1.57 MB)
    Nudge_LaunchAgent-1.0.1.pkg(16.35 KB)
    Nudge_Logger-1.0.1.pkg(15.98 KB)
    Nudge_Suite-1.1.10.81462.pkg(1.57 MB)
  • v1.1.10.81458(Dec 29, 2022)

    Notes

    This is a pre-release version of Nudge created by GitHub Actions. Nudge.app has been signed and notarized. The package has been signed, notarized and stapled.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Changelog

    Added

    • allowLaterDeferralButton key to remove the "Later" button when using deferrals
    • builtInAcceptableApplicationBundleIDs now includes the Ventura and Monterey upgrade apps
    • CMD + Option + M and CMD + Option + N are now banned hotkeys when Nudge is the primary window
    • AssociatedBundleIdentifiers is now added to the LaunchAgent

    Changed

    • Modernized the Github Action dependencies
    • Xcode 14 or higher is now required to build Nudge
    • Xcode 14.2 is the verison used to build Nudge through Github Actions
    • Built with Swift 5.7.2
    • Monterey is the default icon, decreasing the size of Nudge by 55%!
    • asynchronousSoftwareUpdate is no longer honored when the requiredInstallationDate has been passed
    • The default Nudge package now attempts to install to /Applications/Utilities to improve deployments through Intune
    • The default Nudge LaunchAgent package now attempts to install to /Library/LaunchAgents to improve deployments through Intune
    • The default Nudge Logger package now attempts to install to /Library/LaunchDaemons to improve deployments through Intune
    • German and Danish language improvements

    Fixed

    • All known Xcode 14 warnings
    • Custom Deferral buttons now expand to the entire string length

    Changes

    • c2a4709 - xcode 14.2
    • d66e154 - Google translate translation fixed (#431)
    • 8b2d691 - Update DefaultPreferencesNudge.swift (#416)
    • 1aaade7 - Update default icon to Ventura (#407)
    • 14826fb - Updated German translation and LaunchAgent (#405)
    • 8d14d37 - update launchagent to 1.0.1
    • daa5a16 - v1.0.1 launchagent on github actions
    • 26680fa - update changelog reader to 2.2.2
    • 4c34fcd - fix customDeferralDropdownText truncation
    • 6b36a7d - block CMD+Option M and N
    • 6ed9272 - fix xcode 14.2 warnings
    • d1089d2 - AccentColor
    • e868c34 - allowLaterDeferralButton
    • 8327716 - Use asynchronousSoftwareUpdate until pastRequiredInstallationDate
    • 609d1d8 - more build warnings
    • fafcfa3 - try to install to applications-utilities
    • 55661a4 - v1.1.10 changelog
    • 0ad1d43 - fix the path again but for all three
    • dbb0ced - payload has to exist
    • 0286ad9 - try to remove all the deprecations from the runners
    • a9a2202 - modernize the github actions
    • 70419bc - Update CHANGELOG.md
    Source code(tar.gz)
    Source code(zip)
    Nudge-1.1.10.81458.pkg(1.57 MB)
    Nudge_LaunchAgent-1.0.1.pkg(16.36 KB)
    Nudge_Logger-1.0.1.pkg(15.98 KB)
    Nudge_Suite-1.1.10.81458.pkg(1.57 MB)
  • v1.1.9.81436(Sep 12, 2022)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed and notarized. The package has been signed, notarized and stapled.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Changelog

    Almost all of these changes were sent by others. Thank you for continuing to support Nudge!

    Added

    • Polish Language support
    • Backup macOS Ventura app link

    Changed

    • Xcode 13 or higher is now required to build Nudge
    • Small changes to Spanish localization

    Fixed

    • Crash reported when using aggressiveUserFullScreenExperience and screen saver or lock screen was active.
    • Nudge was not able to automatically open Software Updates on macOS Ventura
    • Nudge now honors default targetedOSVersionsRule when a machine has no available rules but default is not the last item of the osVersionRequirement array

    Changes

    • 5fa0900 - In both getOSVersionRequirementsProfile and getOSVersionRequirementsJSON I added a new boolean variable defaultMatchSet to track if the targetedOSVersionsRule has matched against default. Variable set to false on instantiation and set to true if a default has been found.
    • 24e2097 - Merge pull request #378 from samuelzamvil/main
    • 666dea5 - chore: update es localization
    • 914c91a - add backup path for Ventura installer
    • 4e98542 - Merge pull request #401 from pro4tlzz/ventura-support
    • 7c24812 - software update url compatible with Ventura & Monterey
    • fed23d3 - Merge pull request #402 from pro4tlzz/ventura-su-compatibility
    • a79dc8f - Merge pull request #390 from RUBenGAMArrarodRiguEZ-ToMtOm/edit-es-l18n
    • f499665 - Merge pull request #403 from macadmins/development
    • 2f8fd07 - bump to 1.1.9
    • 0eb4664 - initial pl
    • e3c97e5 - finish polish language
    • 1b9a8e2 - fix other 1.1.8/1.1.9 strings
    • 5fd6bed - 1.1.9 changelog
    Source code(tar.gz)
    Source code(zip)
    Nudge-1.1.9.81436.pkg(3.49 MB)
    Nudge_LaunchAgent-1.0.0.pkg(16.45 KB)
    Nudge_Logger-1.0.1.pkg(16.11 KB)
    Nudge_Suite-1.1.9.81436.pkg(3.49 MB)
  • v1.1.8.81422(Aug 1, 2022)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed and notarized. The package has been signed, notarized and stapled.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Changelog

    Fixed

    • Crash reported when using aggressiveUserFullScreenExperience and screen saver or lock screen was active.

    Changes

    • db2903f - Update README.md
    • 0961445 - Merge pull request #376 from evansimm/main
    • 3dd50a6 - first successful build of xcode 14 beta
    • e51a00c - build on xcode 13.4.1 and macos 12
    • 57dbdc6 - Add com.apple.ScreenSaver.Engine to acceptableBundleIDs
    • 8eb8041 - Log/defer Nudge activation when screen is locked
    • efcd143 - Safely unwrap frontmostApplication after screen unlock
    • 832bb5b - use python3 to build munkipkgs
    • d3eab6c - bump to 1.1.8
    • 3059464 - fix python3 path call
    • b611599 - Merge pull request #385 from macadmins/development
    Source code(tar.gz)
    Source code(zip)
    Nudge-1.1.8.81422.pkg(3.49 MB)
    Nudge_LaunchAgent-1.0.0.pkg(16.45 KB)
    Nudge_Logger-1.0.1.pkg(16.10 KB)
    Nudge_Suite-1.1.8.81422.pkg(3.49 MB)
  • v1.1.7.81411(Jun 3, 2022)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed and notarized. The package has been signed, notarized and stapled.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Changelog

    Added

    • Nudge "Suite" package that includes the Logger LaunchDaemon, Nudge 30 minute LaunchAgent and Nudge.app
      • The Nudge application is identical to the standard package which is signed and notarized.
      • The package is signed, notarized and stapled, similarly to the standard package.
    • Changlog in GitHub Actions
    • Blurring feature when the user is passed the required installation date.
      • Many many thanks to @bartreardon for this feature!
      • Blurring will dynamically enable a blur for all of the user's screens until they click on the Update Device button.
      • If the user adds or removes a screen during Nudge's current session, after the next re-activation event, the blur will dynamically modify to the new screen count.
    • Danish localization
    • Added basic localizations for new Notification Center UX
      • Help on this would be appreciated

    Arguments

    • -bundle-mode argument to launch Nudge with a built-in json. Not for use in production.
    • -print-profile-config argument to print out the current profile preferences applied to nudge. Nudge will not run when passing this argument.
    • -print-json-config argument to print out the current json preferences applied to nudge. Nudge will not run when passing this argument.

    Keys

    • acceptableApplicationBundleIDs
      • The application names using assertions which Nudge allows without taking focus. You can specify one or more applications. To find the names please run /usr/bin/pmset -g assertions in Terminal while the application is open and running.
    • acceptableAssertionUsage
      • When enabled, Nudge will not activate or re-activate when assertions are currently set.
    • acceptableCameraUsage
      • When enabled, Nudge will not activate or re-activate when the camera is on.
    • acceptableScreenSharingUsage
      • When enabled, Nudge will not activate or re-activate when screen sharing is active.
    • aggressiveUserFullScreenExperience
      • When disabled, Nudge will not create a blurred background when the user is passed the deferral window.
      • defaulted to on
    • customDeferralDropdownText
      • This allows you to custom the "Defer" button.

    • attemptToBlockApplicationLaunches
      • When enabled, Nudge will attempt to block application launches after the required installation date. This key must be used in conjunction with blockedApplicationBundleIDs.
    • blockedApplicationBundleIDs
      • The application Bundle ID which Nudge disallows from lauching after the required installation date. You can specify one or more Bundle ID.
    • terminateApplicationsOnLaunch
      • When enabled, Nudge will terminate the applications listed in blockedApplicationBundleIDs upon initial launch.

    Please note that with these three options, the user will be notified through Notification Center, but only if they approve the dialog. It is recommended to deploy an MDM profile for this to force user notifications, otherwise Nudge will ask the user upon the next launch to allow notifications.

    Changed

    • If a full screen application is already running prior to Nudge's initial launch and the user has not passed the required installation date, Nudge will wait until the user has moved to another application or change the full screen state of the current application before triggering it's first activation. This is due to poor behavior with full screen applications.
    • CMD+N and CMD+M are now banned if Nudge is the primary window on a macOS device
    • Nudge no longer exits 0 when there are issues it detects and instead exits 1
    • Refactored all log logic to reduce lines of code

    Fixed

    • Improved Dutch localization
    • Improved Norwegian localization
    • Fixes the bug around people moving Nudge to a different desktop space and bypassing nudge event
    • Fixes to non-Gregorian calendars and custom deferrals

    Changes

    • effa383 - Create a blurred background that can be displayed on request (demonstration code)
    • 125cfaf - super nag - make nudge and the blurred window persist across all virtual desktops
    • f1e6457 - add storyboard to xcodeproj
    • f49fe10 - make blur screen false by default - needs more work to make it prod worthy
    • 463a9d1 - Make the background an observed object Call viewObserved.bluredBackground?.close() when clicking the "update device" button. this will make the background blur go away so the user can see the update window
    • 404fc26 - duplicated reference to the background storyboard
    • fa0d6df - renamed Blur storyboard to baclgroundBlur
    • 18339fa - Removed storyboard and replaced as NSWindow declaration
    • eb3edcf - Merge branch 'development' into background-blur
    • af87ab1 - Merge branch 'development' into background-blur
    • 44cb06e - Added N and M as banned keys. banning N prevents new window which is innocuous but not useful in any case. banning M prevents Nudge from being minimised perpetually and thus not being "in the way".
    • 243a5a7 - Merge pull request #351 from bartreardon/more-banned-shortcut-keys
    • 37d2cb9 - improve Norwegian localization
    • f6c69db - Add Danish localization
    • 5487cd8 - disable ability to move nudge to different desktop spaces
    • 3eb3666 - add acceptableCameraUsage and cameraReferralTime code logic
    • ddacdd7 - acceptableCameraUsage should be false default
    • 1460619 - Merge branch 'development' into background-blur
    • 15f5951 - Merge pull request #316 from bartreardon/background-blur
    • d793f46 - Finish out the blurred background v1 code and fix some bugs
    • 1ff01d1 - Ensure blur is always loaded on re-activations
    • 9ea240e - Attempt to fix deferral date when ui is open for a while
    • 906b810 - Merge pull request #355 from macadmins/dev-blur
    • 134b258 - add cameraReferralTime to preferences
    • 5cba117 - remove fullscreen debug test code
    • 45b5018 - fix bugs with blur logic and create test workflow
    • 35d9009 - fix custom buttons and add support for shell and zsh scripts
    • 05aa105 - add -print-profile-config and -print-json-config arguments
    • 3af0d7a - add ability to block applications
    • a3074ed - bump to 1.1.7
    • e688c47 - Added German User Notification
    • a53ea4d - Merge pull request #357 from colorenz/development
    • 108584c - block applications when attemptToBlockApplicationLaunches is true
    • 6148277 - do not block apps without bundle identifiers
    • f79bb3c - print out the frontmost application
    • 01803b7 - Google translate user notification localizations
    • 18e969b - update jamf json schema and example json/profile
    • ebb2e67 - fix json schema
    • 066d2b1 - dont get in the way of full screen apps
    • ffa1d22 - some small tweaks about observability
    • 7f5a915 - figured out how to do screen sharing usage
    • 6b372b2 - small tweaks to the logger and softwareupdate code
    • 2ff2e9a - get rid of all let = msg variables and tweak log outputs
    • 3667ea2 - allow camera and screen sharing when not pastRequiredInstallationDate
    • a34540f - Attempt to fix the non Gregorian calendar issues
    • f5489a7 - fix -print-profile-config
    • ca2e913 - Refactor needToActivateNudge() from all the additions
    • 3f0cee5 - add logs around screen sharing and camera
    • d1d8414 - more tweaks to logging and order of nudge activations
    • ec6323f - dont set deferral time in demo mode
    • 068f1b3 - dont guard on notification name as not needed
    • afb9741 - Add acceptableAssertionUsage and acceptableAssertionApplicationNames logic
    • ed027b1 - initial DND config instead of log stream
    • a0bdd7b - move isScreenSharing logic to DNDServer private framework
    • 2ba89cb - refactor camera logic and remove logReferralTime
    • 4e27899 - add more notes on how I found this
    • 43da836 - change defer text for dutch
    • 3cf5cf8 - try to sign and notarize a new suite package
    • f0161b1 - add to all of the github actions
    • 7e24d65 - cp -R not mv
    • c106cb6 - add terminateApplicationsOnLaunch
    • 6d512e3 - fix jamf json schema
    • bbaef0f - try to create a manual changelog that gets added to github actions
    • 5f9f764 - fix duplicated GHA id
    • e3b301e - send github env variable not a literalstring variable
    • 7d3eb1f - try and fix variable again
    • e50e186 - try a whole different type of changelog
    • 6d88293 - workaround for fullscreen bug and blur
    • 96fbb98 - clarify changelog
    • 60113eb - remove un-needed logic post full screen behavior changes
    • 1e5e1a6 - don't hide the majorUpgradeBackupApp if it's not frontmost
    • 87a1286 - update changelog with fullscreen behavior changes
    • dc4d51c - create an easter egg <3
    • 993cda3 - Add customDeferralDropdownText customizations
    • fbb0d5b - redo -print-x-config
    • 1a13f7f - finish deviceconfig logic
    • 14ee529 - update to prod url
    • 5391941 - update changelog
    • 6fa38af - remove anonymous metrics
    • 8e27ed4 - do not attempt to close backgrounds if the index count is 0
    • b77495c - Merge pull request #360 from macadmins/development
    • 0f2af6c - fix non pre-release
    Source code(tar.gz)
    Source code(zip)
    Nudge-1.1.7.81411.pkg(3.51 MB)
    Nudge_LaunchAgent-1.0.0.pkg(16.46 KB)
    Nudge_Logger-1.0.1.pkg(16.11 KB)
    Nudge_Suite-1.1.7.81411.pkg(3.51 MB)
  • v1.1.6.81329(Mar 15, 2022)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed and notarized. The package has been signed, notarized and stapled.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Changes

    • 567ef5d - Added Norwegian localization (#314)
    • e7c5f55 - add Italian localization (#320)
    • bf04912 - add actionButtonPath to OSVersionRequirement (#321)
    • 768f5cb - add dynamic hoursRemaining when under a day to cutoff
    • 4a4d1d9 - translations for hours remaining to update
    • b2a1ef6 - redo logic around hours and days and fix localization on english
    • 4265f80 - Merge pull request #322 from macadmins/hoursRemaining
    • a3a308c - bump to 1.1.6
    • 78380c1 - differentiateWithoutColor for .red color scheme
    • 54d0239 - fix simplemode spacing
    • a08c14e - first fix for italian
    • f023104 - show days remaining again if negative value
    • d3598ca - first attempt at fixing mainContentText for Italian
    • 9431498 - fix simple mode again
    • cbf0199 - finalize italian localization
    • 3301024 - Merge pull request #325 from macadmins/fixes
    • a0ec446 - Merge branch 'development' into differentiateWithoutColor
    • aa7f690 - fix typo and add some future functionality TODOS
    • ece8e27 - Add bottom padding to right side main header
    • 212a57a - Merge pull request #326 from bartreardon/ui-spacing-adjustment
    • bb5c752 - fix acceptableApplicationBundleIDs when first launch and app is full screen
    • ed3afa1 - Merge pull request #323 from macadmins/differentiateWithoutColor
    • 7834fd3 - add accessible colors to override .secondary
    • a02a1ed - simplify the code for accessibleRed and keep original red for X buttons
    • 64935d9 - Merge pull request #327 from macadmins/accessibleSecondaryColors
    • c7a9ccc - scaffolding of graceperiod
    • 930eb70 - finish logic for allowGracePeriods
    • 4cbc62e - dont use current date but graceperiod creation date
    • c4f5d7b - redo logic for grace periods
    • bd78bba - combinedGracePeriod
    • d2ad707 - update key defaults
    • 290cac1 - update jamf schema too
    • fe832fc - remove extra space
    • 6c76c9d - get unit testing working for all of this crap
    • 67088d0 - Merge pull request #330 from macadmins/grace-period-newmachine
    • 8e9976c - don't trigger update device false when running unit tests
    • fcef709 - add unit tests to build process
    • 35fe242 - update jamf schema for actionButtonPath enhancements
    • 2b80cb8 - fix unit tests
    • a19b1e6 - Merge pull request #335 from macadmins/development
    Source code(tar.gz)
    Source code(zip)
    Nudge-1.1.6.81329.pkg(3.42 MB)
    Nudge_LaunchAgent-1.0.0.pkg(16.44 KB)
    Nudge_Logger-1.0.1.pkg(16.09 KB)
  • v1.1.5.81289(Feb 16, 2022)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed and notarized. The package has been signed, notarized and stapled.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Changes

    • b844cc5 - Update Jamf Custom Schema to include disableSoftwareUpdateWorkflow key
    • a3309a2 - Added new line
    • b41cdae - Merge pull request #305 from smithjw/patch-1
    • e7c0adf - exit out of the softwareupdate workflow
    • 1e044d5 - Merge pull request #311 from groob/disable
    • a7b6f96 - Add Russian localization (#299)
    • e888fb1 - add preference to skip the softwareupdate process. (#302)
    • cdca321 - bump to 1.1.5
    • d5ee577 - Merge pull request #303 from macadmins/development
    Source code(tar.gz)
    Source code(zip)
    Nudge-1.1.5.81289.pkg(3.37 MB)
    Nudge_LaunchAgent-1.0.0.pkg(16.43 KB)
    Nudge_Logger-1.0.1.pkg(16.09 KB)
  • v1.1.4.81280(Jan 28, 2022)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed and notarized. The package has been signed, notarized and stapled.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Changes

    • 7b0d2e7 - Only attempt to download the required security update
    • 4c616e0 - bump to 1.1.4
    • 6d25eb9 - Merge pull request #292 from macadmins/su-fixes-sadface
    • 322bc55 - remove unsafe check for big sur 11.3 and lower
    • 04398dc - fix Japanese localize
    • dd9afb0 - Merge pull request #293 from macadmins/remove-old-logic-big-sur-bug
    • 2c78b1d - Merge pull request #295 from pcae/fix-japanese-transration
    • 55cc93b - asynchronousSoftwareUpdate
    • 94f0362 - Move to new xcode 13.2.1 and use a less ridiculous sub version
    • 9c7b633 - pull whole repo history so new version process works
    • 505b57b - Merge pull request #297 from macadmins/development
    Source code(tar.gz)
    Source code(zip)
    Nudge-1.1.4.81280.pkg(3.37 MB)
    Nudge_LaunchAgent-1.0.0.pkg(16.43 KB)
    Nudge_Logger-1.0.1.pkg(16.10 KB)
  • v1.1.3.11292021162608(Nov 29, 2021)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed and notarized. The package has been signed, notarized and stapled.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Changes

    • c5c432e - Add logic for attemptToFetchMajorUpgrade and getBackupMajorUpgradeAppPath()
    • 955e6bb - allow either backup or primary application for major upgrades
    • 5a303d8 - allow major upgrades if actionButtonPath is set
    • 86cae6f - fix compile issue with last commit
    • 66249da - finish logic with major upgrades using backup app path
    • c7400a0 - Nudge v1.1.3
    • 05d3c9a - rename PrimaryQuitButton.swift to QuitButtons.swift
    • 5befe84 - Fix mainContextText and screenshot rendering logic
    • 5e154d1 - Normalize requiredMinimumOSVersion of patch is .0
    • de44e7a - Merge pull request #284 from macadmins/major-upgrade-fixes
    • b214a64 - fix bug in major*UpgradeAppPathExists when fetching major upgrade
    • 91576ce - Merge pull request #287 from macadmins/development
    Source code(tar.gz)
    Source code(zip)
    Nudge-1.1.3.11292021162608.pkg(3.37 MB)
    Nudge_LaunchAgent-1.0.0.pkg(16.45 KB)
    Nudge_Logger-1.0.1.pkg(16.09 KB)
  • v1.1.2.10212021172015(Oct 21, 2021)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed and notarized. The package has been signed, notarized and stapled.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Changes

    • 00a145d - Updates to Nudge Functionality Overview (#265)
    • 95d012c - Updated "Using the -json-url argument" (#266)
    • b35fa8e - update the release pr yaml
    • 392f6f2 - Get the pull request head but only if a label exists
    • 8ccf883 - move to a single pr yaml file
    • f713ffb - add Chinese (Simplified), Japanese, Korean and Portuguese localizations. (#272)
    • 7371037 - ReadMe Clarifications (#274)
    • 147894e - Updated "Using the -json-url argument" (#275)
    • 410f8aa - Move the core README to the wiki
    • 7829e27 - bump to 1.1.2 version
    • 2d46236 - Fix rendering of README headers
    • 354ec45 - Move to Xcode 13.1 RC for updated Swift macOS SDK
    • d53aac2 - create XCODE_PATH variable and set with xcode-select
    • 3469192 - add hindi localization
    • 08b392a - fix double quote
    • d336230 - fix additional device information word
    • a4fbf88 - Merge pull request #277 from macadmins/hindi
    Source code(tar.gz)
    Source code(zip)
    Nudge-1.1.2.10212021172015.pkg(3.36 MB)
    Nudge_LaunchAgent-1.0.0.pkg(16.45 KB)
    Nudge_Logger-1.0.1.pkg(16.09 KB)
  • v1.1.1.09202021202238(Sep 20, 2021)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed and notarized. The package has been signed, notarized and stapled.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Changes

    • 13d15b2 - remove extra dot on version tag (#253)
    • f4211d5 - Update com.github.macadmins.Nudge.json (#259)
    • 5a8feb6 - Fix Swedish localization. (#260)
    • f7ed7d6 - Force Xcode 13 beta path since stable release doesn't contain SDK
    • c949638 - Bail if no Xcode is found and print /Applications
    Source code(tar.gz)
    Source code(zip)
    Nudge-1.1.1.09202021202238.pkg(3.36 MB)
    Nudge_LaunchAgent-1.0.0.pkg(16.43 KB)
    Nudge_Logger-1.0.1.pkg(16.08 KB)
  • v1.1.1.09082021120759(Sep 8, 2021)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed and notarized. The package has been signed, notarized and stapled.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Changes

    • 01c7ff9 - Fixes mismatched tags on example MobileConfig
    • 6a2e244 - Merge pull request #238 from tbridge/main
    • 10c83da - update simple-mode screenshots
    • 7ccc7eb - fix ss4 light mode
    • 26c1b9f - first pass updating layout to use geometryreader
    • 70a5e68 - cleanup
    • 0ba0781 - Cleaned up Standard mode positioning code. Now everything should line up nicely all the time
    • f503e4a - Increased topPadding to 28 (which happens to be the height of your standard issue progress bar) removed content height and content backgroundheight. Standard mode is now window resolution independant
    • 80e0e41 - don't allow companyLogo to be larger than defined space
    • 27fa4cc - bump to 1.1.1
    • e7a3f8a - move notarized application to outputs when not building package for PRs
    • 7b9b3a0 - logo guide
    • d8f12d2 - Merge pull request #240 from macadmins/fix-button-v111
    • 5494fe2 - Broke out some code that was common across multiple views for additional info, company logo and quit buttons
    • 179fd77 - Cleaned up SimpleMode so it is now also resolution independent Still a little work can be done to clean up duplicated code used between simple and standard modes but this is looking good so far.
    • 4dd83db - cleaned up some // and unused variables.
    • 052a783 - Merge branch 'development' into layout
    • cb1cf9c - fix code sign changes
    • 8f00382 - fix all the previews/naming and move more views to common
    • c5d1867 - keep all of the new variables consistent in padding
    • b06ad59 - fix -debug-ui-mode
    • dd6b167 - fix spacing on simpleMode
    • 370b4d3 - remove un-used functions from refactor
    • 98c0da1 - fix bug with standardMode by moving to InformationButton() and PrimaryQuitButton
    • cd7ed13 - move stateobject to main
    • 84ae8ee - fix button in debug mode
    • 365c7cf - Merge pull request #243 from bartreardon/layout
    • f96ea95 - test null values and anyOf
    • 9a3ba5b - completely redo the jamf json schema
    • 38be130 - Merge pull request #245 from macadmins/jamf-json-schema-v2
    • 4e0b9f3 - Padding for AdditionalInfoButton so it's not hugging the edcge of the window
    • 9934315 - Merge pull request #248 from bartreardon/corner_icon_adjustment
    • bd2425c - Fix layout of the "Defer" date picker view (#249)
    • 2d309ec - Merge pull request #251 from macadmins/development
    Source code(tar.gz)
    Source code(zip)
    Nudge-1.1.1.09082021120759.pkg(3.36 MB)
    Nudge_LaunchAgent-1.0.0.pkg(16.43 KB)
    Nudge_Logger-1.0.1.pkg(16.09 KB)
  • v1.1.0.08262021142007(Aug 26, 2021)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed and notarized. The package has been signed, notarized and stapled.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Changes

    • 5347d3b - Fix localization case.
    • c5b36b6 - Add Swedish localization.
    • 5574287 - Merge pull request #184 from macadmins/main
    • 7294e89 - Merge pull request #183 from MagerValp/main
    • 4b5b77d - first commit to build on xcode 13
    • 8b5c024 - Allow softwareupdate downloading on 11.4 and higher
    • 298579d - Create a nudge demo scheme
    • a23a375 - update project compatibility to xcode 12 and higher
    • 02b57dd - Add some more schemes and rename
    • d82f1e1 - get rid of policymanager :/
    • 9b49029 - add screenshot to demo schema
    • a501fd8 - a much better way to debug with schemes
    • 196642a - fix padding
    • e88fd3a - ocd spacing
    • db53489 - reduce languages to render in preview
    • 37d0ada - make screenshotzoom consistent in preview
    • d9461d1 - reduce reused views for ContentView
    • e3bb1d1 - move main windowstyle to new swiftui syntax
    • 5aebab2 - reduce repeated code on contentview with a background view
    • 0feddde - Make Nudge less annoying when debugging in xcode
    • 08c5d15 - fix spacing on bottom buttons
    • 21ab1ea - move to some more swiftui 5.5 syntax
    • 6585428 - Bump to 1.0.1
    • 68efaec - rename runners to use new naming for big sur
    • 3644cac - try xcode 13
    • 7e24b1b - fix for build
    • 39c44c3 - test debug
    • 1104db5 - Merge pull request #193 from macadmins/dev-swift55
    • 73cec7d - Tweak minimal mode by adding required and current OS
    • a2008e6 - Add hideDeferralCount preferences
    • ade9c74 - Add hideDeferralCount to standard mode
    • 2bab4d8 - Not sure why this isn't working, but CLI arg works fine
    • 050293c - I think this fixes it
    • c75ad28 - Remove commented out line as it isn't needed
    • 6e947c5 - Resolved conflict with dev
    • cd2009a - Get rid of CLI option and only use pref
    • 18edbc6 - Remove excess space
    • f6744a3 - take new case for Days Remaining
    • 6688248 - Add device info to simple mode
    • ade86d3 - Take new day display text
    • bf18b0d - Fix more info spacing
    • e09a8f8 - Alphabet things
    • 77c5005 - MORE ALPHABET THINGS
    • 0bd1a51 - Standardize plain button style and fix ? spacing in standard mode
    • 957e5e8 - Add back showDeferralCount to simple mode and tweak layout
    • 03bbf7d - This is dumb but it works
    • 4f1e4d1 - Various French localization fixes Changes done: - in French we don't capitalize first letter of ervery words in a title - all punctuation with two parts (:;?!) require an insecable space before - using better words when appropriate - keeping homogenous translation for the word device accros the labels and buttons
    • 7f05e37 - Syntax error (, instead of ;) in the strings file
    • eb27ef2 - Merge pull request #192 from macadmins/nate/show-required-ver-minimal
    • e262229 - Merge branch 'development' into feature/french-fix
    • 86adb34 - Merge pull request #194 from ygini/feature/french-fix
    • 0f62826 - add major upgrade functionality
    • 36b15f0 - remove non-needed true checks
    • 8e13a19 - Merge pull request #196 from macadmins/major-upgrade-dev
    • 05b1561 - initial dutch
    • b1cc238 - finish nl localization
    • e7e80b8 - proper credits
    • f9e6c98 - Merge pull request #200 from macadmins/dutch
    • 1167008 - Fix json example to be valid json
    • f71a591 - Update README.md
    • c5f127a - Merge pull request #201 from kcrawford/json-readme-updates
    • d97657b - translate update time notice
    • cfd95b2 - Merge pull request #1 from headmin/german-strings-update
    • 483e27a - Merge pull request #202 from headmin/main
    • 8b5efa5 - fix broken dutch language
    • 851fa1c - Merge pull request #203 from macadmins/dutch-fix
    • 08ea7eb - initial custom user deferrals
    • 8fc778c - Add bug fixes around how far a user can defer based on requiredinstalldate
    • 55a8902 - change key after thinking about it while writing PR notes
    • 5b9ff3c - log user deferral event with timestamp
    • f3a565d - make it more understood why nudge is exiting
    • 43c4d9c - add user deferrals to simpleMode
    • 00c73be - create new allowUserQuitDeferrals option
    • b2d658c - update json and mobileconfig
    • b7634fa - localize the new buttons for all supported languages
    • edf30ec - add customDeferralButtonText, oneDayDeferralButtonText, oneHourDeferralButtonText
    • d8378ce - fix bug with showing old quit button with userDeferralQuit
    • f379728 - update the jamf json schema
    • 94d0680 - remove non-needed umad code that I'm never going to implement
    • ca9c698 - better logging around deferral time
    • 9745e46 - move DeviceInfo to UI folder
    • 9f7f1d8 - move deferral to its own sheet v1 - standardMode only
    • 3880dff - make it look better
    • 7ff3a60 - add new features to simplemode
    • a556591 - update german from PR-206
    • 1828889 - Merge pull request #204 from macadmins/custom-user-deferrals
    • 09675c3 - add actionButtonPath feature
    • 05f36ef - Merge pull request #207 from macadmins/add-actionButtonPath
    • bd4c56f - add acceptableApplicationBundleIDs feature
    • a5b4c9d - Merge pull request #208 from macadmins/optional-bundle-ids
    • 8814879 - Show negative days remaining with red, bold color
    • 8c55814 - Merge pull request #209 from macadmins/negative-days
    • fc8938a - log/reset deferral counts across nudge events
    • b01db73 - Merge pull request #210 from macadmins/per-nudge-event-deferral-count
    • 29c6f13 - fix requireDualQuitButtons logic
    • 8d8c06d - Merge pull request #213 from macadmins/fix-dev-bugs
    • 50c71ca - fix exit logic
    • 1344a9a - move BackgroundView to needToActivateNudge instead of standard NSApp.activate
    • e9d8d77 - Merge pull request #215 from macadmins/enhance-nudge-launch
    • f199bdf - Small changes to deferRunUntil on Later button and fix crashing
    • 84d6c74 - fix dark mode previews by wrapping them in ZStack
    • 1de9939 - fix simplemode preview on ContentView
    • 599ddac - move to automatic code signing with macadmins clever devops devid
    • 54ddd0a - call .localized() for new user-deferrals
    • ec785c5 - finish swiftui 5.5 syntax
    • 83419b1 - move to .edgesIgnoringSafeArea(.all) and fix hover bug on deviceInfo
    • f5dd39e - actually fix simple-mode jumping and bottom button padding
    • b161bd3 - bump to 1.1.0
    • 8796c57 - first attempt at the new application cert
    • 4fe4331 - go back to manual code signing for github actions
    • da1b86b - bump info.plist to 1.1.0
    • e2180df - move to Developer ID Application with other development team
    • 65e97ec - update project to 9GQZ7KUFR6
    • 597dbc4 - try the new notary path
    • 519eddb - try to fix notarization issues
    • a40c521 - Place mainContentText in a dynamic ScrollView
    • 24219a7 - try to generate a changelog
    • f7f0ffe - finish dynamic changelog for all github release actions
    • 1f315bc - create a preinstall script to exit nudge during upgrades of the pkg
    • 77f0aa6 - Fix typo in Swedish localization.
    • 8ad2415 - Merge pull request #221 from MagerValp/development
    • 2784c62 - Correct new Menu deferral UI properties
    • dfdc710 - Ensure Nudge is foremost application upon first launch if all release conditions are met
    • ed49ab5 - ignore user session deferral if past required installation date
    • 75f709a - fully center dditional device information button for both modes
    • 68e14f0 - redo logic of user-deferrals
    • 1b4e50b - reduce repeated code with a function
    • 3f798c6 - tweak deferral logic and aggressive mode
    • a9ee9fb - update the example files with all current big sur releases
    • ad86469 - Move to a single nudgeRefreshCycleTimer for both standard/simple mode
    • 6a195f0 - reduce .onAppear(nudgeStartLogic) to a single call
    • 62b51d7 - move parts of needToActivateNudge to ObservableObject
    • 352eedf - reduce the amount of noise being logged to single entries
    • 05a59d8 - add some todos
    • 1d1ba75 - Move targetedOSVersion to targetedOSVersionRule
    • 2895cad - add todo comment about why I'm invoking ProcessInfo()
    • e859aad - update jamf json schema
    • f56afe6 - clean up if/elseif
    • b162b29 - Merge pull request #225 from macadmins/version-rules-2
    • 50f542f - DeferView triggers userInitiatedExit() instead of the dismissal sheet
    • c6b050b - Merge pull request #227 from macadmins/version-rules-2
    • 9852225 - update README for 1.1.0 release
    • d427a96 - button not buttons
    • 09d1cca - update all screenshots for v1.1.0
    • 301a5dd - fix jamf json schema
    • d3511d1 - fully utilize mainContextText if there is no screenshot present and not forcing screenshot cli argument
    • 0004fbd - fix crash when actionButtonPath is an empty string
    • d2f2d50 - fix -demo-mode UI in standard and simple mode
    • cb78dbd - add aggressiveUserExperience preference
    • 7fdb76b - update jamf json schema for new default of attemptToFetchMajorUpgrade
    • ca585cb - Merge pull request #228 from macadmins/development
    Source code(tar.gz)
    Source code(zip)
    Nudge-1.1.0.08262021142007.pkg(3.40 MB)
    Nudge_LaunchAgent-1.0.0.pkg(16.43 KB)
    Nudge_Logger-1.0.1.pkg(16.08 KB)
  • v1.0.0.05062021124623(May 6, 2021)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed application as well as the package.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Source code(tar.gz)
    Source code(zip)
    Nudge-1.0.0.05062021124623.pkg(3.29 MB)
    Nudge_LaunchAgent-1.0.0.pkg(16.43 KB)
    Nudge_Logger-1.0.1.pkg(16.09 KB)
  • v1.0.0.04292021134143(Apr 29, 2021)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed application as well as the package.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Source code(tar.gz)
    Source code(zip)
    Nudge-1.0.0.04292021134143.pkg(3.29 MB)
    Nudge_LaunchAgent-1.0.0.pkg(16.43 KB)
    Nudge_Logger-1.0.1.pkg(16.10 KB)
  • v1.0.0.03242021182514(Mar 24, 2021)

    Notes

    This is a version of Nudge created by GitHub Actions. Nudge.app has been signed application as well as the package.

    By default Nudge looks for a com.github.macadmins.Nudge.json file located in /Library/Preferences. If you would like to use an alternative path, please read the README or the WIKI

    About the LaunchAgent

    This is a basic launch agent that opens Nudge twice an hour, every 30 minutes. If you would like to reduce the amount of times Nudge launches per day, it is recommended to create your own LaunchAgent.

    Source code(tar.gz)
    Source code(zip)
    Nudge-1.0.0.03242021182514.pkg(3.29 MB)
    Nudge_LaunchAgent-1.0.0.pkg(16.43 KB)
    Nudge_Logger-1.0.1.pkg(16.08 KB)
Owner
OSS projects for Mac Admins (Docker, management)
null
This application was created as a practice and shows a simply VIPER master-detail application.

MARVEL UNIVERSE CHARACTERS This application was created as a practice and shows a simply VIPER master-detail application. Main screen shows a list of

Daniel Moraleda 0 Nov 15, 2021
iOS Open Source Application written in Swift. App to manage borrowed books at UFRGS using SABI.

RenovaLivrosUFRGS iOS Open Source Application written in Swift. App to manage borrowed books at UFRGS using SABI. App in portuguese, code and comments

Matheus Cavalca 5 Feb 10, 2022
An iOS application written in Swift to demonstrate how to implement a Clean Architecture in iOS

Reminders iOS An iOS application written in Swift to demonstrate how to implement a Clean Architecture in iOS. Idea The idea is to implement the simpl

Tiago Martinho 306 Nov 9, 2022
GitHub-User is an iOS native application, written in Swift programming language.

#GitHub-User GitHub-User is an iOS native application, written in Swift programming language. This project is an interview take home project. The arch

Zeljko Lucic 1 Mar 25, 2022
Provenance is a native macOS application that interacts with the Up Banking Developer API to display information about your bank accounts, transactions, categories, tags and more.

Provenance Provenance is a native macOS application that interacts with the Up Banking Developer API to display information about your bank accounts,

Paul Tavitian 8 Dec 8, 2022
Swush - macOS Application to play with the Apple Push Notification service (APNs)

Swush ✨ Description A macOS app to push notifications to APNS with ease. ⚡ ?? Pe

Quentin Eude 80 Dec 23, 2022
Lace - A simple NTS.live macOS application

Marconio A simple macOS (and maybe iOS) application to listen to NTS through. NT

Brian Michel 21 Nov 22, 2022
Seaglass is a truly native macOS client for Matrix. It is written in Swift and uses the Cocoa user interface framework.

Seaglass is a truly native macOS client for Matrix. It is written in Swift and uses the Cocoa user interface framework.

null 1 Jan 17, 2022
small iOS & ipadOS application written in SwiftUI and Combine, that fetches twitter users and tweets using Twitter's api

HomeTwitter Small iOS & ipadOS application written in SwiftUI and Combine, that fetches twitter users and tweets using Twitter's api. This is just a s

Sorin Miroiu 1 May 13, 2022
"Podman for macOS" is a macOS frontend for Podman.

Podman for macOS "Podman for macOS" is a macOS frontend for Podman. It can be used to start and stop both the Podman Machine and its running container

Victor Gama 573 Jan 5, 2023
A native SoundCloud app for macOS, written in SwiftUI

Nuage A native SoundCloud app for macOS, written in SwiftUI About Nuage is an independent and open-source project to build a native SoundCloud client

Laurin Brandner 203 Dec 30, 2022
The movie detail screen of the TodoMovies application using Swift

Desafio Mobile2You - TodoMovies Este desafio consiste na criação de uma réplica da tela de detalhe dos filmes do aplicativo TodoMovies utilizando Swif

Rychillie 7 Feb 10, 2022
Simple weather application in Swift for iOS 15.

DaWeather ⛅️ Simple weather application in Swift for iOS 15. General Information DaWeather ⛅️ will help you determine the current weather Features Get

Maksim Pavlovich 2 Jan 16, 2022
iOS mobile development using Swift - Online Shopping Application

iOS mobile development using Swift - Online Shopping Application - yr4_sem1 This is an application developed as an individual project for Mobile Appli

Madhawa Jayagoda 2 Nov 10, 2021
A Swift iOS application designed to help DMs / GMs run tabletop RPGs

Project Overview This project is a work in progress iOS app designed to help Dungeon Masters run tabletop role playing games. It is meant as an explor

null 0 Nov 30, 2021
CloneNetflix - A Netflix Clone application with swift

CloneNetflix - A Netflix Clone application with swift

유정모 1 Mar 16, 2022
Terminal TODO application in Swift with ncurses.

stodo Terminal TODO application in Swift with ncurses. Development streamed live

Alejandro Martínez 3 Aug 3, 2022
It is a todo application created with Swift and Storyboard.

?? ?? ⏰ ?? This project contains create, update, delete or add todos to the table. Choose the todo you want to complete and then click on done. Click

Enes Kızılcan 1 Jun 9, 2022
iOS (swift) version of skydove's Pokedex application. Based on MVVM architecture.

Pokedex - Swift iOS (swift) version of skydove's android application, check it out. Based on MVVM architecture. It was written in memory of Ferhat, wh

Mert 2 Dec 4, 2022