Skip to main content

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 :)

Does anyone have an example on how they converted this to a policy? I like the info @MLBZ521's script outputs but am with @stevewood in that I don't need this to run daily.


@DJC



You could convert @MLBZ521 EA into a script that runs via a policy and simply writes out to a plist file. Then use an EA to read in the value from that plist. That's how we handle grabbing software version values that we want in an EA or something, or other data.



So wherever the script has an echo "<result></result>" type tag, you could replace that with defaults write /path/to/some/plist MojaveCompatible <value>.



Then the EA would just read that value in with something like echo "<result>$(defaults read /path/to/some/plist MojaveCompatible)</result>. Test that, of course, because I'm not 100% it will work.


@teodle My script just does a very basic check for available space. Nothing fancy. If you want something more, it would have to be added.



@DJC Do you update inventory daily? (We don't, so it's not run that often.) But as I think I've said before, I'd much rather the client run this logic (which is not very resource intensive) once every inventory than having Jamf Pro run the logic for thousands of systems.



@stevewood's last post isn't a bad idea either. But the policy is still going to be running this logic on the system the same as the EA. Though you could control how often the policy is ran. It mainly depends on how often you believe your systems are changing to require an updated EA value.


@MLBZ521 hi there. Is that EA that you posted about on 7/5/2018 fully up to date and supports macOS 10.15 Catalina?



here is that link of the EA you provided to list a macs Lastest Support OS Version



This EA script that you posted doesn't seem to work. All the computers are coming up as CATALINA compatible, even 2011 imacs.



thank you


@tcandela I don't see the issue you described in my environment. At least, not with 2011 iMacs. I didn't check other models too much further at the moment though.



I updated it based on the Catalina Preview last summer (Updated on 6/21/2019). Make sure you have v1.6.0 in your environment.



The only thing I did not take into account in the last update was the hardware requirements change (specifically Catalina requires a minimum 4GB RAM); I forgot to go back and do that. I'll probably have to change the logic a bit to properly account for that as I had to do with Mac Pro's and Mojave. I'll look into it as I have time.


@MLBZ521 i just grabbed Version 1.6.0 and am testing it as is.



Also maybe update some of the # comments in the script to also include 'Catalina'. for example



# First parameter is for Mojave, the second parameter is for High Sierra, and the third for El Capitan, to check compatible HW models.


does the EA get set once a mac goes through a 'check in' or must it be a 'recon'?



all macs in inventory are initially displaying 'Catalina', so i'll wait and see once each computer runs a 'recon'



https://github.com/MLBZ521/macOS.Jamf/blob/24fac31b18ba43f662f5c0bed1a1c6891bac6304/Extension%20Attributes/jamf_ea_LatestOSSupported.sh


@MLBZ521 also what is the default value given in your 1.6.0 version of your EA script ?



I see how the script code is setup now. You have the following order
--- variable declarations
--- functions (3 of them)
--- main code



But with setting up this script as an EA all my macs are initially being marked as Catalina until a recon runs . Probably should include a default initial <result>macOS</result> something like this to not cause confusion



how does that 'modelcheck' function work?


@tcandela Any time a new EA is added, it's value it going to be blank. EA values are not updated until a device has submitted inventory/recon (if the EA type is a script). If your EA values are still set to Catalina, then that is from the previous inventory submission. Updating the EA configuration does not change the existing values, they won't update until inventory has been submitted.



Yes, my comments confused me as well when I looked at it Saturday. I changed how I passed the parameters to the
modelCheck function in one of the last updates to make it easier to update in the future and I didn't update the comments. I meant to go back and update those when I added the hardware requirements change, but forgot... I've fixed those in my draft I started working on, but haven't finished yet.



The logic "starts" in the final if statement in the script currently. When then calls the modelCheck Function.


@MLBZ521 that's not how it worked for me. They all got initial EA values of 'Catalina'. from the beginning. I brought this up in my earlier comment 3/22/2020 @ 4:01pm


@tcandela That's strange, because an EA of the type script never has a default value. It can't. The value is set only after the script is ran during an inventory. There's no other way to for Jamf Pro to determine the proper value.



What version of Jamf Pro are you running? There's been product issues where EA values were being populated by the values of a previously deleted device, but this was only affecting newly enrolled devices.



My only suggestion would be to delete the EA and create it again from scratch so that all current values are erased. Or you could create a duplicate of the EA and see what happens on the next inventory.


