Skip to main content
Jamf Nation, hosted by Jamf, is a knowledgeable community of Apple-focused admins and Jamf users. Join us in person at the ninth annual Jamf Nation User Conference (JNUC) this November for three days of learning, laughter and IT love.

macOS Mojave incompatible Mac Models - Smart Computer Group

According to the Apple Public Beta Page the following Macs are compatible with macOS 10.14 (Mojave):

MacBook (Early 2015 or newer)
MacBook Air (Mid 2012 or newer)
MacBook Pro (Mid 2012 or newer)
Mac mini (Late 2012 or newer)
iMac (Late 2012 or newer)
iMac Pro (2017)
Mac Pro (Late 2013, plus mid 2010 and mid 2012 models with recommended Metal-capable GPU, including MSI Gaming Radeon RX 560 and Sapphire Radeon PULSE RX 580)

@rtrouton Wrote a nice page about how to create a smart group for High Sierra incompatible Macs

As we have many soon to be unsupported Macs in our infrastructure I adapted his xml-file to reflect the changed compatible models:

<?xml version="1.0" encoding="UTF-8"?>
<computer_group>
  <name>Macs incompatible with macOS Mojave</name>
  <is_smart>true</is_smart>
  <criteria>
    <size>37</size>
    <criterion>
      <name>Model Identifier</name>
      <priority>0</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro4,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>1</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacPro2,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>2</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro5,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>3</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro1,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>4</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro5,3</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>5</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro5,2</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>6</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>iMac8,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>7</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro5,4</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>8</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>iMac5,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>9</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>iMac5,2</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>10</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>iMac6,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>11</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro3,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>12</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro1,2</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>13</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>iMac9,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>14</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>Macmini3,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>15</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>Macmini1,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>16</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>iMac4,2</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>17</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro2,2</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>18</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro2,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>19</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBook3,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>20</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBook5,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>21</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBook5,2</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>22</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBook2,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>23</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>iMac4,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>24</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBook1,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>25</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro5,5</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>26</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>Xserve2,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>27</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookAir1,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>28</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>Xserve3,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>29</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookAir2,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>30</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>Xserve1,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>31</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>Macmini2,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>32</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacPro3,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>33</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>iMac7,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>34</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBook4,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>35</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacPro1,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>36</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacPro4,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>37</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBook6,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>38</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBook7,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>39</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro7,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>40</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro6,2</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>41</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro6,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>42</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro8,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>43</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro8,2</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>44</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookPro8,3</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>45</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookAir3,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>46</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookAir3,2</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>47</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookAir4,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>48</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>MacBookAir4,2</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>49</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>Macmini4,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>50</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>Macmini5,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>51</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>Macmini5,2</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>52</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>Macmini5,3</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>53</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>iMac10,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>54</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>iMac11,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>55</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>iMac11,2</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>56</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>iMac11,3</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>57</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>iMac12,1</value>
    </criterion>
    <criterion>
      <name>Model Identifier</name>
      <priority>58</priority>
      <and_or>or</and_or>
      <search_type>is</search_type>
      <value>iMac12,2</value>
    </criterion>
  </criteria>
  <computers/>
</computer_group>

For creating the smart group you will need to use the api as in the original blog post described:

curl -skfu username:password https://jamfpro.server.here:8443/JSSResource/computergroups/id/0 -T /path/to/filename.xml -X POST

I hope that this is useful for some of you guys :)

Like Comment
Order by:
SOLVED Posted: by jwojda

thank you @AndreasRumpl and @rtrouton for doing the heavy lifting for the community!

Like
SOLVED Posted: by Taylor.Armstrong

Thank you!

Working 100% here.

Like
SOLVED Posted: by MLBZ521

I've been considering doing something similar for machines that are not on the proper firmware version per OS. ( See: our large fleet of imaged Macs that haven't been getting firmware updates for years now... :/ )

If anyone would want to do this a different way, given Jamf doesn't recommend so many criteria in a Smart Group, I have an extension attribute to get the Latest OS Supported per Model and Current OS Version.

https://github.com/MLBZ521/macOS.JAMF/blob/master/Extension%20Attributes/jamf_ea_LatestOSSupported.sh

Supports El Capitan to Mojave.

Like
SOLVED Posted: by mm2270

