{"id":932,"date":"2021-01-27T01:47:54","date_gmt":"2021-01-27T06:47:54","guid":{"rendered":"https:\/\/www.brunerd.com\/blog\/?p=932"},"modified":"2021-01-27T01:51:53","modified_gmt":"2021-01-27T06:51:53","slug":"macos-compatibility-fun","status":"publish","type":"post","link":"https:\/\/www.brunerd.com\/blog\/2021\/01\/27\/macos-compatibility-fun\/","title":{"rendered":"macOS Compatibility Fun!"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Compatibility Questions<\/h3>\n\n\n\n<p>If you work with Macs and Jamf then you know every year there&#8217;s a new per OS Extension Attribute (EA) or Smart Group (SG) recipe to determine if macOS will run on your fleets hardware. However I asked myself: What if a <em>single<\/em> Extension Attribute script could fill the need, requiring only a periodic updating of Model IDs and the addition of new macOSes?<\/p>\n\n\n\n<p>Then I also asked: Could this <em>same<\/em> script be re-purposed to output both text and CSV,  not just for the script&#8217;s running host but for a list of Model IDs? And the answer was a resounding yes on all fronts!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">EA Answers<\/h3>\n\n\n\n<p>So, my fellow Jamf admin I present to you <strong><a href=\"https:\/\/github.com\/brunerd\/jamfTools\/blob\/main\/EAs\/macOSCompatibility.sh\">macOSCompatibility.sh<\/a><\/strong> in its simplest form you just run the script and it will provide ultra-sparse EA output like: <code>&lt;result>10.14 10.15 11&lt;\/result><\/code> this could then be used as a Smart Group criteria. Something like &#8220;macOS Catalina Compatible&#8221; would then match all Macs using <code>LIKE 10.15<\/code> or &#8220;Big Sur Incompatible&#8221; would use <code>NOT LIKE 11<\/code>, of course care would be taken if you were also testing for 10.11 compatibility, however the <code>versionsToCheck<\/code> variable in the script can limit the default range to something useful and speeds things up the less version there are. I hope this helps Jamf admins who have vast unwieldy fleets where hardware can vary wildly across regions or departments,<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">CSV Answers<\/h3>\n\n\n\n<p>Now if you provide a couple arguments like so: <code>.\/macOSCompatibility.sh -c -v ALL ALL > ~\/Desktop\/macOSCompatibilityMatrix.csv<\/code> you will get a pretty spiffy CSV that let&#8217;s you visualize which Mac models over the years have enjoyed the most and least macOS compatibility. This is my favorite mode,  you can use it to assess the OS coverage of past Macs.<\/p>\n\n\n\n<p>See <strong><a href=\"https:\/\/gist.github.com\/brunerd\/d5455b6c509a3aa10ceac62201f70861\">macOSCompatibilityMatrix.csv<\/a><\/strong> for an example of the output. If you bring that CSV into Numbers or Excel you can surely liven it up with some Conditional Formatting! This is the barest of examples:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/macOSCompatibilityMatrix-tiny.png\"><img loading=\"lazy\" decoding=\"async\" width=\"195\" height=\"1024\" src=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/macOSCompatibilityMatrix-tiny-195x1024.png\" alt=\"\" class=\"wp-image-934\" srcset=\"https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/macOSCompatibilityMatrix-tiny-195x1024.png 195w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/macOSCompatibilityMatrix-tiny-57x300.png 57w, https:\/\/www.brunerd.com\/blog\/wp-content\/uploads\/macOSCompatibilityMatrix-tiny.png 268w\" sizes=\"auto, (max-width: 195px) 100vw, 195px\" \/><\/a><figcaption>Can you spot the worst and best values? <\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Text Answers<\/h3>\n\n\n\n<p>If you <em>don&#8217;t<\/em> use the <code>-c<\/code> flag then it&#8217;ll just output in plain or text, like so: <code>.\/macOSCompatibility.sh -v ALL ALL<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>iMacPro1,1: 10.13 10.14 10.15 11\nMacBook1,1: 10.4 10.5 10.6\nMacBook2,1: 10.4 10.5 10.6 10.7\nMacBook3,1: 10.5 10.6 10.7\nMacBook4,1: 10.5 10.6 10.7\nMacBook5,1: 10.5 10.6 10.7 10.8 10.9 10.10 10.11\nMacBook6,1: 10.6 10.7 10.8 10.9 10.10 10.11 10.12 10.13\nMacBook7,1: 10.6 10.7 10.8 10.9 10.10 10.11 10.12 10.13\nMacBook8,1: 10.10 10.11 10.12 10.13 10.14 10.15 11\nMacBook9,1: 10.11 10.12 10.13 10.14 10.15 11\nMacBook10,1: 10.12 10.13 10.14 10.15 11\nMacBookAir1,1: 10.5 10.6 10.7\nMacBookAir2,1: 10.5 10.6 10.7 10.8 10.9 10.10 10.11\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Wrapping Up<\/h3>\n\n\n\n<p>Now, it&#8217;s not totally perfect since some models shared Model IDs (2012 Retina and Non-Retina MacBook Pros for example) but for the most part the Intel Mac Model IDs were <strong>sane<\/strong> compared to the PPC hardware Model IDs: abrupt jumps, overlaps, and re-use across model familes. Blech! I&#8217;m glad Apple &#8220;got religion&#8221; for Model IDs (for the most part) when Intel CPUs came along. I <em>did<\/em> attempt to go back to 10.1-10.3 with PPC hardware but it was such a mess it wasn&#8217;t worth it. However testing Intel, Apple Silicon and VMs against macOS 10.4 &#8211; 11+ seems to have some real use and perhaps you think so too? Thanks for reading!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Compatibility Questions If you work with Macs and Jamf then you know every year there&#8217;s a new per OS Extension Attribute (EA) or Smart Group (SG) recipe to determine if macOS will run on your fleets hardware. However I asked myself: What if a single Extension Attribute script could fill the need, requiring only a [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,19,46,4,12],"tags":[27,20,47,28,25,33,22],"class_list":["post-932","post","type-post","status-publish","format-standard","hentry","category-apple","category-bash","category-jamf","category-os-x","category-scripting","tag-apple","tag-bash","tag-jamf","tag-macintosh","tag-macos","tag-os-x","tag-scripting"],"_links":{"self":[{"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/posts\/932","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/comments?post=932"}],"version-history":[{"count":5,"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/posts\/932\/revisions"}],"predecessor-version":[{"id":939,"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/posts\/932\/revisions\/939"}],"wp:attachment":[{"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/media?parent=932"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/categories?post=932"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.brunerd.com\/blog\/wp-json\/wp\/v2\/tags?post=932"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}