Understanding the Structure of a JSON Schema Manifest
You can use a plain text editor to create the JSON Schema manifest for your app and use a third-party validating tool to validate your formatting, such as https://jsonlint.com.
The general format of an app manifest looks similar to the JSON Schema manifest outlined in the following website:
https://support.google.com/chrome/a/answer/9771882
For official documentation and more information about JSON Schema, see the following website:
https://json-schema.org
Application Properties
The contents of an app manifest contain a header followed by a list of application properties. Each property contains a key-value pair. When these key-value pairs are defined, and the manifest is added to Jamf Pro, Jamf Pro automatically generates a user-friendly view of the property list in the Jamf Pro interface to allow you to customize the app.
Each property defined in the JSON Schema manifest contains the following elements:
-
Key Name—This is the name of the property.
-
title—This element defines the name of the property.
-
description—This element defines is the description of the property.
-
property_order—This element defines the numerical order of the property in the list from top to bottom. Lower numbers appear at the top.
-
type—This element defines the type of value in the property (e.g., "integer").
For a list of the types of values and their implementation in Jamf Pro, see Appendix: Configurable Settings.
The following table displays a sample JSON Schema manifest for the sample app "Disk Manager", divided into a header and multiple application properties. Each row in the table demonstrates how to generate the form and provides an illustration for the form that is displayed in Jamf Pro.
|
Application Property |
Key-Value Pair |
Setting Generated by Jamf Pro |
|
Header |
{ "title": "Disk Manager (net.talkingmoose.diskmanager)", "description": "Preference settings for the Disk Manager application", "properties": { |
The header includes the title of the manifest and a description. It can also include useful information useful such as the app domain (bundle identifier). |
|
Property 1 |
"askForPasswordDelay": { "title": "Ask For Password Delay", "description": "Disk Manager will wait the selected amount of time before requiring a password.", "property_order": 5, "type": "integer", "options": { "enum_titles": ["immediately", "5 seconds", "1 Minute", "5 Minutes", "15 Minutes", "1 Hour", "4 hours", "8 hours"] }, "enum": [0,5,60,300,900,3600,14400,28800] }, |
The type in this property defines the value as an integer and includes pre-defined options for the property (defined in the enum_titles key-value pair). Defining values for the enum_type enables Jamf Pro to generate this setting as a pop-up menu with options based on those values. |
|
Property 2 |
"diskCacheSize": { "title": "Disk Cache Size", "description": "Set disk cache size, in bytes.", "property_order": 10, "type": "integer" }, |
The type in this property defines the value as an integer but does not include a group of pre-defined options. Jamf Pro generates this setting as a text field where you can enter an integer. |
|
Property 3 |
"primaryServer": { "title": "Primary Server", "description": "Disk Manager will default to this server.", "property_order": 15, "type": "string", "options": { "enum_titles": ["Server 1", "Server 2", "Server 3"] }, "enum": ["https://server1.talkingmoose.net/", "https://server2.talkingmoose.net/", "https://server3.talkingmoose.net"/] }, |
The type in this property defines the value as a string and includes pre-defined options as values for the property (defined in the enum_titles key-value pair). Defining values for the enum_type enables Jamf Pro to generate this setting as a pop-up menu with options based on those values. |
|
Property 4 |
"downloadDirectory": { "title": "Download Directory", "description": "Choose the default location for downloading working files.", "property_order": 20, "type": "string" }, |
The type in this property defines the value as a string but does not include a group of pre-defined options. Jamf Pro generates this setting as a text field where you can enter text. |
|
Property 5 |
"askForPassword": { "title": "Ask For Password", "description": "Set Disk Manager application to require a password.", "property_order": 25, "type": "boolean" }, |
The type in this property defines the value as a boolean. Jamf Pro generates this setting as a pop-up menu with the options of "true" or "false". |
|
Property 6 |
"domainSafeList": { "title": "Domain Safelist", "description": "Disk Manager will not filter these domains.", "property_order": 30, "type": "array", "items": { "type": "string", "title": "Domain" } }, |
The type in this property defines the value as array with the items in the array defined as string. Jamf Pro generates this setting as a list of one or more text fields where you can enter data. |
|
Property 7 |
"serverList": { "title": "Server List", "description": "Add servers to management list.", "property_order": 35, "type": "array", "items": { "type": "object", "properties": { "serverAddress": { "title": "Hostname", "type": "string" }, "macAddress": { "title": "MAC Address", "type": "string" }, "ipAddress": { "title": "IP Address", "type": "string" } } } } |
The type in this property defines the value as array with one or more dictionaries, each with sub-properties defined as string. Jamf Pro generates this setting as a list of text fields where you can provide information for multiple items in the list. Each additional field in the list is dependent on how many additional sub-properties you define. Note: The last property defined in the manifest does not include a separating comma following the last brace (“}”). |
Jamf Pro Interface
After you add the JSON Schema manifest to Jamf Pro, Jamf Pro automatically generates a user-friendly view of the property list in the Jamf Pro interface to allow you to customize the app similar to the following: