Deploying shft with Jamf Pro
This guide covers deploying the shft app and configuration profile through Jamf Pro.
Prerequisites
- Jamf Pro 10.35 or later
- The shft
.pkginstaller - The shft configuration profile (see Configuration profile reference)
- Target Macs enrolled in Jamf Pro
Step 1: Upload the shft package
- In Jamf Pro, navigate to Settings → Computer Management → Packages
- Click New
- Upload the
shft-<version>.pkgfile - Fill in the package details:
| Field | Value |
|---|---|
| Display Name | shft |
| Category | Utilities or Migration Tools (create if needed) |
| Filename | shft-<version>.pkg |
| Priority | 10 (default) |
- Click Save
Step 2: Create a deployment policy
- Navigate to Computers → Policies
- Click New
- Configure the policy:
General
| Field | Value |
|---|---|
| Display Name | Deploy shft |
| Enabled | Yes |
| Trigger | Recurring Check-in |
| Execution Frequency | Once per computer |
Packages
- Click Packages → Configure
- Click Add and select the
shftpackage - Set Action to
Install
Scope
Scope the policy to the appropriate target. Options:
- All Managed Clients — for broad pre-deployment
- Smart Group — for targeted refresh cycles. Example smart group criteria:
Computer ModelcontainsMacBookANDLast Check-inless than30 days ago- Or a group based on department, building, or asset tag
- Click Save
Step 3: Create the configuration profile
- Navigate to Computers → Configuration Profiles
- Click New
- Set the profile details:
| Field | Value |
|---|---|
| Name | shft Configuration |
| Category | Utilities or Migration Tools |
| Level | User Level |
- In the left sidebar, click Application & Custom Settings
- Click External Applications → Add
- Set:
| Field | Value |
|---|---|
| Source | Custom Schema |
| Preference Domain | com.shft.config |
- Paste the following property list with your desired values:
<dict>
<key>shft.allowedDataCategories</key>
<array>
<string>userFiles</string>
<string>applicationData</string>
<string>browserData</string>
</array>
<key>shft.allowUserOverride</key>
<false/>
<key>shft.maxTransferSizeMB</key>
<integer>51200</integer>
<key>shft.allowedConnectionTypes</key>
<array>
<string>thunderbolt</string>
<string>ethernet</string>
<string>wifi</string>
</array>
<key>shft.logMigrationsToEndpoint</key>
<string>https://logs.example.com/api/shft/migrations</string>
<key>shft.brandingName</key>
<string>Your Organisation Name</string>
</dict>Or: use the JSON Schema for a form-driven UI
Jamf Pro can render a configuration form directly from a JSON Schema, so you don't have to hand-write the property list above.
- In the Application & Custom Settings → External Applications section, set Source to
Custom Schema - Preference Domain:
com.shft.config - Upload
com.shft.config.schema.jsonto the Schema field - Jamf renders a form with friendly field names, dropdowns for enum values (Wi-Fi / Ethernet / Thunderbolt, etc.), and the required types for each key
- Fill in your organization's values and save
The schema includes title, property_order, and options.enum_titles so the form fields appear in a sensible order with readable labels. Conditional requirements (e.g., "User principal is required when Deployment mode is Managed") are described in the field help text but are not enforced by Jamf's form generator — verify them yourself before saving.
Scope
Scope the profile to the same group as the deployment policy. The profile should be in place before the user opens shft.
- Click Save
Step 4: Verify deployment
- On a target Mac, run
sudo jamf policyto trigger the policy check-in - Verify shft is installed:
ls /Applications/shft.app - Verify the profile is applied:
defaults read com.shft.config - Open shft and confirm the branding name appears on the welcome screen
Jamf-specific notes
Prestage enrolment
If using Jamf's PreStage Enrolment for new Macs, add the shft deployment policy to the PreStage configuration. This ensures shft is installed during initial setup of the destination Mac, before the user needs it.
Self Service
You can make shft available in Jamf Self Service instead of (or in addition to) automatic deployment. Create a Self Service policy with the same package and make it available in the Self Service app. This is useful for on-demand migrations.
Extension attributes
To track which Macs have completed a shft migration, create an extension attribute that reads the local log directory:
#!/bin/bash
log_count=$(ls ~/Library/Application\ Support/shft/logs/migration_*.json 2>/dev/null | wc -l)
echo "<result>$log_count</result>"This lets you build smart groups based on migration completion.
Patch management
If using Jamf's built-in patch management or Patchable, add shft as a tracked title. This ensures the app stays current across your fleet when new versions are released.