Like @MLBZ521 states, having that many criteria items in one Smart Group is not advisable. While I'm sure it "works", it also creates a lot of stress on the server during Smart Group calculation, which happens a lot more frequently than most people realize - basically every time a machine checks in with new inventory, and some other times as well.
Using an EA that simply creates a Supported/Not Supported result is more efficient. It offloads the work onto the client during a recon. You could also have a one time policy run on each Mac that runs a script to determine Mojave eligibility, and then either drops the result into a file that an EA can pick up easily, or even an API script to write the result into a pop up menu style EA. Any of the above would be better than creating a Smart Group with 59 criteria items in it in my opinion.

Like
SOLVED Posted: by mkolb

I'm not so sure if this really causes such troubles for the database like you said. We all use a lot of smart groups for all kind of things and yes, in this smart group are 59 criteria BUT they are just "connected" with OR. So there wouldn't be much difference between one group with 59 criteria or 59 smart groups with one criteria. And in any bigger environment the amount of ~60 smart groups doesn't seem to be unrealistic. I guess an even higher amount would be totally normal.

I agree, the solution with the extension attribute is an elegant way to solve this, but I don't see any real problems if you go the smart group way. If something like this really stresses your database in a critical way, I think it's time to check the database(-host).

And no matter if you do the EA or the SG way, after your environment upgraded to Mojave and/or you got rid of all the clients that are too old, you can stop to monitor this anyway, so it is just temporary.

Like
SOLVED Posted: by MLBZ521

We've been having some pretty noticeable performance issues in our environment and when I reached out to Jamf, they specifically said:

We normally don't recommend over 10 criteria for smart groups as you will then see some performance issues

The other thing would be, what are you using this Smart Group for? We teach to our Site Admins that Smart Groups are not for Reporting purposes. If they're only creating the Smart Group to see the number in the group, and not using the Group in a Scope some where, we highly request they do not do that.

Our server side environment, resource wise, has more than the recommended resources for the quantity of managed devices (or at least we believe based on what support provided me). Still, if you're not going to use it, it would be better to create an Advanced Search out of the criteria.

Also, for my EA, I have a use for it outside of this as well. I have an macOS Upgrade workflow (script) that can be used to provide a "Self Service" Upgrade to users and/or push a forced upgrade as well. So a Site Admin can scope the Policy to the status of that EA essentially.

Like
SOLVED Posted: by kstrick

Using @MLBZ521's script, but it's showing Mac Pro 2013's as incompatible...
i just looked at a 2013 model, and "/usr/sbin/system_profiler SPDisplaysData" doesn't show metal support, but it's a using AMD Fire Pro GPU's, so i know it's supposed to work.... gonna have to look at script to see if i can tweak...
machines like that show 'High Sierra / OS Limitation,GFX unsupported'

trying to avoid the complex smart group, since it hammers jamf pro to calculate for every machine that checks in

Update: i think i know why--- OS is lower than 10.13.6 on some mac pro 2013's, so it considers it too low... my guess is that this is accounting for firmware patch level?

Like
SOLVED Posted: by cbrewer

I use a Smart Group for this but with regex for each model identifier to keep my criteria cleaner and more manageable.

Like
SOLVED Posted: by MLBZ521

@kstrick

Eh, I didn't specifically test on a MacPro 2013....

Just tested and I see what the issue is for "GFX unsupported". These models report different results on Sierra and High Sierra/Mojave, as well as reporting for each GFX Card installed.

10.12 Sierra:

Supported Supported

10.13 High Sierra/10.14 Mojave:

Supported, feature set macOS GPUFamily1 v3 Supported, feature set macOS GPUFamily1 v3

For the OS Limitation issue, this is caused by the logic I added for the Mac Pro Mid 2010/Mid 2012 models. For MacPro 6,1 (2013/Trash Cans), these should be supported no matter the existing state, since they wouldn't be compatible with any OS that is too old, nor have incompatible hardware. So they shouldn't run through the logic for those older systems.

Updated my EA to reflect. Let me know if that doesn't resolve it for you.

Like
SOLVED Posted: by donmontalvo

FWIW...

#!/bin/bash
# Check if computer supports Mojave (https://support.apple.com/en-us/HT201475). 20190129 DM

outputFile="/tmp/.tempMojaveTestFile.txt"
modelIdentifier=$( sysctl -n hw.model )
folderPath="/Library/COMPANY/SearchResults"
dateString=$( date '+%Y%m%d-%H%M%S-%Z' )

