Jamf Device Checker - Administrator Guide

Table of Contents


Why Use Jamf Device Checker?

The Problem

End users often experience device issues that impact their productivity but don't know how to identify or resolve them:

These issues typically result in help desk tickets, lost productivity, and frustrated users.

The Solution

Jamf Device Checker empowers end users to self-diagnose and resolve device readiness issues through a simple, color-coded interface:

Green = Device is ready for work
⚠️ Yellow = Warnings that should be addressed soon
🔴 Red = Critical issues preventing productivity

Key Benefits

For End Users:

For IT Teams:

For Organizations:


Quick Start

Prerequisites

Required API Privileges

The app uses two distinct sets of privileges:

For Wizard Setup (Local JSS user account - used during initial configuration):

Create a local JSS user in Jamf Pro with these 8 privileges:

This user account authenticates the wizard via Basic Auth to create the API integration, configure roles, link the native app, and save app config XML. After initial setup, this user is only needed for app config updates.

For Runtime Operation (OAuth API client - automatically configured by wizard):

The wizard automatically creates a "Jamf Device Checker" API role with these 4 privileges assigned to the linked app integration:

These privileges allow the device checker to fetch device details and send MDM commands during normal operation using OAuth authentication. End users never see or use these credentials.

5-Minute Setup

Step 1: Purchase and add the app to Jamf Pro

Step 2: Run the Setup Wizard

There is no step 3


Setup Instructions

Step 1: Add Mobile Device App to Jamf Pro

Step 2: Run the Setup Wizard

The wizard handles all the authenication and managed app configuration automatically.

Install App on Admin Device

Enable Wizard Mode

Complete Wizard Steps

API Role

Native App Authentication

Generate App Config

Step 4: Scope to Devices


Configuration Reference

The app is configured entirely through Jamf Pro's Managed App Config. Below is a complete reference of all available keys.

Required Keys

These keys are automatically populated by Jamf Pro — do not modify or remove them.

Key Description
JPS_URL Jamf Pro server URL (auto-populated: $JPS_URL)
JSSID Device JSS ID (auto-populated: $JSSID)
MANAGEMENTID Device Management ID (auto-populated: $MANAGEMENTID)
OAUTH_AUTH_CODE OAuth authorization code (auto-populated: $OAUTH_AUTH_CODE)
APP_CONFIG_REINSTALL_CODE Reinstall trigger code (auto-populated: $APP_CONFIG_REINSTALL_CODE)

Branding & Alerts URL

Key Type Default Description
device-checker-branding-image-url String (empty) URL to company logo image (PNG/JPG). Leave blank for no branding.
device-checker-branding-image-height Integer 80 Logo height.
device-checker-alerts-url String (empty) Optional URL for alerts/status page. Shows link in Alerts tab.

Example:

<key>device-checker-branding-image-url</key>
<string>https://yourcompany.com/logo.png</string>
<key>device-checker-branding-image-height</key>
<string>60</string>

Share Buttons

Control visibility of status sharing and log export features in the More tab.

Key Type Default Description
device-checker-send-status-enabled String YES Show "Send Status" button (shares device readiness summary via email/messages)
device-checker-send-logs-enabled String YES Show "Send Logs" button (exports app logs for troubleshooting)

Example:

<key>device-checker-send-status-enabled</key>
<string>YES</string>
<key>device-checker-send-logs-enabled</key>
<string>NO</string>

UI Behavior

Control the scrolling behavior of the Status tab.

Key Type Default Description
device-checker-status-tab-scrollable String NO When YES, makes the entire Status tab scrollable (header + overall status + tiles). When NO (default), the header and overall status remain fixed with only the tiles scrolling below.

Example:

<key>device-checker-status-tab-scrollable</key>
<string>NO</string>

When to Enable:

Default (NO): Best for most deployments — header and overall readiness status remain visible while scrolling through tiles Enabled (YES): Use when you need the entire view to scroll together, or to accommodate longer branding headers on smaller devices


Operating System Readiness

Monitor OS version requirement with configurable minimum version and deadline.

