Skip to content

Custom Profiles

NoahRJ edited this page Jun 15, 2026 · 1 revision

Custom Profiles

Since Iru resources must also contain metadata (e.g. active or name), each resource's on-disk representation is actually a directory of associated files. Certain files are required for a directory to be recognized as a resource.

Tip

Additional files, such as a README.md, can be added without causing issues so long as they cannot be confused with the required files.

Directory Structure

Each profile requires:

  1. A directory within an iructl repository profiles directory containing the profile's files
  2. Exactly one info.[plist|yaml|json] file containing the profile's associated metadata
  3. Exactly one .mobileconfig file containing the profile's content
$ lsd --tree profiles/MyFancyProfile
 MyFancyProfile
├──  info.yaml
└──  profile.mobileconfig

info.yaml

id: 54bef6b3-b25e-44b4-89fd-d528d73939e4
name: MyFancyProfile
active: false
mdm_identifier: com.kandji.profile.custom.54bef6b3-b25e-44b4-89fd-d528d73939e4
runs_on_mac: true
runs_on_iphone: true
runs_on_ipad: true
runs_on_tv: true
runs_on_vision: true

profile.mobileconfig

<?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>PayloadContent</key>
    <array>
        <dict/>
    </array>
    <key>PayloadDisplayName</key>
    <string>MyFancyProfile</string>
    <key>PayloadIdentifier</key>
    <string>com.kandji.profile.custom.54bef6b3-b25e-44b4-89fd-d528d73939e4</string>
    <key>PayloadType</key>
    <string>Configuration</string>
    <key>PayloadUUID</key>
    <string>54bef6b3-b25e-44b4-89fd-d528d73939e4</string>
    <key>PayloadVersion</key>
    <integer>1</integer>
</dict>
</plist>

Clone this wiki locally