@MLBZ521 I'll try the clone of the EA, but originally it was all getting populated with Catalina as the EA. Then as recon slowly started trickling in from macs 1 by 1 the EA would then correctly display the correct macOS.



Using Cloud hosted jamf


@tcandela Yeah, that's really weird.



I just created a brand new EA (type script) in my environment, with only two possible values (Yes/No). About 50 have submitted inventory and everything else still has a blank value (we have over 5,000 clients currently).



If that happens again, I would report it to Jamf Support.


@tcandela I just updated the jamf_ea_LatestOSSupported.sh script.
I restructured and simplified the logic, commented the code more extensively, and improved the RAM checking logic.



The results should be more uniform now, as well and should always produce what the device is capable with currently, based on the current OS. If it is capable of a newer OS, but requires a stepped upgrade, it will only report the next version in the stepped upgrade path, not the final result, or report any determinations based on the final result.


@MLBZ521 withe the updated EA script, so if you have a mac with 10.11 and can support 10.15 what will the updated EA show?



I just want it to show straight up the highest macOS the mac can currently run. So in this case 10.15


Pretty sure the most recent required stepped upgrade is if the device is on macOS 10.7 Lion or older; it would have to upgrade to at least macOS 10.8 Mountain Lion and then can upgrade to a newer release of macOS.



The only exception to this is MacPro5,1's, which have to be on macOS 10.13.6 High Sierra to upgrade to macOS 10.14 Mojave.


@MLBZ521 hey, i just used the updated EA script (i changed the RAM to 4GB and Storage space to 15GB) and just like before all the EA are defaulting to displaying CATALINA for each mac.



I created a brand new EA, copied and pasted the new EA script into it. did not clone an existing EA


@tcandela Sorry for the delay...I must have missed the last notification...



You have v1.7.0 of the script now, correct? You shouldn't need to change the RAM or storage (unless you wanted to change the storage). RAM checks should be valid, unless you want machines compatible with Mojave and older to report Insufficient RAM if they don't have a desired minimum that is different than the technical minimum.



The last two versions of macOS require 12.5GB or up to 18.5GB depending on the current OS Version that is being upgraded from, so I set it to 20GB just to have a little extra padding. In the future, I could build the actual logic into the EA, but it would likely require a storage value check for each macOS version; not sure if it's really worth that when I'd really not want users living on the edge anyways, if it could be helped.



I'm not seeing any issues with the latest version of the EA in my environment. For the devices (3,056) that have reported inventory since I updated the EA, I'm getting results for Catalina, Mojave, High Sierra, El Capitan and combinations that include GFX unsupported / FV Enabled, OS Limitation, and Insufficient Storage. I don't seem to have any that has reported Insufficient RAM so far (thankfully).



I'm not sure how your devices would be reporting incorrectly. Have you ensured your devices have submitted inventory again since you updated the EA?


@MLBZ521 the EA is defaulting to all Catalina, then once each computer runs recon it displays the correct upgrade macOS version.
I thought you had it at 1.6.0? Did you recently make more changes and now upgraded it to 1.7.0?


@tcandela I updated it last week and posted on 3/24/2020 at 2:35 AM that I had updated it. But yes, I did make several major changes to the logic and incremented the version as well.



However Catalina is being originally displayed, if it's displaying the proper value after an inventory, that's good.


@MLBZ521 will you be updating your script to include Big Sur?


@Portuguez Yes, I will. I was looking at it earlier this week. The models Apple is supporting this year are mixed between sub-models (e.g. iMac 14,1/14,2/14,3 are not supported, but 14,4 is)... So I'll likely have to re-invent the wheel again for this version.



I'll start looking into it soon. I have a couple other things I'm working on at the moment.


Jamf should make these as options when creating static/smart groups.


based on the script in this thread I made this for big sur model checking. I think the list is correct so check before you use it.
Easy enough to adapt for other OS versions.


@MLBZ521 I want to thank you for writing this extension attribute. It has been a life saver for us. I attempted to go to your git hub page, and am getting a 404 error. Did you take down the repo?


@adhuston Sorry, I did some recent...."house cleaning" to some of my repos to make it easier to maintain things. I'm very behind on committing stuff, etc. So the path changed to the specific file.



Anyways, I have updated all my links within this thread to the EA script.


Reply