IBMs Enrollment Screen Recreated

jtratta
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.

https://github.com/jason-tratta/ProgressScreen

137 REPLIES 137

jonnydford
Contributor II

Looking very nice!

I'm just downloaded and giving it a play with now.

jbruno
New Contributor

Greatly appreciated! Playing with it now.

ben_hertenstein
Release Candidate Programs Tester

Excellent!

McAwesome
Valued Contributor

Can you provide some screenshots or a video or anything to help those of us who didn't see it when IBM showed it off? I'm not sure what I'm looking at here.

(Edit) Compiled and ran it. Here's the type of screen. I'm guessing this is intended for DEP setups?
fca418aa0eef47f2b42e04735dd39adf

rdwhitt
Contributor II

Ya IBM had their app running at full screen after DEP enrollment completed. It had the progress bar and some other information for the end user, such as how to get support.

jtratta
New Contributor III

@McAwesome Yea...they used it for self-enrollment since all the user would get is a new Mac and a post-it with a URL. An app like this would pop up after enrollment and explain to the user what was being installed, who to contact, ect. They also said they liked it because you could tell when the build was complete internally. When they post the video of the season I'm sure you'll see it, I haven't seen any slides of the app since the presentation. The goal really is to make the html portion really nice, get key information across, and give the user and idea when the mac is completely ready.

McAwesome
Valued Contributor

Poking through and thinking a bit, it may be better to use a pre-defined array of policy names rather than go with the package. Once you see the "Executing Policy _", drop _ from the array and update the progress bar a bit. This would help keep it up to date a bit longer as policy names change less frequently than package names(i.e. "prestage-Chrome" vs "Chrome-45.6.21.blah"). It'd add a lot of hoops to jump through since you can't ensure multiple policies will always run in a certain order unless you daisy chained them through events or something. Still, it's a lot of up front work for fewer changes down the line.

I could also see just using a count for "Inventory will be updated when al queued actions in Self Service are complete" if you know how many policies will be executed on DEP enrollment. So instead of having four separate things to update it, increase the bar by 1/X where X=(number of policies to be run). That would require just updating one number rather than package names or the like. I'm not as well versed in the JSS API, but I feel like there's a way to return all the policies that happen on enrollment complete. If so, you could potentially automate that number gathering as step one of the enrollment stuff. That way you don't ever have to update things manually.

jtratta
New Contributor III

I love those ideas. I was obviously mad hacking this together in a few days...but I think you're on to something with the policy count. I can definitely ask the API for a policy count. I'll be giving that a try for sure.

martel
New Contributor III

I love this. This one one of the things I was most interested from the talk. What is you way to scope this with file vault? We have a custom trigger that calls a bunch of policies and I was wondering how we would get the progress correctly and get it to kick off. Thanks in advance.

jtratta
New Contributor III

@martel I would try kicking off the FV process immediately after enrollment and then start with the policies after the reboot. Maybe through smart groups? Since the polices fire alphabetically you could make this install first and launch with a post flight scripts. I'm just riffing...everyone's environment is different so these custom things are hard to mold to everything.

Simmo
Contributor II
Contributor II

Would it be possible to get some instructions on how to set this up?
I've opened it up in xCode and tried to compile and run but the application has a blank screen and hangs, with errors in xCode

I've not touched xCode for any kind of app development before so I am completely unsure as to where I am meant to be looking to get this working.

How is the app meant to launch after DEP enrollment?
An enrollment complete trigger that installs the app and then runs it, with a custom trigger to start downloading the other apps?

jtratta
New Contributor III

@Simmo I know that the app will likely crash if the jamf.log is not present on the machine...so there is still some error handling to add to the app on that front. If you could, just submit the error as an issue on the github repo. That would help me the most.

The app could be launched anytime you want to communicate to your client really. In the IBM demo, they showed their app after user enrollment. If I remember correctly...it launched after the FileVault restart.

To launch the app, I would recommend packaging it up in composer and using a post-flight script to launch it. All the progress bar here is doing is watching the jamf.log for progress. The JSS is still doing all the real work.

I will work on getting better instructions together for compiling. I would like to eventually have it where it comes pre-compiled and the html and other necessary data stand outside the app and easily edited.

Simmo
Contributor II
Contributor II

@jtratta Sounds good, I'll submit the error I see.

The machine I am running it on does not have a jamf.log, so that is the likely cause of that.

I'll play around a bit, as this could be very beneficial to us coming in the start of the school year with several hundred new devices coming in and we're making the move to using DEP and no imaging.
Appreciate your work.

jonnydford
Contributor II

I'll submit this on GitHub too but I think using the System Font would be a better default than using Arial etc.

McAwesome
Valued Contributor

Another thing to consider would be having this app actually create the triggers. Napkin mathing it here, but it could first check for policies with a known custom trigger(ProgressScreen). Once it has a count of how many policies it will run, it could create that trigger event

sudo jamf policy -trigger ProgressScreen

This may actually be a bit more accurate than just counting ones that have trigger_enrollment_complete=true due to the ProgressScreen app itself triggering the policies.

I'd code it up, but unfortunately Swift may as well be German for me at this point. Still learning the ropes of it.

lcopeland
New Contributor

I really like this and am interested on using this for our new devices next year as well. I do not use the API nor do I know how to code so, any guidance is much appreciated. Thanks for developing this!

martel
New Contributor III

I am wondering if you could just scope the progress bar to the jamf logs? We have a setup where we have a custom trigger the calls all of our imaging policies. I opened up xcode and played around a bit but am having trouble scoping to the larger numbers of policies that we kick off for the progress bar. Would love for the screen to be completed when filevault is done encrypting. Any ideas?

jtratta
New Contributor III