Key Type Default Description
device-checker-os-enabled String YES Enable OS version monitoring tile
device-checker-os-min-version String (none) Minimum required OS version (e.g., 26.2)
device-checker-os-deadline String (none) Requirement deadline in YYYY-MM-DD format

Example:

<key>device-checker-os-enabled</key>
<string>YES</string>
<key>device-checker-os-min-version</key>
<string>26.2</string>
<key>device-checker-os-deadline</key>
<string>2026-06-30</string>

Status Logic:

✅ **Green (Ready)** — Current OS version meets minimum requirement

⚠️ **Yellow (Warning)** — Current OS version below minimum, but deadline has NOT passed (or no deadline configured)

🔴 **Red (Not Ready)** — Current OS version below minimum AND deadline has passed

App Readiness

Monitor installation status and version requirement for required managed apps.

Key Type Default Description
device-checker-apps-enabled String NO Enable app monitoring tile
device-checker-apps-list String (empty) Pipe-separated list of apps (see format below)

App List Format:

AppName,bundleID,minVersion,deadline|AppName2,bundleID2,minVersion2,deadline2|...

Example:

<key>device-checker-apps-enabled</key>
<string>YES</string>
<key>device-checker-apps-list</key>
<string>Slack,com.tinyspeck.chatlyio,24.0.0,2026-03-01|Microsoft Teams,com.microsoft.skype.teams,5.0.0,2026-06-01</string>

Status Logic:

✅ **Green (Ready)** — All apps installed and meet minimum versions

⚠️ **Yellow (Warning)** — One or more apps need updating, but deadline has NOT passed

🔴 **Red (Not Ready)** — One or more apps need updating AND deadline has passed

⏳ **Pending** — App installation in progress (see Self Service integration below)

Self Service Integration:

When apps are missing or outdated, users can tap the "Update Apps" button on the Apps tile to automatically install or update required apps

User Action: Taps "Update Apps" button on Apps tile

App Launch: Jamf Self Service app opens automatically with missing/outdated apps queued

Pending State: Device Checker enters "Pending" status and starts a 2-minute auto-refresh timer

Auto-Check: App automatically refreshes every 2 minutes to check if installations completed

Completion: Once all apps meet requirements, status returns to green

Requirements:

Notes:


Power Source (Battery Level)

Monitor battery charge level with configurable warning and critical thresholds.

Key Type Default Description
device-checker-power-source-enabled String YES Enable battery level monitoring tile
device-checker-power-source-warning Integer 25 Warning threshold (percentage)
device-checker-power-source-critical Integer 10 Critical threshold (percentage)

Example:

<key>device-checker-power-source-enabled</key>
<string>YES</string>
<key>device-checker-power-source-warning</key>
<string>25</string>
<key>device-checker-power-source-critical</key>
<string>10</string>

Status Logic:

🔴 **Red (Critical)** — Battery ≤ critical threshold

⚠️ **Yellow (Warning)** — Battery ≤ warning threshold (but > critical)

✅ **Green (Ready)** — Battery > warning threshold

⚡ **Charging** — Device is plugged in (always green when charging)

Storage Capacity

Monitor available storage with configurable warning and critical thresholds (based on percentage used).

Key Type Default Description
device-checker-storage-enabled String YES Enable storage monitoring tile
device-checker-storage-warning Integer 75 Warning threshold (% used)
device-checker-storage-critical Integer 90 Critical threshold (% used)

Example:

<key>device-checker-storage-enabled</key>
<string>YES</string>
<key>device-checker-storage-warning</key>
<string>75</string>
<key>device-checker-storage-critical</key>
<string>90</string>

Status Logic:

🔴 **Red (Critical)** — Storage used ≥ critical threshold

⚠️ **Yellow (Warning)** — Storage used ≥ warning threshold (but < critical)

✅ **Green (Ready)** — Storage used < warning threshold

Battery Health

Monitor battery health status to identify devices that may need battery replacement. This tile displays battery health status and current charge percentage.

Key Type Default Description
device-checker-battery-enabled String YES Enable battery health monitoring tile

Example:

<key>device-checker-battery-enabled</key>
<string>YES</string>

Status Logic:

✅ **Green (Ready)** — Battery health is "Normal" or "Unsupported"

🔴 **Red (Not Ready)** — Battery health is "Service-Recommended" or "Non-Genuine"

