MacOS Onboarding Splash Screen

Inspired by the JNUC talk presented by James Smith last year, I set out to improve our current user onboarding experience.

Currently we use DEP and custom scoping to trigger JAMF enrollment policies.

This lead to a few issues as the policy triggers are contingent on manual steps being executed. As we know, anytime we introduce manual processes we open the door for mistakes and inaccuracies. Also,

Luckily, we can leverage the @enrollment JAMF trigger to kick off onboarding policies and serve up a splash screen to give users feedback during the initial setup.

To accomplish this we need to download the SplashBuddy swift package written by Francis Levaux-Tiffreau and others.

https://github.com/Shufflepuck/SplashBuddy

How it works

Basically, when we initiate the @enrollment trigger, SplashBuddy watches the jamf.log for the log entry that displays package installation which ends with a .pkg suffix and parses that file name and version number and cross references is with the configuration .plist file. Then it displays the installation progress in the Splash.

Unfortunately at this time, all software has to be explicitly defined in the configuration .plist and must match the ordering of your JAMF policies. Since there is no predefined method of ordering policy execution, we can name our enrollment policies to control the ordering by prepending policies with numbers. (00 ExamplePolicyName, 05 ExamplePolicyName, 10 ExamplePolicyName)

The most important part of this process is naming your .pkgs on your distribution points to reflect the plist dict entry. If the name is off or missing from the .plist, your enrollment policy will not show up or show the correct progress in the splash.

#Plist Configuration

Here's an example SplashBuddy plist

<?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>applicationsArray</key>
	<array>
		<dict>
			<key>canContinue</key>
			<false/>
			<key>description</key>
			<string>SSO</string>
			<key>displayName</key>
			<string>Enterprise Connect</string>
			<key>iconRelativePath</key>
			<string>enterpriseconnect.png</string>
			<key>packageName</key>
			<string>Enterprise Connect</string>
		</dict>
		<dict>
			<key>canContinue</key>
			<false/>
			<key>description</key>
			<string>Editor</string>
			<key>displayName</key>
			<string>TextMate</string>
			<key>iconRelativePath</key>
			<string>textmate.png</string>
			<key>packageName</key>
			<string>TextMate</string>
		</dict>
		<dict>
			<key>canContinue</key>
			<true/>
			<key>description</key>
			<string>Browser</string>
			<key>displayName</key>
			<string>Google Chrome</string>
			<key>iconRelativePath</key>
			<string>chrome.png</string>
			<key>packageName</key>
			<string>GoogleChrome</string>
		</dict>
	</array>
</dict>
</plist>

Edit the following to reflect the first part of the package name in jss. Example: GoogleChrome-1.0.0.pkg

<key>packageName</key>
<string>GoogleChrome</string> 

It's important to get this naming correct as this is what SplashBuddy looks for in the Jamf.log to display progress.

I'm currently working on a script leveraging JSSImporter to upload packages with the correct naming convention to the JSS while updating the .plist adhering to your pre-defined conventions.