Giter Club home page Giter Club logo

nudge's People

Contributors

arice avatar bartreardon avatar chilcote avatar colorenz avatar dan-snelson avatar drtaru avatar entusdictus avatar erikng avatar evansimm avatar gmarnin avatar groob avatar gustaf08 avatar headmin avatar homebysix avatar insyria avatar johnmikee avatar k725 avatar kcrawford avatar kevinmcox avatar magervalp avatar n8felton avatar natewalck avatar pro4tlzz avatar rorymurdock avatar rubengamarrarodriguez-tomtom avatar samuelzamvil avatar smithjw avatar tbridge avatar tctg-bryan avatar ygini avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nudge's Issues

add randomDelay logic

Python Nudge has a feature to randomly delay the launch by up to 1200 seconds.

  1. make a new optional key maxRandomDelayInSeconds with a default of 1200
  2. add the random delay logic to the nudgeStartLogic() function

Needs a real icon

The one I made works but I was thinking about this:

A cute avatar with a sad/disappointed face looking down at a pending OS update

Nudge.app path

where should it go?

I'm thinking /Applications/Utilities

trigger updates info directly from MDM

for @groob - I have no idea how this will work, but it would likely need to be some kind of custom plugin system.

I'm hesitant to support micromdm/ws1/etc within the app due me having to then support it.

Maybe there is a way to read files outside of the app bundle

Allow user to choose time of next prompt.

In our environment we have users who care a lot about when they're expected to do something. I proposed the "update device" button changes to a dropdown with the following actions.

  1. Update now (default).
  2. Remind me in 1 hour.
  3. Remind me in a day.
  4. Remind me at << pick date >>.

In our internal implementation of nudge we already have the first three options and the fourth is the most highly requested. People don't like getting nagged during meetings and will also refuse to touch their system while they're oncall, which is understandable.

redo preferences

the preference keys and the entire design should be redone.

I'd like to see something like

{
  "os_requirements": {
     "minimum_os": "11.3"
  },
  "user_interface": {
    "en-us": {}
    }
}

Also I think all the current key names are dumb and should be re-done as well.

don't open if already opened

This was likely an issue with python nudge only because it's a hack, but just check that the app doesn't double launch

Timer vs LaunchAgent

Right now Nudge is going in the direction of a built-in timer, which would make the app also acts as a long running process.
The alternative is to have Nudge be managed by a LaunchAgent with a StartInterval. The system state would be evaluated at an interval and the GUI would be opened only if necessary.

There's pros/cons to both, but one of the advantages to a LaunchAgent is that it gives each admin a lot of flexibility to when the app is launched, without adding extra complexity to the code.

Thoughts?

add "UMAD" functionality

Nudge and UMAD are the same but similar. Rather than make two tools, it would be nice if nudge could just be a universal tool.

experiment tags

eventually it would be cool to try experiments where people get aggressive ui and other weird UI behaviors.

Nudge could look at some file and then do it.

add logic for M1 macs

  • On m1 macs you cannot run softwareupdate and download updates without user interaction. We need to skip this unless apple changes the behavior in a future OS.

major upgrade needs

  1. bail if bundle doesn't exist or attempt to fetch it with softwareupdate (does this work with Apple Silicon?)
  2. just bail

return OS build version and change requiredMinimumOSVersionBuild to an array

@groob mentioned that we can't just look at a single build we want to enforce because of forked builds.

Apple could potentially release one build of 11.3.0 and another build of it later.

We need to do the following:

  1. return the OS build
  2. change requiredMinimumOSVersionBuild to an array
  3. update the logic in fullyUpdated() to figure all of this out by moving to some new logic that utilizes equiredMinimumOSVersionBuild

PrivilegedHelper

  1. Would allow us to possibly help companies with standard users
  2. Would be required to fulfill #34

Need an icon

The one I made works but I was thinking about this:

A cute avatar with a sad/disappointed face looking down at a pending OS update

Figure out older OS support

Right now because of the main thread in SwiftUI, I believe it only works on Big Sur and higher.

We should refactor this to add Catalina support or see if there is some kind of if/else statement we can use. I'm not sure if we will be able to support 10.14 and lower with SwiftUI and to be honest, people can just deploy the python version if they need support there.

Test multi monitor support

Currently, nudge in python has a bug where if you connect multi monitors, it might not render centered (not sure why).

We need to test for this behavior when nudge is launched with 2 or even 3 monitors. It needs to launch on the primary monitor only and move to new primary, always being centered.

Aggressive mode

Normal behavior:

  1. Check to see if app is currently the foremost app and if not bring it back
  2. Do not bring UI back if System Preferences and/or an upgrade application is currently foremost app

Agressive behavior

  1. Check if dismissal count is over threshold
  2. Loop through all of the running applications NSWorkspace.sharedWorkspace().runningApplications() and hide every singe app
  3. Check to see if app is currently the foremost app and if not bring it back
  4. Open the system preferences and/or upgrade application for user

Refactor everything once core logic is built

code is a mess of me probably doing python style Swift code and also just banging my head on the wall until it all works.

The code will need a giant refactor. I am up for comments and suggestions.

make an initial README

@rorymurdock this is for you :)

  1. document all the current keys
  2. document that right now you can only manage nudge via the json, currently located at /Library/Preferences/com.github.macadmins.Nudge.json and you can find a full example within the xcode project
  3. Add a note about -demo mode and how to invoke it
  4. Note that this is ** not ready for production use**
  5. Maybe add a blurb how you can build the app

Also note that you don't have to specify all the keys. The following could be used as an example.

{
    "optionalFeatures": {
        "iconDarkPath": "/anywhere/logoDark.png",
        "iconLightPath": "/anywhere/logoLight.png",
        "informationButtonPath": "https://github.com/macadmins/Nudge",
        "randomDelay": false,
        "screenShotDarkPath": "/anywhere/screenShotDark.png",
        "screenShotLightPath": "/anywhere/screenShotLight.png"
    },
    "osVersionRequirements": [
        {
            "majorUpgradeAppPath": "/Applications/Install macOS Big Sur.app",
            "requiredInstallationDate": "2021-02-13T00:00:00Z",
            "requiredMinimumOSVersion": "11.2.1",
            "targetedOSVersions": [
                "11.0",
                "11.0.1",
                "11.1",
                "11.2"
            ]
        }
    ],
    "userInterface": {
        "updateElements": {
            "mainContentHeader": "A security update is required on your machine.",
            "mainContentText": "A fully up-to-date device is required to ensure that we can adequately protect your computer.\n\nIf you do not update your computer, you may lose access to some items necessary for your day-to-day tasks including Wi-Fi.\n\nTo begin the update, simply click on the button below and follow the provided steps.",
            "mainHeader": "macOS Update Available",
            "subHeader": "A friendly reminder from your Client Platform Engineering (CPE) team"
        }
    }
}

GitHub Actions for automated pkg builds of Nudge

I want GitHub Actions to build packages (not dmgs) of Nudge

  1. We need a signing certificate for the app. I'm hoping @natewalck will create one for us
  2. We need a pkg signing certificate. @natewalck - again, can I use the one we already use for macadmins/python

This will then allow us to make an autopkg recipe so people can quickly deploy new versions. I prefer pkgs over dmgs as it's one less step for non-munki tooling

I've never done automated xcbuild stuff so hoping someone else might already know what to do.

Allow a no config launch

Currently if there's no config the app just crashes, let's allow it to launch with some defaults

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.