A condition expression is the syntax used to define when to activate a blueprint's configurations. Each condition expression evaluates device attributes or Jamf-defined properties to determine whether a configuration activates on the device. When the condition expression is true, the configuration activates. When it is false, the configuration remains inactive for that device. You can join multiple expressions using logical operators to build more complex conditions.
Status Item Condition Structure
@property(jamf.device.groups), see the Jamf Properties table.| Element | Syntax | Notes |
|---|---|---|
| Status item | @status(item.name) | A fact the device reports about itself. Always wrapped in @status(item.name). |
| String value | 'iPhone' | Must be wrapped in single quotes. |
| Boolean value | true / false | No quotes. Lowercase only. |
| No condition | (leave blank) | Blueprint activates on all devices in scope. |
@status(device.model.family) == 'iPhone'Commonly Used Status Items
Status items are the device facts available for use in condition expressions. For the full list, see the apple/device-management/declarative/status repository on GitHub.
| Status Item | Type | Example Values |
|---|---|---|
device.model.family | String | iPhone, iPad, Mac, AppleTV |
device.model.identifier | String | iPhone15,2 |
device.operating-system.version | String | 17.4.1 |
device.identifier | String | Device UDID |
passcode.is-compliant | Boolean | true, false |
device.is-supervised | Boolean | true, false |
Supported Operators
| Operator | Meaning | Example |
|---|---|---|
== | Equals | @status(device.model.family) == 'iPhone' |
!= | Does not equal | @status(device.model.family) != 'Mac' |
IN {…} | Matches any value in list | @status(device.model.family) IN {'iPhone', 'iPad'} |
< > <= >= | Numeric / version comparison | @status(device.operating-system.version) >= '17.0' |
Logical Operators for Joining Conditions
| Keyword | Meaning | Example |
|---|---|---|
AND | Both conditions must be true | @status(device.model.family) == 'iPhone' AND @status(passcode.is-compliant) == true |
OR | Either condition can be true | @status(device.model.family) == 'iPhone' OR @status(device.model.family) == 'iPad' |
NOT | Condition must be false | NOT @status(device.model.family) == 'Mac' |
Status Item Condition Examples
| Scenario | Condition Expression |
|---|---|
| iPhone devices only | @status(device.model.family) == 'iPhone' |
| iPhone or iPad devices | @status(device.model.family) IN {'iPhone', 'iPad'} |
| Supervised iPhone devices with compliant passcode | @status(device.model.family) == 'iPhone' AND @status(device.is-supervised) == true AND @status(passcode.is-compliant) == true |
| iOS 17 or later | @status(device.operating-system.version) >= '17.0' |
| Everything except Mac computers | @status(device.model.family) != 'Mac' |
Common Authoring Mistakes
| Mistake | Incorrect | Correct |
|---|---|---|
| Single equals instead of double equals | @status(device.model.family) = 'iPhone' | @status(device.model.family) == 'iPhone' |
| Missing single quotes around string values | @status(device.model.family) == iPhone | @status(device.model.family) == 'iPhone' |
| Incorrect capitalization of string values | @status(device.model.family) == 'iphone' | @status(device.model.family) == 'iPhone' |
| OR chain instead of IN for multiple values | ... == 'iPhone' OR ... == 'iPad' | ... IN {'iPhone', 'iPad'} |
| Quotes around boolean values | @status(passcode.is-compliant) == 'true' | @status(passcode.is-compliant) == true |
Jamf Properties
Use @property(jamf.device.groups) to target devices based on their device group membership. Device groups are defined in Jamf and are not Apple declarative device management status items. You cannot use @property(jamf.device.groups) with @status(jamf.device.groups).
| Operator | Meaning | Example |
|---|---|---|
ANY … IN {…} | Device belongs to at least one of the listed groups | ANY @property(jamf.device.groups) IN {'groupA', 'groupB'} |
NONE … IN {…} | Device does not belong to any of the listed groups | NONE @property(jamf.device.groups) IN {'groupA', 'groupB'} |