IBMs Enrollment Screen Recreated

New Contributor III

Hi all,

Like many, I wanted my very own enrollment screen like the one IBM showed at the JNUC. I threw something together that works very similarly. This is a native app written in swift. I did try and make it easily editable for anyone to use and customize without knowing how to code. Here's the repo...I'll be updating and adding things as time goes on and cleaning it up.

You'll need to supply a html based page with your site specific information and then specify where 4 different packages land in the installation so the progress bar can display accurate information.

137 REPLIES 137

Valued Contributor

Does anyone know if the waypoint names can contain wildcards? Our packages will always have the same format, but the version number is included. We usually have something like "[group that uploaded it] [Name of program]-[version number].pkg", which would look something like "+Global+ Google Chrome-56.0.2924.87.pkg". Since we have to have the Chrome version in the package name every time, but everything else will stay the exact same, the ability to use a wildcard in it would be fantastic.

Contributor III

you could always build dummy payload free packages to place in your package flow to use for the waypoints?

Valued Contributor

I could, but our environment is getting stricter on package names and purposes which could lead to a situation where I can't actually keep them in the JSS like that.

New Contributor III


The updateWaypointMethod() method in ProgressScreen would need to be altered to allow for wildcards. I'll see if this is something I can add in a future update.

Valued Contributor

@jtratta Is there any place with a more detailed explanation for how to write up a script to configure the Progress Screen? I was modifying the project itself, but now I'm trying to make it a bit easier for others to use it at my organization. So I was going to write up a script that pulled JAMF parameters($4, $5, etc) in to fill in the blanks. The problem is I can't even get the bare minimum to work through applescript. I've made a very basic script that looks like this:


user=`stat -f%Su /dev/console`
sudo -u $user /usr/bin/osascript <<TimeComplete

tell application "ProgressScreen"
     set fullscreen of every configuration to false
end tell


From what I gather, all this should do is make the ProgressScreen app not use fullscreen. Instead, it seems to launch it in fullscreen while keeping the focus locked to the terminal window it obscures. After blindly quitting terminal, the Quit button in the ProgressScreen functions again. Clearly I am missing something basic here. Can you/anyone else point me in a good direction?


What @loceee said back here

It might look a little summink like this...


Valued Contributor

@loceee Oh man, I had looked at that but wasn't sure where the flags needed to be entered. I didn't realize it was the exact thing I was looking for. Thanks for the heads up.

Valued Contributor

@loceee Is that helper script working reliably for you? For me, it's failing to change the html loaded in about 75% of the time. That forces it to stop before it sets the build time, quit button, fullscreen, etc. It always fails in the exact same way, but it doesn't always fail. I think it'd be less frustrating if it was consistent one way or the other. The path to the replacement html is /PS/index.html. Here's the error that pops up most of the time:

Running script COE - Progress Screen Helper...
Script exit code: 1
Script result: 32:89: execution error: An error of type -10810 has occurred. (-10810)
Traceback (most recent call last):
File "/Library/Application Support/JAMF/tmp/COE - Progress Screen Helper", line 145, in 
File "/Library/Application Support/JAMF/tmp/COE - Progress Screen Helper", line 105, in main
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/", line 573, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['osascript', '-e', 'tell application "ProgressScreen"', '-e', 'set htmlURL of every configuration to "/PS/index.html"', '-e', 'end tell']' returned non-zero exit status 1
Error running script: return code was 1.

It should be noted that when everything is run outside of enrollment, it works perfectly 100% of the time. It only has these errors if it is run at enrollment.

New Contributor II

Hi Guys,

I know this is not the right forum, but i thought maybe someone here may know

Is there any program that does roughly the same thing on the window platform ?

The ability to display progress and feedback for deployment ?


New Contributor II

Found your GitHub a while back and have been using Progresscreen for our DEP deploy since. Thank you for a really nice share.

Valued Contributor

I managed to resolve my issue. For whatever reason, the file would not run correctly if run through JAMF. If I had to guess, I'd say this is because JAMF uses the System user when pushing things.

To resolve this, I included the script in the package that places all the needed files and added a postinstall shell script to launch it as the currently logged in user. It looks like this:

## postinstall

# Finds the current user's account
currentuser=$(/bin/ls -la /dev/console | /usr/bin/cut -d ' ' -f 4)

# Runs the script as that user.
su -l $currentuser -c "python /PS/ --start /PS/index.html --fullscreen --hidequit --buildtime 3600"

exit 0      ## Success
exit 1      ## Failure

In my testing, this way of launching things works every time while leaving it to run as System failed more than 60% of the time.


Strange that's not he behaviour I have been seeing. I'll be honest though I am not using it in production, and I am evaluating which way I will head for our DEP prod rollout.

If this is behaviour others are seeing it might be worthwhile making the script itself do the OSA calls as the current user to alleviate your workaround. Come to think of it it's probably better practice anyway... but I was thinking that we may even be able to drop it over the loginwindow in some cases (software update runs etc).

New Contributor

@jtratta Would you mind sharing the Muse project file which had your template from the screenshot in your enrollment app on GitHub?

New Contributor III

@HauRuck83 Unfortunately, that project is long gone. The generated files are in the Github project, in the htmlFiles folder. I think you can open that in Muse.


Hey @gavin.pardoe ,
stumbled on your app and looks really good! Nice job!
I'd need to do some modification (already edited the Department section). Would it possible to change the Asset Tag with the Serial Number, gathering the info from bash?
Thank you!

Contributor II

Sorry to resurrect an old thread but I have some questions about this.
I've recently become interested in doing this and started implementing my own solution.
How are you running the app at the loginwindow? I assume it's with a pre-login launchdaemon. As such, I've found the Apple example for that and started looking through it, but it's not answering my questions. For instance, I'm not finding a plist example for the launchdaemon in there.

Second, I know you have to set the "canBecomeVisibleWithoutLogin" value in the application but I'm not sure where.
I'm assuming it will be in appDelegate (swift), but I need an outlet to an NSWindow which I can't seem to make.
I am using the Storyboard instead of a xib file. Apple's example has a xib file with a panel that they make the connection to, then call that on the panel. How would I do the equivalent with the storyboard?
I feel like I need to somehow get the appdelegate's root controller and do it there.

Thanks for any and all info you can provide!


IBM Posted their app, have a look!

Contributor II

Sorry to bring up an old dead thread but has anyone tried this with Mojave, specifically with dark mode? I noticed when in Dark mode, it doesn't show everything compared to in light mode. can't seem to figure how to fix/resolve this. Any help would be appreciated!