# Create folder if it doesn't exit

mkdir -p $folderPath
chown root:admin $folderPath

# Create temp file

cat << 'EOF' > $outputFile
iMac10,1
iMac11,1
iMac11,2
iMac11,3
iMac12,1
iMac12,2
iMac4,1
iMac4,2
iMac5,1
iMac5,2
iMac6,1
iMac7,1
iMac8,1
iMac9,1
MacBook1,1
MacBook2,1
MacBook3,1
MacBook4,1
MacBook5,1
MacBook5,2
MacBook6,1
MacBook7,1
MacBookAir1,1
MacBookAir2,1
MacBookAir3,1
MacBookAir3,2
MacBookAir4,1
MacBookAir4,2
MacBookPro1,1
MacBookPro1,2
MacBookPro2,1
MacBookPro2,2
MacBookPro3,1
MacBookPro4,1
MacBookPro5,1
MacBookPro5,2
MacBookPro5,3
MacBookPro5,4
MacBookPro5,5
MacBookPro6,1
MacBookPro6,2
MacBookPro7,1
MacBookPro8,1
MacBookPro8,2
MacBookPro8,3
Macmini1,1
Macmini2,1
Macmini3,1
Macmini4,1
Macmini5,1
Macmini5,2
Macmini5,3
MacPro1,1
MacPro2,1
MacPro3,1
MacPro4,1
Xserve1,1
Xserve2,1
Xserve3,1
EOF

if [[ -e "$outputFile" ]]
then
    if grep -R "$modelIdentifier" "$outputFile"
    then
        echo "$dateString SupportsMojaveNOT" > "$folderPath"/SupportsMojaveNOT.txt
    else
        echo "$dateString SupportsMojave" > "$folderPath"/SupportsMojave.txt
    fi
else
    echo "$outputFile does not exist."
    exit 1
fi

rm "$outputFile"

exit 0
Like
SOLVED Posted: by sbirdsley

Anyone have anything like this for Catalina yet?

Like
SOLVED Posted: by cbrewer

All Macs that run Mojave can run Catalina - except for MacPro5,1.

Like
SOLVED Posted: by MLBZ521

@sbirdsley I've added preliminary support for Catalina in my extension attribute.

https://github.com/MLBZ521/macOS.JAMF/blob/master/Extension%20Attributes/jamf_ea_LatestOSSupported.sh

Like
SOLVED Posted: by remus

@MLBZ521 After creating the extension attribute from the script you provided, how does one use that in JAMF to get the results?

Like
SOLVED Posted: by MLBZ521

@remus Every extension attribute becomes an available criteria item in Advanced Searches and Smart Groups. So you can build logic around the EA through those.

Does that answer your question?

Like
SOLVED Posted: by dan-snelson

Thanks, @MLBZ521!

Like
SOLVED Posted: by remus

@MLBZ521 Thank you for taking the time to explain it to me!
Still trying to get my head around Extension Attributes… I want for example a list of the Macs that cannot run Catalina.

What do I use for Value in this case? If I use what the script outputs in the terminal… for example Catalina in the Value field I get Macs from 2017. That cannot be right.

Like
SOLVED Posted: by MLBZ521

@remus

For Macs that are not compatible with Catalina, you'll need to use two criteria:

  1. <EA> is not Catalina
  2. <EA> is not ^(?!\s*$).+

Criteria 1 gets devices that have reported they are not compatible with Catalina.
Criteria 2 gets devices that have not submitted inventory with the value of it is compatible or not.

Criteria 2 is likely why you're seeing 2017 devices in your search. Until a device submits inventory, the EA will be blank. The EA script has to run on the local device after it is added into Jamf Pro for the value to be reported. EA scripts do not run within Jamf, but instead, are ran on the local device. So my method is different from others in here due to the desired functionality. cbrewer's Smart Group method would be the approach I would take if I wanted the logic ran in Jamf Pro, however, it would require a one Smart Group per OS Version and......I don't want any more Smart Groups than I have to currently. We use Sites and have way to many Smart Groups as is.

This EA will report compatibility, including reasons why it may not be compatible, such as device doesn't have enough available resources (drive space), if the Graphics Card doesn't support Metal 2, or if the current OS is limiting the maximum OS level that the device could upgrade too (aka, get the latest compatible OS, you'd have a two step OS upgrade process).

Like
SOLVED Posted: by sbirdsley

Thanks @MLBZ521

Like