Deploying shft with Jamf Pro

This guide covers deploying the shft app and configuration profile through Jamf Pro.

Prerequisites

Step 1: Upload the shft package

  1. In Jamf Pro, navigate to Settings → Computer Management → Packages
  2. Click New
  3. Upload the shft-<version>.pkg file
  4. Fill in the package details:
FieldValue
Display Nameshft
CategoryUtilities or Migration Tools (create if needed)
Filenameshft-<version>.pkg
Priority10 (default)
  1. Click Save

Step 2: Create a deployment policy

  1. Navigate to Computers → Policies
  2. Click New
  3. Configure the policy:

General

FieldValue
Display NameDeploy shft
EnabledYes
TriggerRecurring Check-in
Execution FrequencyOnce per computer

Packages

  1. Click Packages → Configure
  2. Click Add and select the shft package
  3. 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 Model contains MacBook AND Last Check-in less than 30 days ago
    • Or a group based on department, building, or asset tag
  1. Click Save

Step 3: Create the configuration profile

  1. Navigate to Computers → Configuration Profiles
  2. Click New
  3. Set the profile details:
FieldValue
Nameshft Configuration
CategoryUtilities or Migration Tools
LevelUser Level
  1. In the left sidebar, click Application & Custom Settings
  2. Click External Applications → Add
  3. Set:
FieldValue
SourceCustom Schema
Preference Domaincom.shft.config
  1. 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.

  1. In the Application & Custom Settings → External Applications section, set Source to Custom Schema
  2. Preference Domain: com.shft.config
  3. Upload com.shft.config.schema.json to the Schema field
  4. Jamf renders a form with friendly field names, dropdowns for enum values (Wi-Fi / Ethernet / Thunderbolt, etc.), and the required types for each key
  5. 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.

  1. Click Save

Step 4: Verify deployment

  1. On a target Mac, run sudo jamf policy to trigger the policy check-in
  2. Verify shft is installed: ls /Applications/shft.app
  3. Verify the profile is applied: defaults read com.shft.config
  4. 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.