Munki - Pushing packages by CPU Arch

Note: Most software is now available as universal binaries that work for either architecture. When possible, pushing one universal binary to all machines is preferred over pushing two separate versions.

  1. Give the two packages separate filenames, e.g. "Chrome-<version>.dmg" and "Chrome-arm64-<version>.dmg".
  2. Use munkiimport to import as usual. Make sure to name the items separately, e.g. "Chrome" and "Chrome-arm64".
  3. When asked if you want to edit the pkginfo file, say yes.
  4. Edit the pkginfo XML as follows:
    • Intel (x64) version:
               <key>supported_architectures</key>
               <array>
                  <string>x86_64</string>
               </array>
               <key>installable_condition</key>
               <string>NOT arch BEGINSWITH "arm"</string>
               
    • Apple Silicon (arm64) version:
               <key>supported_architectures</key>
               <array>
                  <string>arm64</string>
               </array>
               
  5. Add both packages to the manifests with manifestutil. The supported_architectures and installable_condition keys will make sure the right one is selected for each client.

Note: Just specifying "x86_64" as the supported architecture will not stop Munki from installing a package on an Apple Silicon system -- it assumes Rosetta is installed.