This commit is contained in:
Armin Briegel
2024-10-29 13:39:17 +01:00
parent e3d908747a
commit 8623f85487
11 changed files with 284 additions and 107 deletions

View File

@@ -1,5 +1,52 @@
# Setup Manager - Change Log # Setup Manager - Change Log
## v1.1
(2024-10-23)
### New Features
- new action [`waitForUserEntry`](ConfigurationProfile.md#waitforuserentry) which allows for two-phase installation workflows in Jamf Pro. When Setup Manager reaches this action it will wait for the user entry to save the data entry, then it will run a recon/Update Inventory. Policy actions that follow this, can then be scoped to data from the user entry. (Jamf-Concepts/Setup-Manager#11)
- data from user entry is now written to a file when Setup Manager submits data. See details in [User Entry](Docs/Extras.md#user-data-file) (Jamf-Concepts/Setup-Manager#9)
- use token substitution in the `title`, `message`, and action `label` values (as well as `computerNameTemplate`)
- token substitution can extract center characters with `:=n`
- localization of custom text in the configuration profile has been simplified. The previous method still works, but is considered deprecated. [Details](ConfigurationProfile.md#localization)
### Fixes and improvements
1.1beta:
- icons using `symbol:` that end in `.app` now work properly
- Elapsed time is shown in "About this Mac…" Start time is shown with option key.
- svg and pdf images used for `icon`s should now work
- general fixes in user entry setup
- improved rendering in Help View (Jamf-Concepts/Setup-Manager#12)
- fixes to json schema
- improved and updated documentation
- included Installomator script updated to [v10.6](https://github.com/Installomator/Installomator/releases/v10.6)
- added Setup Manager version and macOS version and build to tracking ping
- fixed UI glitch in macOS Sequoia
1.1 release:
- documentation updates and fixes (Jamf-Concepts/Setup-Manager#35, Jamf-Concepts/Setup-Manager#44, Jamf-Concepts/Setup-Manager#48, Jamf-Concepts/Setup-Manager#51)
- custom `accentColor` now works correctly with SF Symbol icons (Jamf-Concepts/Setup-Manager#41)
- setting a `placeholder` no longer overrides a `default` in `userEntry` (Jamf-Concepts/Setup-Manager#43)
- more UI updates
- Hebrew localization
### Beta features
Even though we are confident that the 1.1 release is overall stable and ready to be used in production, we believe this feature may require more testing. When, after thorough testing in your environment, you conclude this works for your workflow, please let us know about success or any issues you might encounter.
- Setup Manager can now run over Login Window, instead of immediately after installation. This also allows Setup Manager to work with AutoAdvance. Use [the new `runAt` key](ConfigurationProfile.md#runAt) in the profile to determine when Setup Manager runs (Jamf-Concepts/Setup-Manager#18)
### Deprecations
These features are marked for removal in a future release:
- localized labels and text by adding the two-letter language code to key. Switch to [localization with dictionaries](ConfigurationProfile.md#localization). The [plist and profile example files](Examples) have been updated
- `showBothButtons` key and functionality
## v1.1beta ## v1.1beta
(2024-09-09) (2024-09-09)

View File

@@ -1,6 +1,10 @@
# Configuration Profile format # Configuration Profile format
The project includes a [custom profile plist](sample-com.jamf.setupmanager.plist) for Jamf Pro and [an example configuration profile](sample-jamfschool.mobileconfig) for Jamf School. The project some sample files to get you started:
- [sample plist](Examples/sample-com.jamf.setupmanager.plist) for Jamf Pro
- [sample plist](Examples/sample-waitForUserEntry) for Jamf Pro with [two phase workflow](Docs/JamfPro-TwoPhase.md)
- [configuration profile](Example/sample-jamfschool.mobileconfig) for Jamf School
## Top-level keys ## Top-level keys
@@ -8,15 +12,15 @@ The project includes a [custom profile plist](sample-com.jamf.setupmanager.plist
(Boolean, default: `false`) (Boolean, default: `false`)
When this is set to `true` any steps that actually change software on the disk will not be performed. When this is set to `true` any steps that actually change software on the disk will not be performed. This will also allow you to launch Setup Manager by double-clicking as the user. This can be useful to test a profile, or to take screen shots for documentation.
These behaviors change in debug mode: These behaviors change in debug mode:
- checks for the existence of the Jamf binary and keychain are skipped - checks for the existence of the Jamf binary and keychain are skipped
- Jamf Setup manager will accept enrollmentActions from a non-managed preference file - Jamf Setup manager will accept enrollmentActions from a non-managed preference file
- `policy`, `recon`, and `shell` actions that require root are replaced with a 10 second delay (and will always complete successfully) - `policy`, `recon`, and `shell` actions that require root are replaced with a delay (and will always complete successfully)
- watchPath and wait actions timeout and fail after 10 seconds - `watchPath` and `wait` actions timeout and fail after 10 seconds
When in debug mode, you have to set the `simulateMDM` preference key to `Jamf Pro` or `Jamf School`. This allows you to do test runs on un-enrolled Macs. When in debug mode, you can also set the `simulateMDM` preference key to `Jamf Pro` or `Jamf School`. This allows you to do test runs on un-enrolled Macs.
#### `title` #### `title`
@@ -26,7 +30,7 @@ The main title over the window.
Example: Example:
``` ```xml
<key>title</key> <key>title</key>
<string>Welcome to your new Mac!</string> <string>Welcome to your new Mac!</string>
``` ```
@@ -45,16 +49,16 @@ The message shown below the title.
Example: Example:
``` ```xml
<key>message</key> <key>message</key>
<string>Please wait a few moments while we install essential software…</string> <string>Please wait a few moments while we install essential software…</string>
``` ```
The message can use [substitutions](#substitutions). The message can use [substitutions](#substitution):
Example: Example:
``` ```xml
<key>message</key> <key>message</key>
<string>Preparing your new %model%. Please be patient.</string> <string>Preparing your new %model%. Please be patient.</string>
``` ```
@@ -63,13 +67,26 @@ Example:
(String, optional, localized) (String, optional, localized)
When this key is set, Setup Manager treats it as an image/[icon source](#icon-source) and displays the image in a screen covering background. When this key is set, Setup Manager treats it as an image/[icon source](#icon-sources) and displays the image in a screen covering background.
#### `runAt` #### `runAt`
(String, optional, deafult; `enrollment`) (String, optional, default: `enrollment`)
This value determines when Setup Manager should launch. There are two values: `enrollment` (default) and `loginwindow`. When set to `enrollment` Setup Manager will launch immediately when the pkg is installed. This is the setting to use for automated device enrollment (without AutoAdvance) and user-initiated enrollment. When the `runAt` value is set to `loginwindow` Setup Manager will launch when the login window is shown. This is useful for fully automated enrollments with AutoAdvance. A setting of `loginwindow` will only with enrollment setups that eventually end on the login window (i.e. a user has to be created automatically or the device is bound to a directory). **Beta:** We believe the run at login window feature may require more testing, especially in some edge cases. When, after thorough testing, you believe this works in your workflow, feel free to deploy it, and please let us know about success or any issues you might encounter.
This value determines when Setup Manager should launch. There are two values: `enrollment` (default) and `loginwindow`. When set to `enrollment` Setup Manager will launch immediately when the pkg is installed. This is the setting to use for automated device enrollment (without AutoAdvance) and user-initiated enrollment.
When the `runAt` value is set to `loginwindow` Setup Manager will launch only when the login window is shown. This is useful for fully automated enrollments using AutoAdvance.
A setting of `loginwindow` will only work with enrollment setups that eventually end on the login window (i.e. a user has to be created automatically, the device is bound to a directory, etc).
Example:
```xml
<key>runAt</key>
<string>loginwindow</string>
```
#### `enrollmentActions` #### `enrollmentActions`
@@ -87,28 +104,37 @@ When this key exists, Setup Manager will prompt for user data while the enrollme
(Dict of Strings, optional) (Dict of Strings, optional)
When this key exists, Setup Manager will show a "Help" button (a circled question mark) in the lower right corner while it is running. You can add subkeys with content for the help, which are described in [Help](#help). When Setup Manager has completed, the "Help" button will be replaced with the "Continue" and/or "Shutdown" button. When this key exists, Setup Manager will show a "Help" button (a circled question mark) in the lower right corner while it is running. You can add sub-keys with content for the help, which are described in [Help](#help). When Setup Manager has completed, the "Help" button will be replaced with the "Continue" and/or "Shutdown" button.
#### `accentColor` #### `accentColor`
(String, optional, default: system blue) (String, optional, default: system blue)
When present sets the accent color for buttons, progress bar and other UI elements. You can use this to match branding. Color is encoded as a six digit hex code, i.e. `#FF0088`. Sets the accent color for buttons, progress bar, SF Symbol icons, and other UI elements. You can use this to match branding. Color is encoded as a six digit hex code, e.g. `#FF0088`.
Example:
```xml
<key>accentColor</key>
<string>#FF0088</string>
```
#### `finalCountdown` #### `finalCountdown`
(Number/integer, optional, default: `60`) (Number/integer, optional, default: `60`)
This key changes the duration (in seconds) of the "final countdown" before the app automatically quits. Set to `-1` (or any negative number) to disable automated continue. This key changes the duration (in seconds) of the "final countdown" before the app automatically performs the `finalAction` (continue or shut down). Set to `-1` (or any negative number) to disable automated execution.
Examples: Examples:
``` ```xml
<key>finalCountdown</key> <key>finalCountdown</key>
<integer>30</integer> <integer>30</integer>
``` ```
``` Disable the
```xml
<key>finalCountdown</key> <key>finalCountdown</key>
<integer>-1</integer> <integer>-1</integer>
``` ```
@@ -117,11 +143,13 @@ Examples:
(String, optional, default: `continue`) (String, optional, default: `continue`)
This key sets the action and label for the button shown when Setup Manger has completed. When this key is set to `shutdown` (no space!) it will shutdown the computer, other wise it will just quit Setup Manager ("continue"). This is also the action that is performed when the `finalCountdown` timer runs out. This key sets the action and label for the button shown when Setup Manger has completed. When this key is set to `shutdown` (no space!) it will shut down the computer, other wise it will just quit Setup Manager ("continue"). This is also the action that is performed when the `finalCountdown` timer runs out.
When the `DEBUG` preference is set, shutdown will merely quit/continue.
Example: Example:
``` ```xml
<key>finalAction</key> <key>finalAction</key>
<string>shutdown</string> <string>shutdown</string>
``` ```
@@ -132,11 +160,11 @@ Example:
This key determines whether both the 'Shutdown' and 'Continue' are shown or just the button set in the `finalAction` key. This key determines whether both the 'Shutdown' and 'Continue' are shown or just the button set in the `finalAction` key.
**Warning:** this key will be removed in a future version of Setup Manager **Warning:** this key is deprecated and will be removed in a future version of Setup Manager
Example: Example:
``` ```xml
<key>showBothButtons</key> <key>showBothButtons</key>
<true/> <true/>
``` ```
@@ -149,7 +177,7 @@ Use this value to provide an estimate for the total size of all items that will
Example: Example:
``` ```xml
<key>totalDownloadBytes</key> <key>totalDownloadBytes</key>
<integer>4500000000</integer> <integer>4500000000</integer>
``` ```
@@ -158,11 +186,11 @@ Example:
(String, Jamf Pro only) (String, Jamf Pro only)
Set this to `$JSSID` in the configuration profile and Setup Manager will be aware of its computer's id in Jamf Pro. It will be display in the 'About this Mac…' popup. Set this to `$JSSID` in the configuration profile and Setup Manager will be aware of its computer's id in Jamf Pro. It will be displayed in the 'About this Mac…' popup.
Example: Example:
``` ```xml
<key>jssID</key> <key>jssID</key>
<string>$JSSID</string> <string>$JSSID</string>
``` ```
@@ -175,7 +203,7 @@ Set this to `$EMAIL` in the configuration profile. This communicates the user wh
Example: Example:
``` ```xml
<key>userID</key> <key>userID</key>
<string>$EMAIL</string> <string>$EMAIL</string>
``` ```
@@ -184,13 +212,13 @@ Example:
(String, Jamf Pro only, substitutions) (String, Jamf Pro only, substitutions)
When this key is set, Setup Manager will generate the computer name from this template and set it. When this key is present, a `computerName` dict or string in `userEntry` will be ignored. When this key is set, Setup Manager will generate the computer name from this template and set it automatically. When this key is present, a `computerName` dict or string in `userEntry` will be ignored.
The template uses substitution tokens, which begin and end with `%` character which will be substituted with data at run time. See [Substitutions](#substitutions) for details. The template uses substitution tokens, which begin and end with `%` character which will be substituted with data at run time. See [Substitutions](#substitution) for details.
Example: Example:
``` ```xml
<key>computerNameTemplate</key> <key>computerNameTemplate</key>
<string>Mac-%serial:=6%</string> <string>Mac-%serial:=6%</string>
``` ```
@@ -203,22 +231,31 @@ This will set the computer name to `Mac-DEF456` where `DEF456` are the center si
When set, the "About this Mac" info window will show this value instead of the real serial number. This is useful when making screen shots or recordings for documentation or presentations where you do not want to expose real serial numbers. When set, the "About this Mac" info window will show this value instead of the real serial number. This is useful when making screen shots or recordings for documentation or presentations where you do not want to expose real serial numbers.
Note: This is for display only. [Substitutions](#substitution) will still use the real serial number.
Example:
```xml
<key>overrideSerialNumber</key>
<string>ABC1DEFABC</string>
```
#### `hideActionLabels` #### `hideActionLabels`
(Bool, default: `false`) (Bool, optional, default: `false`)
Hides the individual labels under each action's icon. Hides the individual labels under each action's icon.
Example: Example:
``` ```xml
<key>hideActionLabels</key> <key>hideActionLabels</key>
<true/> <true/>
``` ```
#### `hideDebugLabel` #### `hideDebugLabel`
(Bool, default: `false`) (Bool, optional, default: `false`)
When set, suppresses display of the red 'DEBUG' label in debug mode. Useful for screenshots and recordings. When set, suppresses display of the red 'DEBUG' label in debug mode. Useful for screenshots and recordings.
@@ -229,6 +266,11 @@ Example:
<true/> <true/>
``` ```
#### `simulateMDM`
(String, optional)
When debug mode is enabled, you can set the `simulateMDM` preference key to `Jamf Pro` or `Jamf School`. This allows you to do test runs on un-enrolled Macs.
## Actions ## Actions
@@ -270,7 +312,7 @@ When this key is set to `true` Setup Manager will only run this when itself is r
Example: Example:
``` ```xml
<dict> <dict>
<key>label</key> <key>label</key>
<string>Set Time Zone</string> <string>Set Time Zone</string>
@@ -292,15 +334,13 @@ Example:
#### `policy` #### `policy`
(String) (String, Jamf Pro only)
(Jamf Pro only)
This will run the jamf policy or polices with the given trigger name. This is the equivalent of running `jamf policy -event <triggername>` This will run the jamf policy or polices with the given trigger name. This is the equivalent of running `jamf policy -event <triggername>`
Example: Example:
``` ```xml
<dict> <dict>
<key>label</key> <key>label</key>
<string>BBEdit</string> <string>BBEdit</string>
@@ -333,7 +373,7 @@ The action will fail after this timeout.
Example: Example:
``` ```xml
<dict> <dict>
<key>label</key> <key>label</key>
<string>Jamf Protect</string> <string>Jamf Protect</string>
@@ -341,12 +381,12 @@ Example:
<string>symbol:app.badge</string> <string>symbol:app.badge</string>
<key>watchPath</key> <key>watchPath</key>
<string>/Applications/JamfProtect.app</string> <string>/Applications/JamfProtect.app</string>
<key>wait</key> <key>timeout</key>
<integer>300</integer> <integer>300</integer>
</dict> </dict>
``` ```
Note: This is intended to check if app are installed from the Mac App Store or Jamf App Installers. In my experience, these methods are very unreliable, hence the timeout. Since you cannot anticipate the order in which these apps may be installed, it is best to put the `watchPath` actions at the end. For large installations (Xcode) you want to have a large timeout. Note: This is intended to check if app are installed from the Mac App Store or Jamf App Installers. In my experience, these installation methods are quite unreliable, hence the timeout. Since you cannot anticipate the order in which these apps may be installed, it is best to put the `watchPath` actions at the end. For large installations (Xcode) you want to set a large timeout.
### Wait ### Wait
@@ -358,7 +398,7 @@ Wait for a given time. Use this to let the system catch up with previous install
Example: Example:
``` ```xml
<dict> <dict>
<key>label</key> <key>label</key>
<string>Waiting…</string> <string>Waiting…</string>
@@ -371,11 +411,11 @@ Example:
#### `waitForUserEntry` #### `waitForUserEntry`
(String, value is ignored) (String, value is ignored, Jamf Pro only)
When Setup Manager reaches this action before the user entry has been completed, it will wait until the user entry is completed and the user has clicked 'Save.' If Setup Manager reaches this action before the user entry has been completed, it will wait until the user entry is completed and the user has clicked 'Save.'
When the user entry is saved, this action will set the computer name, according to the `computerNameTemplate` or what was entered by the user and run a recon/Update Inventory which submits the user data. When the user entry is saved and this action is reached, it will set the computer name, according to the `computerNameTemplate` or what was entered by the user and run a recon/Update Inventory which submits the user data. It will also save the data from the user entry to the [user data file](Docs/Extras.md#user-data-file)
This action allows for "two phase" installation workflows where the policies in the second phase are scoped to data from the user entry. After this action, smart groups in Jamf Pro should reflect the data entered and you can use scoping in subsequent policies to choose which policies should or should not run on this device. This action allows for "two phase" installation workflows where the policies in the second phase are scoped to data from the user entry. After this action, smart groups in Jamf Pro should reflect the data entered and you can use scoping in subsequent policies to choose which policies should or should not run on this device.
@@ -384,7 +424,7 @@ Regardless of whether there is a `waitForUserEntry` action or not, Setup Manager
```xml ```xml
<dict> <dict>
<key>label</key> <key>label</key>
<string>Wait for User Entry</string> <string>Submit User Entry</string>
<key>waitForUserEntry</key> <key>waitForUserEntry</key>
<string/> <string/>
</dict> </dict>
@@ -402,7 +442,7 @@ You should usually not need to add a recon step. By default Setup Manager will a
Example: Example:
``` ```xml
<dict> <dict>
<key>recon</key> <key>recon</key>
<string/> <string/>
@@ -429,7 +469,7 @@ List of additional arguments passed into Installomator.
Example: Example:
``` ```xml
<dict> <dict>
<key>label</key> <key>label</key>
<string>Google Chrome</string> <string>Google Chrome</string>
@@ -443,13 +483,13 @@ Example:
## Icon Sources ## Icon Sources
Icons can be defined in several ways in Setup Manager. These different approaches for the top-level `icon` and `background` key, as well as the `icon` key in an action. Icons (which include the top-level `icon`, the `background` and the `icon`s in individual actions) can be defined in several ways in Setup Manager.
### From the web ### From the web
When the icon source string starts with `http` or `https`, Setup Manager will attempt to download a file from that URL and interpret it as an image file. It will show a spinning progress view while downloading. When the icon source string starts with `http` or `https`, Setup Manager will attempt to download a file from that URL and interpret it as an image file. It will show a spinning progress view while downloading.
``` ```xml
<key>icon</key> <key>icon</key>
<string>https://example.com/path/to/icon.png</string> <string>https://example.com/path/to/icon.png</string>
``` ```
@@ -458,16 +498,20 @@ When the icon source string starts with `http` or `https`, Setup Manager will at
When the icon source is an absolute file path, Setup Manager will attempt to read that file as an image file and display it. When the icon source is an absolute file path, Setup Manager will attempt to read that file as an image file and display it.
``` ```xml
<key>icon</key> <key>icon</key>
<string>/Library/Organization/image.png</string> <string>/Library/Organization/image.png</string>
``` ```
You will need to install custom local image files _before_ Setup Manager runs.
With Jamf Pro, you can achieve that by adding another pkg to the Prestage. Since the Prestage installs pkgs in alphabetical order, this branding pkg should be named to be alphabetically _before_ "Setup Manager."
### Application: ### Application:
When the icon source is an absolute file path that ends in `.app`, Setup Manager will get the icon from that app. When the icon source is an absolute file path that ends in `.app`, Setup Manager will get the icon from that app.
``` ```xml
<key>icon</key> <key>icon</key>
<string>/System/Applications/App Store.app</string> <string>/System/Applications/App Store.app</string>
``` ```
@@ -476,7 +520,7 @@ When the icon source is an absolute file path that ends in `.app`, Setup Manager
When the icon source starts with `name:`, Setup Manager will get the icon with that name. Two names are useful: `AppIcon` gets Setup Manager's app icon and `NSComputer` will get an icon representing the current hardware. When the icon source starts with `name:`, Setup Manager will get the icon with that name. Two names are useful: `AppIcon` gets Setup Manager's app icon and `NSComputer` will get an icon representing the current hardware.
``` ```xml
<key>icon</key> <key>icon</key>
<string>name:AppIcon</string> <string>name:AppIcon</string>
``` ```
@@ -485,9 +529,9 @@ When the icon source starts with `name:`, Setup Manager will get the icon with t
When the icon source starts with `symbol:`, Setup Manager will create the icon using that symbols name. You can look up symbol names using the [SF Symbols](https://developer.apple.com/sf-symbols/) app. When the icon source starts with `symbol:`, Setup Manager will create the icon using that symbols name. You can look up symbol names using the [SF Symbols](https://developer.apple.com/sf-symbols/) app.
Note that the availability of SF Symbols will vary with the OS version and that some SF Symbols may look different in different localizations. Note that the availability and appearance of SF Symbols may vary with the OS version and language/region.
``` ```xml
<key>icon</key> <key>icon</key>
<string>symbol:clock</string> <string>symbol:clock</string>
``` ```
@@ -507,17 +551,17 @@ Any of the fields will only be shown when its key exists. If you were to create
### User Data file ### User Data file
Data from user entry is written, together with some other data to a file when Setup Manager reaches a `waitForUserEntry` action and again when it finishes. The file is stored at `/private/var/db/SetupManagerUserData.txt`. [More details.](Extras.md#user-data-file) Data from user entry is written, together with some other data to a file when Setup Manager reaches a `waitForUserEntry` action and again when it finishes. The file is stored at `/private/var/db/SetupManagerUserData.txt`. [More details.](Docs/Extras.md#user-data-file)
#### `default` #### `default`
(String, localized) (String, localized)
You provide a default value in two ways: Provide a default value in two ways:
Example: Example:
``` ```xml
<key>computerName</key> <key>computerName</key>
<string>Mac-12345</string> <string>Mac-12345</string>
``` ```
@@ -528,7 +572,7 @@ When you want to configure other options of the field, you need to use the `dict
Example: Example:
``` ```xml
<key>computerName</key> <key>computerName</key>
<dict> <dict>
<key>default</key> <key>default</key>
@@ -545,7 +589,7 @@ Example:
This will show the string value given as a greyed out placeholder in the empty text field. This will show the string value given as a greyed out placeholder in the empty text field.
``` ```xml
<key>assetTag</key> <key>assetTag</key>
<dict> <dict>
<key>placeholder</key> <key>placeholder</key>
@@ -561,7 +605,7 @@ Note: a `default` value will prevent the placeholder from appearing, unless the
This will show a popup list of preset options: This will show a popup list of preset options:
``` ```xml
<key>department</key> <key>department</key>
<dict> <dict>
<key>options</key> <key>options</key>
@@ -594,7 +638,7 @@ Detailed description of the regular expression syntax: [NSRegularExpression](htt
Example: Example:
``` ```xml
<key>userID</key> <key>userID</key>
<dict> <dict>
<key>placeholder</key> <key>placeholder</key>
@@ -608,9 +652,9 @@ Example:
(String, optional, localized) (String, optional, localized)
The default validation message will show the regular expression the value is not matching. This is suitable for debugging but not at all user friendly. You really should provide a localized message explaining how the value can conform. The default validation message will show the regular expression the value is not matching. This is suitable for debugging but not at all user friendly. You really should provide a localized message explaining how the entry should conform.
``` ```xml
<key>assetTag</key> <key>assetTag</key>
<dict> <dict>
<key>placeholder</key> <key>placeholder</key>
@@ -643,7 +687,7 @@ For this, you need to setup the top-level `userID` to receive the `$EMAIL` varia
Example: Example:
``` ```xml
<key>userEntry</key> <key>userEntry</key>
<dict> <dict>
<key>showForUserIDs</key> <key>showForUserIDs</key>
@@ -666,7 +710,7 @@ Example:
## Help ## Help
When you provide a top-level `help` key with a dictionary a help button (with a circled question mark) will be shown in the lower right corner. When you click on the help button a window with information will be shown. You can set the information with the following keys in the `help` dictionary. When you provide a top-level `help` key with a dictionary a help button (with a circled question mark) will be shown in the lower right corner (for left-to-right localizations). When you click on the help button a window with information will be shown. You can set the information with the following keys in the `help` dictionary.
#### `title` #### `title`
@@ -680,11 +724,11 @@ When you provide a top-level `help` key with a dictionary a help button (with a
(String, optional, localized) (String, optional, localized)
The contents of the `url` key will be translated into a QR code and displayed next to the help message. This allows for end users to follow a link to more information on their devices while the Mac is performing installations. The contents of the `url` key will be translated into a QR code and displayed next to the help message. This allows for end users to follow a link to more information on another device while the Mac is performing installations.
Example: Example:
``` ```xml
<key>help</key> <key>help</key>
<dict> <dict>
<key>message</key> <key>message</key>
@@ -698,24 +742,24 @@ Example:
## Localization ## Localization
The app will pick up the user choice of the UI language for the interface elements. Right now it supports English, French, German, Italian, Spanish, and Dutch. The app will fall back to English for other language choices. The app will pick up the user choice of the UI language for the interface elements. (Table of currently available languages below) The app will fall back to English for other language choices.
You can provide localizations for the texts given in the configuration profile. You can provide localizations for the custom texts given in the configuration profile.
**Note:** the method for providing localized texts in the configuration profile changed in version 1.1. The previous method will continue to work for the time being. Going forward, it is _strongly_ recommended to change to the new dictionary-based solution. **Deprecation notice:** the method for providing localized texts in the configuration profile changed in version 1.1. The previous method (by appending the two letter language code to the key) is considered deprecated. It will continue to work for the time being but will be removed in a future release. It is _strongly_ recommended to change to the new dictionary-based solution.
To provide a set of localizations for a value in the profile, change its type from `string` to `dict`. Inside the `dict`, provide a value for each localization for each localization with the language code as key. To provide a set of localizations for a value in the profile, change its type from `string` to `dict`. Inside the `dict`, provide a value for each localization for each localization with the language code as key.
For example, this unlocalized key-value pair For example, this unlocalized key-value pair
``` ```xml
<key>title</key> <key>title</key>
<string>Welcome!</string> <string>Welcome!</string>
``` ```
is localized like this: can be localized like this:
``` ```xml
<key>title</key> <key>title</key>
<dict> <dict>
<key>en</key> <key>en</key>
@@ -766,21 +810,28 @@ Use these two-letter codes for these languages:
| French | fr | | French | fr |
| German | de | | German | de |
| Italian | it | | Italian | it |
| Hebrew | he |
| Norwegian | nb | | Norwegian | nb |
| Spanish | es | | Spanish | es |
| Swedish | sv | | Swedish | sv |
The [plist and profile example files](Examples) contain localizations for many of the custom text elements.
## Substitution ## Substitution
Certain keys, such as `computerNameTemplate` can use tokens, which begin and end with `%` character. The tokens will be substituted with data from the device or from user entry. For example, in the template `Mac-%serial%` the `%serial%` token will be replaced with the computer's serial number. (A double `%%` will be substituted with a single `%`, in case you need to represent this symbol in the computer name.) Certain keys, such as `computerNameTemplate` can use tokens, which begin and end with `%` character. The tokens will be substituted with data from the device or user entry.
For example, in the template `Mac-%serial%` the `%serial%` token will be replaced with the computer's serial number.
A double `%%` will be substituted with a single `%`, in case you need to represent this symbol.
The following tokens are available: The following tokens are available:
- `serial`: the computer's serial number - `serial`: the computer's serial number
- `udid`: the computer's provisioning udid - `udid`: the computer's provisioning universal device identifier
- `model`: the computer's model name, e.g. `MacBook Air` or `Mac mini` - `model`: the computer's model name, e.g. `MacBook Air` or `Mac mini`
- `model-short`: the first word of `model` (no spaces), i.e. `MacBook`, `Mac` or `iMac` - `model-short`: the first word of `model` (no spaces), i.e. `MacBook`, `Mac` or `iMac`
- these values from user entry, _after_ user entry has completed - these values from user entry, _after_ user entry has completed (see [`waitForUserEntry`](#waitForUserEntry))
- `email` - `email`
- `assetTag` - `assetTag`
- `building` - `building`
@@ -797,4 +848,3 @@ These keys can use substitutions:
- `message` - `message`
- `computerNameTemplate` - `computerNameTemplate`
- actions: `label` - actions: `label`

View File

@@ -11,11 +11,15 @@
- for the Variant, select Setup Manager.json - for the Variant, select Setup Manager.json
- fill in your fields! - fill in your fields!
The custom schema does not contain all keys and options available in the [configuration profile](../ConfigurationProfile.md). Specifically, the `wait` action and the option to [localize values](../ConfigurationProfile.md#localization) are not available.
When you reach the limits of the custom schema, use the XML it generates as a starting to building a custom XML.
Note that the custom schema can become confused when you switch between enrollment action types and you will need to clean up extra empty fields. Note that the custom schema can become confused when you switch between enrollment action types and you will need to clean up extra empty fields.
## Quit ## Quit
The command-Q keyboard short cut to quit the app is disabled. You can use shift-control-command-E instead. This should only be used when debugging as it may leave the client in an undetermined state when installations are aborted. The command-Q keyboard short cut to quit the app is disabled. Use `shift-control-command-E` instead. This should only be used when debugging and trouble-shooting, as it will leave the client in an undetermined state when installations are aborted.
## Logging ## Logging
@@ -23,13 +27,19 @@ Setup Manager logs to `/Library/Logs/Setup Manager.log`. While Setup Manager is
## Debug mode ## Debug mode
When you set the `DEBUG` key to `true` in the profile or locally with the `defaults` command Setup Manager will not perform any tasks that actually perform installations or otherwise change the system. When you set the `DEBUG` key to `true` in the profile or locally with the `defaults` command Setup Manager will not perform any tasks that actually perform installations or otherwise change the system. When in DEBUG mode, Setup Manager will also read settings from the local settings (i.e. `~/Library/Preferences/com.jamf.setupmanager.plist`) which simplifies iterating through different settings. If you want to run Setup Manager on an unmanaged Mac, you may need to provide a `simulateMDM` key with a value of either `Jamf Pro` or `Jamf School`.
You may also need to remember to remove the [flag file](#flag-file) before launching Setup Manager.
You will also be able launch the app as the user, by double-clicking the app in `/Applications/Utilities`. This is useful to test the look and feel of your custom icons, text and localization. When you use this to create screen shots for documentation, also note the `overrideSerialNumber` and `hideDebugLabel` keys. You will also be able launch the app as the user, by double-clicking the app in `/Applications/Utilities`. This is useful to test the look and feel of your custom icons, text and localization. When you use this to create screen shots for documentation, also note the `overrideSerialNumber` and `hideDebugLabel` keys.
For testing, you can also re-launch Setup Manager from the command line as root with `sudo "/Applications/Utilities/Setup Manager/Contents/Resources/Setup Manager"`
## Flag file ## Flag file
Setup Manager creates a flag file at `/private/var/db/.JamfSetupEnrollmentDone` when it finishes. If this file exists when Setup Manager launches, the app will terminate immediately and without taking any action. You can use this flag file in an extension attribute in Jamf to determine whether the enrollment steps were performed. (Setup Manager does not care if the actions were performed successfully.) Setup Manager creates a flag file at `/private/var/db/.JamfSetupEnrollmentDone` when it finishes.
If this file exists when Setup Manager launches, the app will terminate immediately without taking any action. You can use this flag file in an extension attribute in Jamf to determine whether the enrollment steps were performed. (Setup Manager does not care if the actions were performed successfully.)
When `DEBUG` is set to `true` in the defaults/configuration profile, the flag file is ignored at launch, but may still be created when done. When `DEBUG` is set to `true` in the defaults/configuration profile, the flag file is ignored at launch, but may still be created when done.
@@ -63,18 +73,21 @@ submit: 2024-08-14T13:54:37Z
duration: 101 duration: 101
``` ```
Start time (`start`) and finish/submission time (`submit`) are given in ISO8601 format, universal time (UTC). Start time (`start`) and finish/submission time (`submit`) are given in ISO8601 format, universal time (UTC). Duration is given in seconds.
Fields that were not set in user entry will not be shown at all. You can use this file in scripts or extension attributes. The easiest way would be to parse it with `awk`, e.g. Fields that were not set in user entry will not be shown at all. You can use this file in scripts or extension attributes. One possible way is to parse it with `awk`, e.g.
``` ```xml
duration=$(awk -F ': ' '/duration: / {print $2}' /private/var/db/SetupManagerUserData.txt) duration=$(awk -F ': ' '/duration: / {print $2}' /private/var/db/SetupManagerUserData.txt)
``` ```
## Final action and shutdown
When the app is not running as root (for testing or from Xcode) or when the `DEBUG` preference is set, shutdown will merely quit.
## "About This Mac…" window ## "About This Mac…" window
When you hold the option key when clicking on "About This Mac…" you will see more information. When you hold the option key when clicking on "About This Mac…" you will see more information.
## Uninstall Setup Manager
Setup Manager will unload and remove its LaunchAgent and LauchDaemon files upon successful completion. That together with the [flag file](#flag-file) should prevent Setup Manager from launching on future reboots.
If you still want to remove Setup Manager after successful enrollment, there is [a sample uninstaller script in the Examples folder](../Examples/uninstall.sh).

View File

@@ -20,7 +20,7 @@ There can be many causes for this. A few common causes are:
No. No.
Setup Manager will run fine without Jamf Connect. You can even build 'single-touch' style workflows with Setup Manager withough Jamf Connect. Some features, such as pre-assigning a device to a specific user require Jamf Connect, though. Setup Manager will run fine without Jamf Connect. You can even build 'single-touch' style workflows with Setup Manager without Jamf Connect. Some features, such as pre-assigning a device to a specific user require Jamf Connect, though.
## How can I use the icon for an app before the app is installed? ## How can I use the icon for an app before the app is installed?
@@ -30,6 +30,25 @@ Setup Manager will run fine without Jamf Connect. You can even build 'single-tou
- you can add the icon as an icon for a self service policy in Jamf and then copy the url to the icon once uploaded - you can add the icon as an icon for a self service policy in Jamf and then copy the url to the icon once uploaded
## What is happening during the "Getting Ready" steps? ## What is happening during "Getting Ready" and "Finishing"?
During the "Getting Ready" phase, Setup Manager is waiting for the enrollment configuration to be complete. The steps taken during these phases depend on the version of Setup Manager and the management system.
When enrolled into Jamf Pro, Setup Manager runs (among other things) a recon/Update Inventory during "Getting Ready" and "Finshing." This will make up most of the time in these phases.
You can open the log window (command-L) or review the [log file](Extras.md#logging) for detail for each step. Should Setup Manager stall during one of these steps, you can [quit](#quit) out of Setup Manager and review the [log file](Extras.md#logging) after completing the setup.
## Can I set the wallpaper/desktop picture or dock with Setup Manager?
The settings for the dock and wallpaper/desktop picture are _user_ settings. Since the user account usually does not yet exist when Setup Manager runs, you cannot affect those settings.
What you can do is run a script at login which sets the desktop (using [desktoppr](https://github.com/scriptingosx/desktoppr) ) or the dock (using [dockutil](https://github.com/kcrawford/dockutil) or a similar tool). You can use the Jamf Pro login trigger for this, or create a custom LaunchAgent or use [outset](https://github.com/macadmins/outset/)
## Can Setup Manager run at first login, rather than right after enrollment?
Technically, yes.
With Jamf Pro, you can set the Setup Manager pkg to install at the `login` trigger or manually from Self Service. Then it will launch within the user session.
This is not, however, the primary workflow for Setup Manager and not something that we will test or verify. We believe running right after enrollment over Setup Assistant is the preferable deployment.
During the "Getting Ready" phase, Setup Manager is waiting for the Jamf Pro configuration to be complete, and runs a recon, so that policies during the enrollment phase can already be scoped. You cannot change the steps in this phase. You can see the details and possibly failures in the Setup Manager log.

View File

@@ -0,0 +1,35 @@
# Jamf Pro: Run Setup Manager at Login Window
**Beta** _We believe the run at login window feature may require more testing, especially in some edge cases. When, after thorough testing, you believe this works in your workflow, feel free to deploy it, and please let us know about success or any issues you might encounter._
By default, Setup Manager launches as soon as the installation completes. You can defer launching Setup Manager to launch when the macOS Login Window appears, instead.
When the `runAt` key in the profile is set to `loginwindow`, Setup Manager will not launch immediately after installation but when Login Window appears. In combination with the 'AutoAdvance' feature for automated device enrollment, this allows for completely 'hands-off' enrollment and configuration workflows.
However, this requires the enrollment workflow to be configured so that it will eventually end at Login Window, usually by connecting the Mac to a directory service.
## Prestage configuration
- Create or clone a new prestage to run Setup Manager at Login Window.
- Under 'General', under 'Setup Assistant', enable 'Automatically advance through Setup Assistant'. Select the language and region you want to assign to the Macs.
- Select all options to be skipped.
- Under 'Account Settings' choose to create a managed local administrator, configure the user name, password and other options.
- In 'Local User Account Type', select 'Skip Account Creation'
- Under 'Configuration Profiles', select the Setup Manager configuration profile. In that profile, set the [`runAt` key](../ConfigurationProfile.md#runAt) to `loginwindow`.
- Upload the Setup Manager installation pkg from the [Releases](https://github.com/jamf-concepts/setup-manager/releases) section to Jamf Pro and add it to the 'Enrollment Packages' section. Ensure you have selected 'Cloud Distribution Point' as the distribution point or setup the manifest for an on-premise deployment.
## Bind to directory
You will likely need to bind the Mac to a directory service to allow for user login after successful deployment. This can be triggered by a policy as an Setup Manager action.
## Auto Advance
The Apple feature to automatically advance through the Setup Assistant screens has a few requirements. The Mac has to be registered in Apple Business Manager or Apple School Manager and assigned to the MDM servier. It also has to be connected with ethernet to a network that can reach the MDM server, all Apple services and other internal services you might configure during enrollment (e.g. directory or IdP server).
Auto Advance doesn't 'kick in' until after Voiceover has introduced itself and if you ever touch any of the controls, AutoAdvance will stop and you have to continue manually.

View File

@@ -52,7 +52,7 @@ You can add more actions here. There are more types of actions available, you ca
- Add the Setup Manager pkg and the configuration profile to the Prestage - Add the Setup Manager pkg and the configuration profile to the Prestage
- if you have JamfConnect.pkg in the Prestage, remove it. You can later add an action to install JamfConnect using Setup Manager. - if you have JamfConnect.pkg in the Prestage, remove it. You can later add an action to install JamfConnect using Setup Manager.
- ensure that 'Automatically advance through Setup Assitant' is _disabled_ - ensure that 'Automatically advance through Setup Assitant' is _disabled_
- Have at least one option _disabled_ (so that _is_ displayed) - Have at least one Setup Assistant option _disabled_ (so that _is_ displayed)
- ensure your test Mac(s) is (are) assigned to the Prestage - ensure your test Mac(s) is (are) assigned to the Prestage
## Wipe the Test Mac ## Wipe the Test Mac
@@ -64,8 +64,7 @@ You can add more actions here. There are more types of actions available, you ca
## Next Steps ## Next Steps
- add more actions to Setup Manager, you can use more Jamf Pro policies, Installomator labels, or shell actions - add more [actions](../ConfigurationProfile.md#actions) to Setup Manager, you can use more Jamf Pro policies, Installomator labels, or shell actions
- add a computer name template key to the profile to automate computer naming - automate computer naming with a [computer name template key](../ConfigurationProfile.md#computerNameTemplate)
- add a `help` section to let the user know what is going on - add [a `help` section](../ConfigurationProfile.md#help) to let the user know what is going on
- ideally automated deployments shouldn't require manual entry, but if necessary, you can configure a user entry section in the profile - ideally automated deployments shouldn't require manual entry, but if necessary, you can configure a [user entry](../ConfigurationProfile.md#user-entry) section in the profile

View File

@@ -64,8 +64,8 @@ To run Setup Manager at `Login Window` you will require
In order to configure the workflow in Jamf School you will need In order to configure the workflow in Jamf School you will need
- A Jamf Setup Manager Configuration Profile (customized for your deployment, example profile below) uploaded to Jamf School - A Jamf Setup Manager Configuration Profile (customized for your deployment, [example profile](../Examples/sample-jamfschool.mobileconfig)) uploaded to Jamf School
- Jamf Setup Manager package installer (available from Jamf Concepts) uploaded to Jamf School - Jamf Setup Manager package installer (available from [Releases](https://github.com/jamf-concepts/setup-manager/releases)) uploaded to Jamf School
- An Automated Device Enrollment Profile with the correct settings for your chosen deployment method (`default` or `LoginWindow`) - An Automated Device Enrollment Profile with the correct settings for your chosen deployment method (`default` or `LoginWindow`)
@@ -118,13 +118,13 @@ In members select `Managed Profile (Installed)` `equals` and then select *"Jamf
> If you named your profile in step 1 something different, be sure to select that profile in this step > If you named your profile in step 1 something different, be sure to select that profile in this step
- Next in the `Apps` tab add any apps or packages that will not be installed via Installomator as part of the Jamf Setup Workflow and in the `Profiles` tab any any and all config needed to manage your Macs - Next in the `Apps` tab add any apps or packages that will not be installed via Installomator as part of the Jamf Setup Workflow and in the `Profiles` tab any any and all config needed to manage your Macs
- If you install packages or App Store apps through Jamf School, and you want to report on them as part of the Jamf Setup Manager workflow be sure to add `Watchpaths` for the apps / content into the Jamf `Setup Manager Configuration Profile` before uploading to Jamf School - If you install packages or App Store apps through Jamf School, and you want to report on them as part of the Jamf Setup Manager workflow be sure to add `watchpath`s for the apps / content into the Jamf `Setup Manager Configuration Profile` before uploading to Jamf School
--- ---
### Workflow ### Workflow
These chained amart group actions then perform the following flow These chained smart group actions then perform the following flow
- Scope the Jamf Setup Manager Config profiles to all macOS devices enrolled with a given ADE profile - Scope the Jamf Setup Manager Config profiles to all macOS devices enrolled with a given ADE profile
- Once the Profile is reported as installed by Jamf School, it will then install the Jamf Setup Manager pkg (since we 100% know the config profile is on the device before the pkg, we know itll be configured in the correct manner) and the *“Jamf Setup Manager Installed”* profile - Once the Profile is reported as installed by Jamf School, it will then install the Jamf Setup Manager pkg (since we 100% know the config profile is on the device before the pkg, we know itll be configured in the correct manner) and the *“Jamf Setup Manager Installed”* profile

View File

@@ -22,6 +22,8 @@
<string>Establecer zona horaria</string> <string>Establecer zona horaria</string>
<key>fr</key> <key>fr</key>
<string>Définir le fuseau horaire</string> <string>Définir le fuseau horaire</string>
<key>he</key>
<string>הגדרות אזור זמן</string>
<key>it</key> <key>it</key>
<string>Imposta il fuso orario</string> <string>Imposta il fuso orario</string>
<key>nl</key> <key>nl</key>
@@ -83,6 +85,8 @@
<string>Por favor espere mientras Setup Manager configura tu nuevo Mac.</string> <string>Por favor espere mientras Setup Manager configura tu nuevo Mac.</string>
<key>fr</key> <key>fr</key>
<string>Veuillez être patient pendant que Setup Manager configure votre nouveau Mac.</string> <string>Veuillez être patient pendant que Setup Manager configure votre nouveau Mac.</string>
<key>he</key>
<string>אנא התאזר בסבלנות בזמן ש-Setup Manager מגדיר את ה-Mac החדש שלך</string>
<key>it</key> <key>it</key>
<string>Sii paziente mentre Setup Manager configura il tuo nuovo Mac.</string> <string>Sii paziente mentre Setup Manager configura il tuo nuovo Mac.</string>
<key>nl</key> <key>nl</key>
@@ -98,6 +102,8 @@
<string>¡Bienvenido!</string> <string>¡Bienvenido!</string>
<key>fr</key> <key>fr</key>
<string>Bienvenu!</string> <string>Bienvenu!</string>
<key>he</key>
<string>ברוכים הבאים!</string>
<key>it</key> <key>it</key>
<string>Benvenuto!</string> <string>Benvenuto!</string>
<key>nl</key> <key>nl</key>

View File

@@ -115,6 +115,8 @@
<string>Por favor espere mientras Setup Manager configura tu nuevo Mac.</string> <string>Por favor espere mientras Setup Manager configura tu nuevo Mac.</string>
<key>fr</key> <key>fr</key>
<string>Veuillez être patient pendant que Setup Manager configure votre nouveau Mac.</string> <string>Veuillez être patient pendant que Setup Manager configure votre nouveau Mac.</string>
<key>he</key>
<string>אנא התאזר בסבלנות בזמן ש-Setup Manager מגדיר את ה-Mac החדש שלך</string>
<key>it</key> <key>it</key>
<string>Sii paziente mentre Setup Manager configura il tuo nuovo Mac.</string> <string>Sii paziente mentre Setup Manager configura il tuo nuovo Mac.</string>
<key>nl</key> <key>nl</key>
@@ -130,6 +132,8 @@
<string>¡Bienvenido!</string> <string>¡Bienvenido!</string>
<key>fr</key> <key>fr</key>
<string>Bienvenu!</string> <string>Bienvenu!</string>
<key>he</key>
<string>ברוכים הבאים!</string>
<key>it</key> <key>it</key>
<string>Benvenuto!</string> <string>Benvenuto!</string>
<key>nl</key> <key>nl</key>

View File

@@ -37,7 +37,9 @@ fi
echo "removing files" echo "removing files"
rm -rfv "$appPath" rm -rfv "$appPath"
rm -v /Library/LaunchDaemons/"$bundleID".plist rm -v /Library/LaunchDaemons/"$bundleID".plist
rm -v /Library/LaunchAgents/"$bundleID".loginwindow.plist
echo "forgetting $bundleID pkg receipt"
pkgutil --forget "$bundleID" pkgutil --forget "$bundleID"
# rm -v /private/var/db/.JamfSetupEnrollmentDone # rm -v /private/var/db/.JamfSetupEnrollmentDone

View File

@@ -6,12 +6,12 @@ _"Every Assistant has a Manager"_
![Setup Manager Logo](https://img.shields.io/badge/macOS-12%2B-success) ![Setup Manager Logo](https://img.shields.io/badge/macOS-12%2B-success)
Updates are published in the '[Releases](https://github.com/jamf-concepts/setup-manager/releases)' section of the repo. There you can also [download the latest pkg installer](https://github.com/jamf-concepts/setup-manager/releases/latest). You can subscribe to notifications for the repo using the 'Watch' button above.
Please report issues, feature requests [as an issue.](https://github.com/jamf-concepts/setup-manager/issues) Please report issues, feature requests [as an issue.](https://github.com/jamf-concepts/setup-manager/issues)
We have opened the [discussions](https://github.com/jamf-concepts/setup-manager/discussions) area for questions and more generic feedback. We have opened the [discussions](https://github.com/jamf-concepts/setup-manager/discussions) area for questions and more generic feedback.
Updates will be published in the '[Releases](https://github.com/jamf-concepts/setup-manager/releases)' section of the repo. There you can also [download the latest pkg installer](https://github.com/jamf-concepts/setup-manager/releases/latest). You can subscribe to notifications for the repo using the 'Watch' button above.
There is also a [`#jamf-setup-manager`](https://macadmins.slack.com/archives/C078DDLKRDW) channel on the [MacAdmins Slack](https://macadmins.org). There is also a [`#jamf-setup-manager`](https://macadmins.slack.com/archives/C078DDLKRDW) channel on the [MacAdmins Slack](https://macadmins.org).
![setup manager progress dialog](Images/setup-manager-progress-screenshot.png) ![setup manager progress dialog](Images/setup-manager-progress-screenshot.png)
@@ -30,7 +30,7 @@ Setup Manager provides:
- zero-touch (user-driven) - zero-touch (user-driven)
- single-touch (tech-driven) - single-touch (tech-driven)
- user initiated enrollment - user initiated enrollment
- handsfree deployment with auto advance - handsfree deployment with auto advance (beta)
- customized branding - customized branding
- localized interface and custom text - localized interface and custom text
- support for Jamf Pro and Jamf School - support for Jamf Pro and Jamf School
@@ -42,15 +42,17 @@ Setup Manager provides:
- zero-touch and user-initiated deployments (forthcoming) - zero-touch and user-initiated deployments (forthcoming)
- [extra installations based on user data entry](Docs/JamfPro-TwoPhase.md) - [extra installations based on user data entry](Docs/JamfPro-TwoPhase.md)
- [Single-touch workflow with user re-assignment using Jamf Connect](Docs/JamfProConnect-SingleTouch.md) - [Single-touch workflow with user re-assignment using Jamf Connect](Docs/JamfProConnect-SingleTouch.md)
- handsfree deployment with auto advance and Setup Manager at login window (forthcoming) - [handsfree deployment with auto advance and Setup Manager at login window (beta)](Docs/JamfPro-LoginWindow.md)
- [Jamf School](Docs/JamfSchool-Setup.md) - [Jamf School](Docs/JamfSchool-Setup.md)
- [Extras and Notes](Extras.md) - [Extras and Notes](Docs/Extras.md)
- [Frequently Asked Questions](FAQ.md) - [Frequently Asked Questions](Docs/FAQ.md)
## Configuration Profile ## Configuration Profile
The structure of the configuration profile [is documented here](ConfigurationProfile.md). The structure of the configuration profile [is documented here](ConfigurationProfile.md).
There is also a [custom schema for Jamf Pro](Docs/Extras#custom-json-schema-for-jamf-pro).
## Requirements ## Requirements
Setup Manager requires macOS 12.0.0 or higher. It will work only with Jamf Pro or Jamf School. Setup Manager requires macOS 12.0.0 or higher. It will work only with Jamf Pro or Jamf School.
@@ -58,10 +60,10 @@ Setup Manager requires macOS 12.0.0 or higher. It will work only with Jamf Pro o
## Known Issues ## Known Issues
- Setup Manager will **_not_** launch at enrollment with Auto-Advance enabled, use the option to run at login window - Setup Manager will **_not_** launch at enrollment with Auto-Advance enabled, use the option to run at login window
- Setup Manager may **_not_** launch or launch and quit quickly when you disable _all_ Setup Assistant screens, leave at least one Setup Assistant option enabled - Setup Manager may **_not_** launch or launch and quit quickly when you disable _all_ Setup Assistant screens, leave at least one Setup Assistant option enabled, or use the option to run at login window
- When you install **_Jamf Connect_** during the Prestage together with Setup Manager, you may see Setup Assistant for some time before Setup Manager launches or Setup Manager may not launch at all. Remove Jamf Connect from the Prestage and install it with Setup Manager policy or installomator action. - When you install **_Jamf Connect_** during the Prestage together with Setup Manager, you may see Setup Assistant for some time before Setup Manager launches or Setup Manager may not launch at all. Remove Jamf Connect from the Prestage and install it with Setup Manager policy or installomator action.
- Policies that are triggered by `enrollmentComplete` may disrupt Setup Manager running from Prestage/Automated Device Enrollment. Disable or unscope policies triggered by `enrollmentComplete` on devices using Setup Manager. - Policies that are triggered by `enrollmentComplete` may disrupt Setup Manager running from Prestage/Automated Device Enrollment. Disable or unscope policies triggered by `enrollmentComplete` on devices using Setup Manager.
- In some deployments, Setup Manager attempts to start while Jamf Pro is still installing. Try adding a 30-60 second `wait` action as the first action. We are working on a solution. - In some deployments, Setup Manager attempts to start while Jamf Pro is still installing. Try adding a 30-60 second `wait` action as the first action.
- With Jamf School, there will a few seconds after the remote management dialog where Setup Assistant shows before Setup Manager launches. With the Jamf School enrollment architecture, this is unavoidable. - With Jamf School, there will a few seconds after the remote management dialog where Setup Assistant shows before Setup Manager launches. With the Jamf School enrollment architecture, this is unavoidable.
--- ---