ProfileCreator / ProfileManifests

Manifest repository for the ProfilePayloads framework
343 stars 146 forks source link

Add Home Screen layout manifest #264

Open apizz opened 4 years ago

apizz commented 4 years ago

Please provide the following information:

App Name: Home Screen Layout

App URL: N/A

App Profile Documentation URL: https://developer.apple.com/documentation/devicemanagement/homescreenlayout

Payload / Domain: com.apple.homescreenlayout

apizz commented 4 years ago

Yuck ... so the Pages key is an array of an array of dictionaries ... the reason for this is that every array within with the Pages array is treated as a separate page.

ProfileCreator doesn't really support this formatting ... you can get a blank array within an array, but then you don't get any of the contained dictionary preferences listed. So we can help admins get part of the way there, but not completely ... at least with regards to preferences on different pages and/or pages within folders.

ProfileCreator Example w/ Array of Array of Dictionaries Screen Shot 2020-04-27 at 11 28 09 PM Screen Shot 2020-04-27 at 11 28 12 PM

vs. formatted as array of dictionaries

Screen Shot 2020-04-27 at 11 37 35 PM Screen Shot 2020-04-27 at 11 37 40 PM

Actual format

<key>Dock</key>
<array>
    <!-- Dock App 1 -->
    <dict>
        <key>BundleID</key>
        <string>com.apple.Pages</string>
        <key>DisplayName</key>
        <string>Pages</string>
        <key>Type</key>
        <string>Application</string>
    </dict>
    <!-- Dock Folder 1 -->
    <dict>
        <key>DisplayName</key>
        <string>DockFolder</string>
        <key>Pages</key>
        <!-- vv array of array of dictionaries AKA Dock Folder Page 1 vv  -->
        <array>
            <!-- Dock Folder 1 - Page 1 - App 1  -->
            <array>
                <dict>
                    <key>BundleID</key>
                    <string>com.apple.Numbers</string>
                    <key>DisplayName</key>
                    <string>Numbers</string>
                    <key>Type</key>
                    <string>Application</string>
                </dict>
            </array>
            <!-- Dock Folder 1 - Page 2 - App 1  -->
            <array>
                <dict>
                    <key>BundleID</key>
                    <string>com.apple.Numbers</string>
                    <key>DisplayName</key>
                    <string>Numbers</string>
                    <key>Type</key>
                    <string>Application</string>
                </dict>
            </array>
        </array>
        <key>Type</key>
        <string>Folder</string>
    </dict>
    <!-- Dock App 2 -->
    <dict>
        <key>BundleID</key>
        <string>com.apple.mobilephone</string>
        <key>DisplayName</key>
        <string>Phone</string>
        <key>Type</key>
        <string>Application</string>
    </dict>
</array>
<key>Pages</key>
<array>
    <!-- App Page 1 array -->
    <array>
        <!-- App Page 1 - App 1 -->
        <dict>
            <key>BundleID</key>
            <string>com.thetileapp.tile</string>
            <key>DisplayName</key>
            <string>Tile - Find lost keys &amp; phone</string>
            <key>Type</key>
            <string>Application</string>
        </dict>
        <!-- App Page 1 - Folder 1 -->
        <dict>
            <key>DisplayName</key>
            <string>Page1Folder</string>
            <key>Pages</key>
            <array>
                <!-- App Page 1 - Folder 1 - Page 1 -->
                <array>
                    <!-- App Page 1 - Folder 1 - Page 1 - Web Clip 1 -->
                    <dict>
                        <key>DisplayName</key>
                        <string>WebClipPage1Folder</string>
                        <key>Type</key>
                        <string>WebClip</string>
                        <key>URL</key>
                        <string>https://google.com</string>
                    </dict>
                    <!-- App Page 1 - Folder 1 - Page 1 - App 1 -->
                    <dict>
                        <key>BundleID</key>
                        <string>com.google.chrome.ios</string>
                        <key>DisplayName</key>
                        <string>Google Chrome</string>
                        <key>Type</key>
                        <string>Application</string>
                    </dict>
                </array>
            </array>
            <key>Type</key>
            <string>Folder</string>
        </dict>
    </array>
    <!-- Home Page 2 array -->
    <array>
        <!-- App Page 2 - App 1 -->
        <dict>
            <key>BundleID</key>
            <string>com.google.GoogleMobile</string>
            <key>DisplayName</key>
            <string>Google</string>
            <key>Type</key>
            <string>Application</string>
        </dict>
    </array>
</array>

@relgit, what do you think?

relgit commented 4 years ago

@apizz just out of curiosity, did you try the com.apple.homescreenlayout manifest.plist from ManifestsToConvert? That manifest is incomplete, and although I doubt this will work with a complete one, it might be worth the shot.

Otherwise, if you want to get admins part of the way like you said and you believe that it's beneficial to them then I say go for it. On my side however we have a few other milestones that we need to reach before we can add such a manifest in a way that we are happy with.

apizz commented 4 years ago

Yeah, Jamf's GUI implementation of this payload is not great ... but it is usable. I always see value of having something available, even if there are special instructions for how to use it.

apizz commented 4 years ago

And I did try that manifest. No luck.