@martel The app (currently) only follows the jamf log. The trick is determining a duration once the screen pops up. My first pass at this was to take an average time (one that you would determine in your own testing) and use that to smooth out the progress bar. The waypoints are there to lend accuracy and help the app adjust the progress bar to what's actually happening. Hopefully that makes sense..and answers your question?

It's the only way I've come up with the doesn't need some sort of special credentials to run.

Do you mean the ENTIRE encryption process...or just the kickoff after the first reboot? If you're talking about having the screen come up after the user is added into Filevault; I'm sure there is a way to scope to a smart group that is looking for FV policy completion.

@lcopeland I'm trying to make the app as easily customizable as possible. Right now, if you can create a HTML page in a WSIWIG and replace what's in there you'd nearly be there. You'll just need to edit a few values in the actual code.

I will work on getting easier documentation to follow so it's more obvious on how to get this running for any environment.

jtratta
New Contributor III

A question for the group then: If I were to include a generic HTML page what should that be? I can't imagine what that would even be.

McAwesome
Valued Contributor

@jtratta I'd just make that generic page have some fields for each place to replace. So do a side bar that has the IT department name, phone number, address, etc but with obvious dummy text. The rest is pretty much whatever.

martel
New Contributor III

But could you get it to show the progress of the full disk encryption? It is currently working for us by showing us the logs. We don't have a progress bar though.

What I am thinking in regards to Filevault its to make a separate app that looks to the filevault progress? I have no Idea how to do that.

rdwhitt
Contributor II

I'm working on a template for this that I can make available. Right now it's just a static page you can edit, but I plan to add a slider for customized content. 470ba5fca64b47d6934bf82d2dbeb26e

jphillips
Release Candidate Programs Tester

Very cool and great idea. After seeing @rdwhitt customization, I decided to mess around with it a little for our own environment.
0fbe2a9c69ab447397b5da33002b0a28

I wasn't able to attend JNUC, but I just saw the IBM presentation on Keynote, and also implemented the completion screen after enrollment (obviously stole heavily from IBM's):
bb4bc8ea6a36492db4d9cac0194da598

I am noticing that the app in our environment isn't quitting itself, so I'm trying to work on that next.

martel
New Contributor III

I still can't get the progress bar to load...

MischaB
New Contributor II
New Contributor II

Looking good @jphillips!! can you share your custom code???

rdwhitt
Contributor II

@jphillips Nice!

@martel Are you not seeing the progress bar at all, or is it just not progressing? Make sure to edit the ViewController.swift file in Xcode and set your package waypoints.

martel
New Contributor III

how would I set the waypoints if the packages change based on version numbers?

rdwhitt
Contributor II

Right now if you have specified a pkg as a waypoint, and the name of the pkg changes because of an update, then you would need to update the waypoint name in the app. Like @McAwesome mentioned, it would be nice if this looked at something else since package names can change frequently.

Just thinking out loud here...I wonder if having four empty packages install would work...call them something like stage1.pkg, stage2.pkg, etc....You could then have as many policies run in-between as needed and you wouldn't need to worry about changing the waypoint names.

jphillips
Release Candidate Programs Tester

@martel I have found that the progress bar will not appear on anything except El Cap.

@mvdbent, there isn't any custom code. I just modified the location of the progress bar on the storyboard to fit my webpage.

@rdwhitt, I was thinking about this earlier too. I think what I might implement, since I'm trying to teach myself Swift anyway, is to have the app grab information off of a server for the package stages. This way I can just update the plist on a server when filenames change and will never have to keep recreating the app.

jtratta
New Contributor III

@jphillips You can change the deployment target in Xcode if you want to deploy to 10.10 as well. You can see in this image under Deployment info where you can set the Deployment Target. 2dc2147fadca488cb7a6500d048760dc

You can easily compile to at least 10.9. If you do so, Xcode will throw an error and suggest adding code to the viewDidLoad method. Click the red "!" and it will take you to the offending code seen in the images below. This should then work in 10.9. (*Disclaimer: I have not yet tested this on target machines)

26c10d751a73466eb6e155ed53c523ed
28571db0814046db859958d19e4d699c

jphillips
Release Candidate Programs Tester

@jtratta I had already changed the target deployment to 10,10, but the bar still didn't show for some reason. I have not tried taking it to 10.9, though.

jtratta
New Contributor III

@jphillips I just did a test in a 10.9 VM. Sadly...it does not work at all. I'll have to work on some backwards compatibility.

martel
New Contributor III

10.10 not showing the progress bar might be my problem too.

Simmo
Contributor II
Contributor II

The Mac@IBM presentation is now available to view here

franton
Valued Contributor III

This is nice.

However as suggested by others, being able to run a single custom trigger is very helpful. I'd also make the case for having it run over the login window too, as i'm sure others would want such functionality.

hkabik
Valued Contributor

This is really really great! Works like a charm.

Does any have any advise for customizing the web page? Which app to use (preferably something graphical)? Totally out of my element on that part of it. :(

jtratta
New Contributor III

@hkabik I used Abobe Muse to throw something together. To implement your own html, just replace everything in the html folder in Xcode. There are quite a few html WYSIWYG's out there...it would just be a matter of finding the one you like best.

hkabik
Valued Contributor

@jtratta

After you've made the page as you want it... how do you insert the progress bar where you want it?

Ah nm, these are questions for google... I'll go try to get my learn on.

m_gunnarsson
New Contributor II

Hi.

@jtratta

I was wondering what you would consider best practise for
1. deploying the progress screen app to the client machine? 2. executing it?
3. making policies affect the progress bar?
4 making the application quit in a nice way, not like exit 0?

Very greatefull for any and all ideas.

/martin