Supported Mac models for Night Shift in Sierra 10.12.4+

Night Shift was introduced in macOS Sierra 10.12.4 (Build 16E144f and Public Beta-1) and is controlled by the CoreBrightness.framework and you’ll need at least one of the following – or later – Mac models:


Apple did not release any information about this. Not just yet, but I know this because I located the checks for it in said framework, and there it checks for matching Mac model names:


Night Shift is however not supported – by Apple – on older Mac models. No. There are checks for minimum requirements, which I looked up with help of:

nm /S*/L*/PrivateFrameworks/CoreBrightness.framework/CoreBrightness|grep _ModelMinVersion

000000000001d490 S _ModelMinVersion

Ok. Now we know the offset. Time to dump the data with help of:

xxd -s 0x1D490 -l 24 /S*/L*/PrivateFrameworks/CoreBrightness.framework/CoreBrightness

0001d490: 0900 0000 0d00 0000 0600 0000 0500 0000
0001d4a0: 0600 0000 0800 0000


I opened the CoreBrightness binary in a hex editor (app) and change the coloured byte that matches with the used hardware. After that I saved the file and copied it to the original location.

The next step is to re-sign the patched framework binary with:

sudo codesign -f -s - /S*/L*/PrivateFrameworks/CoreBrightness.framework/Versions/Current/CoreBrightness

Well. Now you know how I did it, and in case you happen to own a Mac model that isn’t supported, yet, then you could try to patch the matching value in CoreBrightness.framework as some readers here confirmed that this is working for them with older/unsupported hardware.

Note: The colours that I used should help you to find the byte that you need to change.

Anyway. This my friends is how it is done. Have fun now.

Edit: The order of the MacBook Pro and iMac was wrong – see comments. Fixed thanks to the heads up from Thomas and Nicolinux.

Note: You may only use this patch in your script/software/app if the source code is available, preferable on Github, you are not asking for donations, and clearly state that this is my work. Thank you.


133 thoughts on “Supported Mac models for Night Shift in Sierra 10.12.4+

  1. Hi, I have the problem that I want to DISABLE nightshift again, due color depth degradation (it looks like a 16bit color depth mode on windows).. I used the tool FixEDID, but afterwards removed that DisplayMergeNub.kext again. Still, nightshift is selectable on my iMac14,2 hack. How can I DISABLE nightshift in a way that the whole mechanism is not used at all from beginning of the login screen?

    I tried to patch corebrightness so it does EXCLUDE iMac14,2, which one results in a crash in the display properties…

    Please help!

  2. Followed the instructions but for 10.12.5. I am presented with a code signing error which was not present under 10.12.4. I’ll see if anyone else experiences the same hiccup.

  3. Hi,
    I have lost NightShift on my MacPro3,1 when I updated Mac Os from 12.4 to 12.5. It seems that under Sierra 12.5 the offset has changed… in my machine it’s now 00 01 E2 40.

  4. Hello, its really annoying I got 2 expensive big new screens for 2 machines, because my vision is really bad.
    Now I got this ugly dark yellowish reddish screen tint, terrible I need bright !!! Calibration doesn’t fix it, not enough headroom… =(((
    Just want to be able to turn Night Shift off for good, and was hoping this will fix it. Ridiculous that they enable it but don’t let you turn it off.
    But I can’t even after fixing all, from the Terminal output matching pieces in the binary bytes to 06.
    Not 100% certain if I did it right, as I understand it would be 06 for Mac Pro 6 and the others I don’t have to change.
    Im on a Mac Pro 2010, any help would be very very much appreciated.

  5. Hi Pike, i used your hack for some versions of Sierra and some betas of high sierra, but i think since 17A315i the patching resulted in an unusable monitor prefpane… do you have any tip what has changed there?

  6. Hello Pike

    First of all tell you that I really like the articles you write. They show in a clear and simple way advanced concepts related to Apple products.

    After reading your article, I created a script to perform the framework patch automatically. It basically reads the model of the computer using ioreg and replaces it with Perl.

    When doing the first tests in Sierra 10.12.6 I noticed that in the article indicate two different paths:

    Path 1) /S*/L*/PrivateFrameworks/CoreBrightness.framework/CoreBrightness
    Path 2) /S*/L*/PrivateFrameworks/CoreBrightness.framework/Versions/Current/CoreBrightness

    If you apply the patch on the first path, and sign the second path, a crash occurs when you try to open the screen preferences. I don’t know if it’s a mistake, or that I didn’t understand the article.

    I think the right way, at least in MacOS Sierra 10.12.5 and 10.12.6, is to perform the patch and signature of the second path. I’d appreciate if this is right.

    Thank you for sharing your knowledge

    Best regards

  7. Now on High Sierra PB 6 and trying to get Nightshift back working but having been used to your method to replace the it seems thing have changed and the result of the xxd is
    0001e260: 0100 0000 0100 0000 0100 0000 0100 0000
    0001e270: 0100 0000 0100 0000
    so is it even possible now to get Nightshift back

      • Hi Yeah I did check against another earlier install of High Sierra (PB 3) ran the commands in terminal to check if i put the right commands in and it came up with the usual list of machine figures 0900 etc.
        So went back to the PB 6 install and re did the terminal commands but still comes up with the 0100 numbers listed as above.


      • Works for me with DP-7 (17A352a):

        nm /S*/L*/PrivateFrameworks/CoreBrightness.framework/CoreBrightness|grep _ModelMinVersion
        0000000000020e00 S _ModelMinVersion
        xxd -s 0x20e00 -l 24 /S*/L*/PrivateFrameworks/CoreBrightness.framework/CoreBrightness
        00020e00: 0900 0000 0d00 0000 0600 0000 0500 0000  ................
        00020e10: 0600 0000 0800 0000                      ........
      • Hello again, I have worked out why I was getting a different offset and thus the 0100 numbers.
        I had forgotten that had been installed, thus changing the CoreBrightness framework. Replaced the CoreBrightness framework with the original one and re did your procedure and now am getting the correct offset and number sequence.
        sorry for all the bother.


    • Yes. You need to replace the corresponding value (see blog article) with the one of your model identifier; see System Information -> Hardware -> Model Identifier: iMacNN,X

      Don’t forget to convert the decimal value into hexadecimal. You can do that with help of the

      • My result:

        nm /S*/L*/PrivateFrameworks/CoreBrightness.framework/CoreBrightness|grep _ModelMinVersion
        0000000000020e00 S _ModelMinVersion

        xxd -s 0x20e00 -l 24 /S*/L*/PrivateFrameworks/CoreBrightness.framework/CoreBrightness
        00020e00: 0900 0000 0d00 0000 0600 0000 0500 0000 …………….
        00020e10: 0600 0000 0800 0000 ……..

        System Information -> Hardware -> Model Identifier: MacBookPro7,1

  8. did something change again in db8 or have i missed something:
    i did change

    00020e00: 0900 0000 0d00 0000 0600 0000 0500 0000 …………….
    00020e10: 0600 0000 0800 0000 ……..

    00020e00: 0600 0000 0d00 0000 0600 0000 0500 0000 …………….
    00020e10: 0600 0000 0800 0000 ……..

    for my MBP 6,1, re-signed, rebooted and: nothing. Could anybody confirm?

    Edit: never mind, for some reason /S*/L*/PrivateFrameworks/CoreBrightness.framework/Versions/Current/CoreBrightness
    was not present – and therefore NS did not work. ln -s and it works!


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s