⚪ **Gray (Unknown)** — Battery health is "Unknown" or unable to retrieve battery data

Tile Display:

Status color/icon — Based on battery health (Normal/Service-Recommended/Non-Genuine/Unknown/Unsupported)

Subtitle — Shows battery health issue if present, otherwise shows current charge percentage

Detail view — Shows charge level, charging state, Low Power Mode, battery health status, and recommendations

Health Status Values:

Normal — Battery is functioning properly (Green)

Service-Recommended — Battery capacity has degraded, replacement recommended (Red)

Non-Genuine — Non-Apple battery detected, replacement recommended (Red)

Unsupported — Battery health monitoring not available on this device model (Green, shows charge % only)

Unknown — Health data not yet available from iOS (Gray, shows charge % only)

Notes:


Thermal State

Monitor device temperature in real-time using local iOS APIs (no MDM calls required).

Key Type Default Description
device-checker-thermal-enabled String YES Enable thermal state monitoring tile

Example:

<key>device-checker-thermal-enabled</key>
<string>YES</string>

Status Logic:

✅ **Green (Nominal)** — Normal operating temperature, all features operating normally

⚠️ **Yellow (Fair)** — Slightly elevated, system defers background work like prefetching/indexing

🔴 **Red (Serious)** — High temperature, CPU/GPU throttling active, frame rates may drop to 30 FPS

🔴 **Red (Critical)** — Device critically hot, significant throttling, camera/flash/speaker may disable, risk of shutdown

Use Cases:

Notes:


Performance (Memory & CPU)

Monitor device memory pressure and CPU usage using local iOS APIs with configurable thresholds.

Key Type Default Description
device-checker-performance-enabled String YES Enable performance monitoring tile
device-checker-memory-warning Integer 70 Memory warning threshold (% used)
device-checker-memory-critical Integer 85 Memory critical threshold (% used)
device-checker-cpu-warning Integer 60 CPU warning threshold (% usage)
device-checker-cpu-critical Integer 80 CPU critical threshold (% usage)

Example:

<key>device-checker-performance-enabled</key>
<string>YES</string>
<key>device-checker-memory-warning</key>
<string>70</string>
<key>device-checker-memory-critical</key>
<string>85</string>
<key>device-checker-cpu-warning</key>
<string>60</string>
<key>device-checker-cpu-critical</key>
<string>80</string>

Status Logic:

🔴 **Red (Critical)** — Memory OR CPU ≥ critical threshold

⚠️ **Yellow (Warning)** — Memory OR CPU ≥ warning threshold (but < critical)

✅ **Green (Ready)** — Both memory AND CPU < warning thresholds

Notes:


Network Status

Monitor WiFi, Ethernet, and cellular connectivity status.

Key Type Default Description
device-checker-wifi-enabled String YES Enable WiFi/Ethernet monitoring tile (Ethernet is auto-detected when connected)
device-checker-cellular-enabled String NO Enable cellular monitoring tile
device-checker-network-speed-enabled String NO Enable network speed test button in network detail views

Example:

<key>device-checker-wifi-enabled</key>
<string>YES</string>
<key>device-checker-cellular-enabled</key>
<string>YES</string>
<key>device-checker-network-speed-enabled</key>
<string>YES</string>

Network Speed Test Details:

Purpose: On-demand diagnostic tool to measure download/upload speeds and latency

Data Usage: ~10-15 MB per test (10 MB download + 2 MB upload + overhead)

Test Duration: ~15-20 seconds for complete test

Availability: Button shown in WiFi and Cellular detail views when interface is connected

Cellular Warning: Automatic alert shown before every test on cellular connection (to warn about data usage)

Results: Download speed (Mbps), upload speed (Mbps), latency (ms)

User Experience: Button in network detail views triggers test, progress indicator shown during test

Use Cases: Field workers verifying connectivity, troubleshooting slow performance, validating bandwidth requirements

Note: Speed test results are informational only and do not affect device readiness status

Internet Connectivity Test (WiFi, Ethernet, and Cellular)

Lightweight test to verify actual internet reachability vs just interface connectivity.

