← Back to SnapKiosk Setup Guide

Locking the iPad
to SnapKiosk.

SnapKiosk supports Autonomous Single App Mode (ASAM) — an iOS feature that lets the app programmatically lock the device into itself. When ASAM is active, the Home button does nothing, Control Center and the app switcher are unreachable, the side button can't switch to other apps, and a normal customer cannot leave SnapKiosk.

On this page

  1. What you need before it'll work
  2. Option A — Apple Configurator (single device)
  3. Option B — Push via MDM
  4. Console-specific notes
  5. Pair with Managed App Configuration
  6. Verifying the lock works
  7. Fleet observability
  8. Fallback: Guided Access

1.What you need before it'll work

ASAM is gated by Apple at two levels. Both must be true or the toggle in SnapKiosk will silently fail:

  1. The iPad is supervised. "Supervision" is Apple's term for "an organization owns and manages this device." You supervise an iPad either with Apple Configurator 2 on a Mac, or by enrolling it in Apple Business Manager / School Manager + an MDM.
  2. SnapKiosk is authorized for ASAM in the active configuration profile.

Why so strict?

If you flip the toggle on an unsupervised personal iPad, nothing happens — the OS rejects the request silently and SnapKiosk surfaces an error. This is by Apple's design: they don't want apps locking down devices the user didn't consent to.

2.Option A — Apple Configurator (single device, no MDM)

Best for one-off kiosks where you don't have an MDM in play.

  1. Install Apple Configurator 2 from the Mac App Store.
  2. Connect the iPad to the Mac via USB. If it's a brand-new iPad, run through the supervisor setup wizard. If it's already in use, you'll need to erase and re-prepare it as supervised — supervision can't be added in place.
  3. In Apple Configurator, with the iPad selected, choose Add → Profiles.
  4. Either create a new profile in Apple Configurator → File → New Profile with the Single App Mode → Autonomous Single App Mode payload, or import the .mobileconfig from the next section.

3.Option B — Push via MDM

Works with Intune, Jamf, Mosyle, Kandji, Workspace ONE, JumpCloud, or any MDM that delivers standard iOS configuration profiles.

Add a configuration profile to your existing kiosk device-group profile. The payload type is com.apple.app.lock. The profile must list SnapKiosk's bundle ID under AllowedApplications:

<?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>PayloadType</key>
    <string>Configuration</string>
    <key>PayloadVersion</key>
    <integer>1</integer>
    <key>PayloadIdentifier</key>
    <string>app.snapapps.SnapKiosk.asam.profile</string>
    <key>PayloadUUID</key>
    <string>REPLACE-WITH-UUIDGEN-1</string>
    <key>PayloadDisplayName</key>
    <string>SnapKiosk — Allow Autonomous Single App Mode</string>
    <key>PayloadContent</key>
    <array>
        <dict>
            <key>PayloadType</key>
            <string>com.apple.app.lock</string>
            <key>PayloadVersion</key>
            <integer>1</integer>
            <key>PayloadIdentifier</key>
            <string>app.snapapps.SnapKiosk.asam</string>
            <key>PayloadUUID</key>
            <string>REPLACE-WITH-UUIDGEN-2</string>
            <key>PayloadDisplayName</key>
            <string>Allow ASAM for SnapKiosk</string>
            <key>AllowedApplications</key>
            <array>
                <dict>
                    <key>BundleIdentifier</key>
                    <string>app.snapapps.SnapKiosk</string>
                </dict>
            </array>
        </dict>
    </array>
</dict>
</plist>

Generate fresh UUIDs (uuidgen in Terminal, or your MDM does it automatically) before deploying.

4.Console-specific notes

Jamf Pro

Configuration Profiles → New → Single App Mode payload → set "Autonomous Single App Mode Apps" and add app.snapapps.SnapKiosk. Scope to your kiosk smart-group.

Microsoft Intune

Configuration policies → iOS/iPadOS → Device restrictions → toggle "Allow autonomous single app mode" → add app.snapapps.SnapKiosk to the bundle ID list. Assign to your kiosk device group.

Mosyle

Profiles → New iOS profile → Autonomous Single App Mode payload → list app.snapapps.SnapKiosk as a bundle ID.

Kandji

Library → Add Profile → Autonomous Single App Mode → add SnapKiosk's bundle ID → assign to the kiosk blueprint.

JumpCloud

Policy Management → New iOS policy → Autonomous Single App Mode → list app.snapapps.SnapKiosk → assign to the device group.

Workspace ONE

Resources → Profiles & Baselines → New iOS profile → Single App Mode payload → Autonomous mode → bundle ID.

5.Pair it with Managed App Configuration

For a complete kiosk profile, deploy three things together:

  1. This ASAM authorization profile (above).
  2. The managed-app-config dictionary that points SnapKiosk at your URL — see the App Config schema for every key and full plist examples.
  3. The app itself, deployed via VPP / Apps and Books.

The result

SnapKiosk arrives on the device, picks up its homeURL from MDM, and the Kiosk Lock toggle works the moment the admin flips it.

6.Verifying the lock works

  1. With your profile installed, launch SnapKiosk on the supervised iPad.
  2. Two-finger press + PIN to open Settings.
  3. Toggle "Lock device to SnapKiosk" under Kiosk Lock.
  4. The toggle should stay on. The subtitle changes to "Locked — Home button, Control Center, and app switcher are disabled."
  5. Press the Home button or swipe up — nothing happens. The kiosk is locked in.
  6. To exit: re-open Settings (two-finger + PIN) and toggle the lock off.

If the toggle flips back off

A red error appears when the profile isn't applied correctly. Check that the iPad shows "Supervised" in Settings → General → About (or in your MDM dashboard), the bundle ID in the profile exactly matches app.snapapps.SnapKiosk (case-sensitive), and the profile is scoped to and installed on the right device.

7.Fleet observability

SnapKiosk writes a small status payload to standard UserDefaults on every successful page load. MDM tools that can query app preferences (Jamf's Inventory Update + Application Configuration, Mosyle's Device Inquiry, Workspace ONE Sensors, etc.) can read this to confirm a kiosk is alive and on the expected URL.

Beacon key

Defaults domain: the app bundle's standard suite. Key: com.snapapps.SnapKiosk.lastLoad. Value: a dictionary with url (String) and timestamp (ISO 8601 String). Overwritten on every successful load — there's no history.

For crash and hang reports, SnapKiosk subscribes to MetricKit and writes a rolling log of the last 50 diagnostic entries to diagnostics.json in the app's Documents container. Admins can pull this file via MDM's file-inspection tools or open Settings → Diagnostics on-device to review recent entries.

8.Fallback — Guided Access

If you can't supervise the iPad (a one-off demo on a personal device, say), use Apple's built-in Guided Access feature instead:

  1. Settings → Accessibility → Guided Access → On. Set a passcode.
  2. Open SnapKiosk.
  3. Triple-click the side button to start Guided Access.
  4. Tap Start (top-right).
  5. The iPad is now restricted to SnapKiosk until you triple-click again and enter the passcode.

Guided Access doesn't survive a restart and has to be re-engaged manually each time. It's fine for a demo, impractical for a fleet — for any real kiosk deployment, supervise the device and use ASAM.