Key Type Default Description
device-checker-internet-connectivity-test-enabled String NO Enable internet connectivity test for all interfaces
device-checker-internet-connectivity-test-endpoint String http://captive.apple.com/hotspot-detect.html Test endpoint URL (Apple captive portal default)
device-checker-internet-connectivity-test-timeout String 3 Request timeout in seconds (1-10 range)
device-checker-internet-connectivity-test-cache-ttl String 30 Cache result validity in seconds (10-300 range, cellular uses minimum 60s)

Example:

<key>device-checker-internet-connectivity-test-enabled</key>
<string>YES</string>
<key>device-checker-internet-connectivity-test-timeout</key>
<string>5</string>
<key>device-checker-internet-connectivity-test-cache-ttl</key>
<string>60</string>

How It Works:

Status Behavior by Interface:

WiFi:

Ethernet:

Cellular:

Use Cases:

Data Usage:

Status Logic Without Internet Connectivity Test:

WiFi:

✅ **Green (Connected)** — Connected to WiFi network

🔴 **Red (Not Connected)** — Not connected to WiFi

Cellular:

✅ **Green (Ready)** — Cellular data available

⚠️ **Yellow (Warning)** — Cellular access restricted (Settings > Cellular Data toggle off)

🔴 **Red (Error)** — Cellular not available

Jamf Setup Extension Attribute

Display on-duty/off-duty status from a Jamf Pro extension attribute.

Key Type Default Description
device-checker-jamf-setup-ea-enabled String NO Enable Jamf Setup EA tile
device-checker-jamf-setup-ea-name String (empty) Name of extension attribute in Jamf Pro
device-checker-jamf-setup-ea-on-duty-value String (empty) Value that indicates "on-duty"
device-checker-jamf-setup-ea-off-duty-value String (empty) Value that indicates "off-duty"

Example:

<key>device-checker-jamf-setup-ea-enabled</key>
<string>YES</string>
<key>device-checker-jamf-setup-ea-name</key>
<string>Jamf Setup</string>
<key>device-checker-jamf-setup-ea-on-duty-value</key>
<string>On-duty</string>
<key>device-checker-jamf-setup-ea-off-duty-value</key>
<string>Off-duty</string>

Status Logic:

✅ **Green (Ready)** — EA value matches on-duty value

⚠️ **Yellow (Warning)** — EA value matches off-duty value

⚪ **Gray (Unknown)** — EA not found or value doesn't match either configured value

Notes: - Requires custom extension attribute in Jamf Pro - Extension attribute must be populated by Jamf Setup or other method


Auto-Refresh Throttling

Control how often the app automatically refreshes when returning from background.

Key Type Default Description
device-checker-auto-refresh-threshold Integer 300 Minimum seconds between automatic refreshes (range: 60-3600, or 0 to disable)

Example:

<key>device-checker-auto-refresh-threshold</key>
<string>300</string>

Behavior:

Default (300 seconds / 5 minutes): If user switches apps and returns within 5 minutes, no auto-refresh occurs

Custom threshold: Set to desired seconds (60-3600)

Disable throttling: Set to 0 to always refresh when app becomes active

Always refreshes (throttling bypassed):

Pending State Behavior:

When the Apps tile enters "Pending" state (after user taps "Update Apps"), the app automatically checks device status every 2 minutes until all required apps are installed. This ensures users see updated status as soon as installations complete, regardless of the auto-refresh threshold setting.


Configuration Examples

Minimal Configuration (Default Settings)

Perfect for quick testing or basic deployments.

<dict>
  <!-- Required keys (auto-populated) -->
  <key>JPS_URL</key>
  <string>$JPS_URL</string>
  <key>JSSID</key>
  <string>$JSSID</string>
  <key>MANAGEMENTID</key>
  <string>$MANAGEMENTID</string>
  <key>OAUTH_AUTH_CODE</key>
  <string>$OAUTH_AUTH_CODE</string>
  <key>APP_CONFIG_REINSTALL_CODE</key>
  <string>$APP_CONFIG_REINSTALL_CODE</string>

  <!-- Enable OS monitoring only -->
  <key>device-checker-os-enabled</key>
  <string>YES</string>
  <key>device-checker-os-min-version</key>
  <string>18.0</string>
</dict>

Full Configuration

Comprehensive setup with branding, multiple device status checks, and custom thresholds.

<dict>
  <!-- Required keys (auto-populated) -->
  <key>JPS_URL</key>
  <string>$JPS_URL</string>
  <key>JSSID</key>
  <string>$JSSID</string>
  <key>MANAGEMENTID</key>
  <string>$MANAGEMENTID</string>
  <key>OAUTH_AUTH_CODE</key>
  <string>$OAUTH_AUTH_CODE</string>
  <key>APP_CONFIG_REINSTALL_CODE</key>
  <string>$APP_CONFIG_REINSTALL_CODE</string>

  <!-- Branding -->
  <key>device-checker-branding-image-url</key>
  <string>https://yourcompany.com/logo.png</string>
  <key>device-checker-branding-image-height</key>
  <string>60</string>

  <!-- OS Readiness -->
  <key>device-checker-os-enabled</key>
  <string>YES</string>
  <key>device-checker-os-min-version</key>
  <string>18.0</string>
  <key>device-checker-os-deadline</key>
  <string>2026-12-31</string>

  <!-- App Readiness -->
  <key>device-checker-apps-enabled</key>
  <string>YES</string>
  <key>device-checker-apps-list</key>
  <string>Slack,com.tinyspeck.chatlyio,24.0.0,2026-06-01|Microsoft Teams,com.microsoft.skype.teams,5.0.0,2026-09-01</string>

  <!-- Device Health Tiles -->
  <key>device-checker-power-source-enabled</key>
  <string>YES</string>
  <key>device-checker-power-source-warning</key>
  <string>30</string>
  <key>device-checker-power-source-critical</key>
  <string>15</string>

  <key>device-checker-storage-enabled</key>
  <string>YES</string>
  <key>device-checker-storage-warning</key>
  <string>70</string>
  <key>device-checker-storage-critical</key>
  <string>85</string>

  <key>device-checker-battery-enabled</key>
  <string>YES</string>

  <key>device-checker-thermal-enabled</key>
  <string>YES</string>

  <key>device-checker-performance-enabled</key>
  <string>YES</string>
  <key>device-checker-memory-warning</key>
  <string>75</string>
  <key>device-checker-memory-critical</key>
  <string>90</string>
  <key>device-checker-cpu-warning</key>
  <string>70</string>
  <key>device-checker-cpu-critical</key>
  <string>85</string>

  <key>device-checker-wifi-enabled</key>
  <string>YES</string>
  <key>device-checker-cellular-enabled</key>
  <string>NO</string>

  <!-- Network Speed Test (optional - disabled by default) -->
  <key>device-checker-network-speed-enabled</key>
  <string>NO</string>

  <!-- Internet Connectivity Test (optional - disabled by default) -->
  <key>device-checker-internet-connectivity-test-enabled</key>
  <string>NO</string>
  <key>device-checker-internet-connectivity-test-endpoint</key>
  <string>http://captive.apple.com/hotspot-detect.html</string>
  <key>device-checker-internet-connectivity-test-timeout</key>
  <string>3</string>
  <key>device-checker-internet-connectivity-test-cache-ttl</key>
  <string>30</string>

  <!-- Jamf Setup EA -->
  <key>device-checker-jamf-setup-ea-enabled</key>
  <string>YES</string>
  <key>device-checker-jamf-setup-ea-name</key>
  <string>Device Status</string>
  <key>device-checker-jamf-setup-ea-on-duty-value</key>
  <string>Active</string>
  <key>device-checker-jamf-setup-ea-off-duty-value</key>
  <string>Spare Pool</string>

  <!-- UI Options -->
  <key>device-checker-alerts-url</key>
  <string>https://status.yourcompany.com</string>
  <key>device-checker-send-status-enabled</key>
  <string>YES</string>
  <key>device-checker-send-logs-enabled</key>
  <string>NO</string>
  <key>device-checker-status-tab-scrollable</key>
  <string>NO</string>

  <!-- Auto-Refresh (10 minutes) -->
  <key>device-checker-auto-refresh-threshold</key>
  <string>600</string>
</dict>


Document Version