├── Changelog.md ├── NightShiftEnabler ├── kern_start.cpp ├── kern_nse.hpp ├── Info.plist └── kern_nse.cpp ├── README.md ├── LICENSE.txt └── NightShiftEnabler.xcodeproj └── project.pbxproj /Changelog.md: -------------------------------------------------------------------------------- 1 | NightShiftEnabler Changelog 2 | =========================== 3 | #### v1.1.1 4 | - Fix Monterey compatibility 5 | 6 | #### v1.1.0 7 | - Rewrite to use basic Lilu userspace patching APIs for Big Sur compatibility 8 | 9 | #### v1.0.0 10 | - Initial release 11 | -------------------------------------------------------------------------------- /NightShiftEnabler/kern_start.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // kern_start.cpp 3 | // NSE 4 | // 5 | // Copyright © 2021 cdf. All rights reserved. 6 | // 7 | 8 | #include 9 | #include 10 | 11 | #include "kern_nse.hpp" 12 | 13 | static NSE nse; 14 | 15 | const char *bootargOff[] { 16 | "-nseoff" 17 | }; 18 | 19 | const char *bootargDebug[] { 20 | "-nsedbg" 21 | }; 22 | 23 | const char *bootargBeta[] { 24 | "-nsebeta" 25 | }; 26 | 27 | PluginConfiguration ADDPR(config) { 28 | xStringify(PRODUCT_NAME), 29 | parseModuleVersion(xStringify(MODULE_VERSION)), 30 | LiluAPI::AllowNormal, 31 | bootargOff, 32 | arrsize(bootargOff), 33 | bootargDebug, 34 | arrsize(bootargDebug), 35 | bootargBeta, 36 | arrsize(bootargBeta), 37 | KernelVersion::Sierra, 38 | KernelVersion::Monterey, 39 | []() { 40 | nse.init(); 41 | } 42 | }; 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | NightShiftEnabler 2 | ================= 3 | 4 | A [Lilu](https://github.com/acidanthera/Lilu) plugin for enabling Night Shift on unsupported Mac models. The plugin is compatible with Lilu 1.5.1 or later and macOS Sierra 10.12.4 or later. 5 | 6 | #### Historical Note 7 | 8 | NightShiftEnabler is a simple successor to a now apparently unmaintained [unlocker plugin](https://github.com/0xFireWolf/NightShiftUnlocker). 9 | 10 | #### Implementation 11 | 12 | The current version uses a [patch](https://pikeralpha.wordpress.com/2017/01/30/4398/) developed by Pike R. Alpha and is based on the "unfair" component of [WhateverGreen](https://github.com/acidanthera/WhateverGreen), which uses a patching strategy originally developed for [Polaris22Fixup](https://github.com/osy/Polaris22Fixup). 13 | 14 | #### Configuration 15 | 16 | - `-nsedbg` enables debug printing (available in DEBUG binaries) 17 | - `-nseoff` disables the plugin 18 | - `-nsebeta` enables the plugin on macOS versions newer than Monterey 19 | 20 | #### Credits 21 | 22 | - [Apple](https://www.apple.com) for macOS 23 | - [vit9696](https://github.com/vit9696) for [Lilu](https://github.com/vit9696/Lilu) and [WhateverGreen](https://github.com/acidanthera/WhateverGreen) 24 | - [Pike R. Alpha](https://github.com/Piker-Alpha) for the Night Shift [patch](https://pikeralpha.wordpress.com/2017/01/30/4398/) 25 | - [osy](https://github.com/osy) for [Polaris22Fixup](https://github.com/osy/Polaris22Fixup) 26 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2020, cdf 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /NightShiftEnabler/kern_nse.hpp: -------------------------------------------------------------------------------- 1 | // 2 | // kern_nse.hpp 3 | // NSE 4 | // 5 | // Copyright © 2021 cdf. All rights reserved. 6 | // 7 | 8 | #ifndef kern_nse_hpp 9 | #define kern_nse_hpp 10 | 11 | #include 12 | 13 | class NSE { 14 | public: 15 | void init(); 16 | void deinit(); 17 | 18 | /** 19 | * Property patching routine 20 | * 21 | * @param patcher KernelPatcher instance 22 | */ 23 | void processKernel(KernelPatcher &patcher); 24 | 25 | private: 26 | /** 27 | * Private self instance for callbacks 28 | */ 29 | static NSE *callbackNSE; 30 | 31 | /** 32 | * Function for patching _ModelMinVersionBLR 33 | */ 34 | static void PatchModelMinVersionBLR(const void *data, size_t size, const char (&path)[PATH_MAX]); 35 | 36 | /** 37 | * Codesign page validation wrapper used for userspace patching for pre-Big Sur systems 38 | */ 39 | static void csValidateRange(vnode *vp, memory_object_t pager, memory_object_offset_t page_offset, const void *data, vm_size_t size, unsigned *result); 40 | 41 | /** 42 | * Codesign page validation wrapper used for userspace patching for Big Sur systems 43 | */ 44 | static void csValidatePage(vnode *vp, memory_object_t pager, memory_object_offset_t page_offset, const void *data, int *validated_p, int *tainted_p, int *nx_p); 45 | 46 | /** 47 | * Original codesign page or range validation pointer 48 | */ 49 | mach_vm_address_t orgCsValidate {0}; 50 | 51 | /** 52 | * Current shared cache 53 | */ 54 | const char *sharedCachePath {nullptr}; 55 | }; 56 | 57 | #endif /* kern_nse */ 58 | -------------------------------------------------------------------------------- /NightShiftEnabler/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | KEXT 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | IOKitPersonalities 22 | 23 | com.cdf.NightShiftEnabler 24 | 25 | CFBundleIdentifier 26 | $(PRODUCT_BUNDLE_IDENTIFIER) 27 | IOClass 28 | $(PRODUCT_NAME:rfc1034identifier) 29 | IOMatchCategory 30 | $(PRODUCT_NAME:rfc1034identifier) 31 | IOProviderClass 32 | IOResources 33 | IOResourceMatch 34 | IOKit 35 | 36 | 37 | NSHumanReadableCopyright 38 | Copyright © 2020 cdf. All rights reserved. 39 | OSBundleCompatibleVersion 40 | 1.0 41 | OSBundleLibraries 42 | 43 | as.vit9696.Lilu 44 | 1.5.1 45 | com.apple.kpi.bsd 46 | 12.0.0 47 | com.apple.kpi.dsep 48 | 12.0.0 49 | com.apple.kpi.iokit 50 | 12.0.0 51 | com.apple.kpi.libkern 52 | 12.0.0 53 | com.apple.kpi.mach 54 | 12.0.0 55 | com.apple.kpi.unsupported 56 | 12.0.0 57 | 58 | OSBundleRequired 59 | Root 60 | 61 | 62 | -------------------------------------------------------------------------------- /NightShiftEnabler/kern_nse.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // kern_nse.cpp 3 | // NSE 4 | // 5 | // Copyright © 2021 cdf. All rights reserved. 6 | // 7 | 8 | #include 9 | 10 | #include "kern_nse.hpp" 11 | 12 | NSE *NSE::callbackNSE; 13 | 14 | void NSE::init() { 15 | callbackNSE = this; 16 | 17 | if (getKernelVersion() == KernelVersion::Sierra && getKernelMinorVersion() < 4) 18 | return; 19 | 20 | lilu.onPatcherLoadForce([](void *user, KernelPatcher &patcher) { 21 | static_cast(user)->processKernel(patcher); 22 | }, this); 23 | } 24 | 25 | void NSE::PatchModelMinVersionBLR(const void *data, size_t size, const char (&path)[PATH_MAX]) { 26 | if (UserPatcher::matchSharedCachePath(path)) { 27 | 28 | if ((getKernelVersion() == KernelVersion::HighSierra && getKernelMinorVersion() >= 2) || getKernelVersion() >= KernelVersion::Mojave) { 29 | static const uint8_t find[28] = { 30 | 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 31 | 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00 32 | }; 33 | static const uint8_t repl[28] = { 34 | 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 35 | 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 36 | }; 37 | if (UNLIKELY(KernelPatcher::findAndReplace(const_cast(data), size, find, sizeof(find), repl, sizeof(repl)))) 38 | DBGLOG("nse", "patched Night Shift"); 39 | 40 | } else { 41 | static const uint8_t find[24] = { 42 | 0x09, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 43 | 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00 44 | }; 45 | static const uint8_t repl[24] = { 46 | 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 47 | 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 48 | }; 49 | if (UNLIKELY(KernelPatcher::findAndReplace(const_cast(data), size, find, sizeof(find), repl, sizeof(repl)))) 50 | DBGLOG("nse", "patched Night Shift"); 51 | } 52 | } 53 | } 54 | 55 | void NSE::csValidateRange(vnode *vp, memory_object_t pager, memory_object_offset_t offset, const void *data, vm_size_t size, unsigned *result) { 56 | FunctionCast(csValidateRange, callbackNSE->orgCsValidate)(vp, pager, offset, data, size, result); 57 | 58 | char path[PATH_MAX]; 59 | int pathlen = PATH_MAX; 60 | if (vn_getpath(vp, path, &pathlen) == 0) 61 | PatchModelMinVersionBLR(data, size, path); 62 | } 63 | 64 | void NSE::csValidatePage(vnode *vp, memory_object_t pager, memory_object_offset_t offset, const void *data, int *validated_p, int *tainted_p, int *nx_p) { 65 | FunctionCast(csValidatePage, callbackNSE->orgCsValidate)(vp, pager, offset, data, validated_p, tainted_p, nx_p); 66 | 67 | char path[PATH_MAX]; 68 | int pathlen = PATH_MAX; 69 | if (vn_getpath(vp, path, &pathlen) == 0) 70 | PatchModelMinVersionBLR(data, PAGE_SIZE, path); 71 | } 72 | 73 | void NSE::processKernel(KernelPatcher &patcher) { 74 | DBGLOG("nse", "activating"); 75 | 76 | if (getKernelVersion() >= KernelVersion::BigSur) { 77 | KernelPatcher::RouteRequest csRoute("_cs_validate_page", csValidatePage, orgCsValidate); 78 | if (!patcher.routeMultipleLong(KernelPatcher::KernelID, &csRoute, 1)) 79 | SYSLOG("nse", "failed to route cs validation pages"); 80 | 81 | } else { 82 | KernelPatcher::RouteRequest csRoute("_cs_validate_range", csValidateRange, orgCsValidate); 83 | if (!patcher.routeMultipleLong(KernelPatcher::KernelID, &csRoute, 1)) 84 | SYSLOG("nse", "failed to route cs validation pages"); 85 | } 86 | } 87 | 88 | void NSE::deinit() { 89 | 90 | } 91 | -------------------------------------------------------------------------------- /NightShiftEnabler.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0F2DBBC6243CEFA00017A37C /* Changelog.md in Resources */ = {isa = PBXBuildFile; fileRef = 0F2DBBC3243CEFA00017A37C /* Changelog.md */; }; 11 | 0F2DBBC7243CEFA00017A37C /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 0F2DBBC4243CEFA00017A37C /* README.md */; }; 12 | 0F2DBBC8243CEFA00017A37C /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = 0F2DBBC5243CEFA00017A37C /* LICENSE.txt */; }; 13 | 0F848D9A23FC6A7E00FEC38C /* kern_nse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F848D9823FC6A7E00FEC38C /* kern_nse.cpp */; }; 14 | 0F848D9B23FC6A7E00FEC38C /* kern_nse.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0F848D9923FC6A7E00FEC38C /* kern_nse.hpp */; }; 15 | 1C748C2D1C21952C0024EED2 /* kern_start.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C748C2C1C21952C0024EED2 /* kern_start.cpp */; }; 16 | CE405ED91E4A080700AA0B3D /* plugin_start.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CE405ED81E4A080700AA0B3D /* plugin_start.cpp */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXCopyFilesBuildPhase section */ 20 | 1C642F521C8F157A006B4C51 /* CopyFiles */ = { 21 | isa = PBXCopyFilesBuildPhase; 22 | buildActionMask = 2147483647; 23 | dstPath = ""; 24 | dstSubfolderSpec = 13; 25 | files = ( 26 | ); 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXCopyFilesBuildPhase section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 0F2DBBC3243CEFA00017A37C /* Changelog.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = Changelog.md; sourceTree = SOURCE_ROOT; }; 33 | 0F2DBBC4243CEFA00017A37C /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = SOURCE_ROOT; }; 34 | 0F2DBBC5243CEFA00017A37C /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = SOURCE_ROOT; }; 35 | 0F848D9823FC6A7E00FEC38C /* kern_nse.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = kern_nse.cpp; sourceTree = ""; }; 36 | 0F848D9923FC6A7E00FEC38C /* kern_nse.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_nse.hpp; sourceTree = ""; }; 37 | 0FB70CFB2145D1E8005BD386 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 38 | 1C748C271C21952C0024EED2 /* NightShiftEnabler.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NightShiftEnabler.kext; sourceTree = BUILT_PRODUCTS_DIR; }; 39 | 1C748C2C1C21952C0024EED2 /* kern_start.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = kern_start.cpp; sourceTree = ""; }; 40 | CE405EBA1E49DD7100AA0B3D /* kern_compression.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_compression.hpp; sourceTree = ""; }; 41 | CE405EBB1E49DD7100AA0B3D /* kern_disasm.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_disasm.hpp; sourceTree = ""; }; 42 | CE405EBC1E49DD7100AA0B3D /* kern_file.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_file.hpp; sourceTree = ""; }; 43 | CE405EBD1E49DD7100AA0B3D /* kern_iokit.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_iokit.hpp; sourceTree = ""; }; 44 | CE405EBE1E49DD7100AA0B3D /* kern_mach.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_mach.hpp; sourceTree = ""; }; 45 | CE405EBF1E49DD7100AA0B3D /* kern_patcher.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_patcher.hpp; sourceTree = ""; }; 46 | CE405EC01E49DD7100AA0B3D /* kern_policy.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_policy.hpp; sourceTree = ""; }; 47 | CE405EC31E49DD7100AA0B3D /* kern_user.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_user.hpp; sourceTree = ""; }; 48 | CE405EC41E49DD7100AA0B3D /* kern_util.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_util.hpp; sourceTree = ""; }; 49 | CE405EC61E49DD7100AA0B3D /* LegacyIOService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LegacyIOService.h; sourceTree = ""; }; 50 | CE405ECF1E49EC9100AA0B3D /* kern_config.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = kern_config.hpp; sourceTree = ""; }; 51 | CE405ED21E49F9FC00AA0B3D /* kern_api.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_api.hpp; sourceTree = ""; }; 52 | CE405ED81E4A080700AA0B3D /* plugin_start.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = plugin_start.cpp; sourceTree = ""; }; 53 | CE405EDA1E4A080F00AA0B3D /* plugin_start.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = plugin_start.hpp; sourceTree = ""; }; 54 | /* End PBXFileReference section */ 55 | 56 | /* Begin PBXGroup section */ 57 | 0F2DBBCA243CF1DE0017A37C /* Docs */ = { 58 | isa = PBXGroup; 59 | children = ( 60 | 0F2DBBC5243CEFA00017A37C /* LICENSE.txt */, 61 | 0F2DBBC3243CEFA00017A37C /* Changelog.md */, 62 | 0F2DBBC4243CEFA00017A37C /* README.md */, 63 | ); 64 | name = Docs; 65 | sourceTree = ""; 66 | }; 67 | 0FDD21652718E61B0081A2E7 /* Frameworks */ = { 68 | isa = PBXGroup; 69 | children = ( 70 | ); 71 | name = Frameworks; 72 | sourceTree = ""; 73 | }; 74 | 1C748C1D1C21952C0024EED2 = { 75 | isa = PBXGroup; 76 | children = ( 77 | 0F2DBBCA243CF1DE0017A37C /* Docs */, 78 | CE405EC81E49DD7B00AA0B3D /* SDK */, 79 | 1C748C291C21952C0024EED2 /* NightShiftEnabler */, 80 | 1C748C281C21952C0024EED2 /* Products */, 81 | 0FDD21652718E61B0081A2E7 /* Frameworks */, 82 | ); 83 | sourceTree = ""; 84 | }; 85 | 1C748C281C21952C0024EED2 /* Products */ = { 86 | isa = PBXGroup; 87 | children = ( 88 | 1C748C271C21952C0024EED2 /* NightShiftEnabler.kext */, 89 | ); 90 | name = Products; 91 | sourceTree = ""; 92 | }; 93 | 1C748C291C21952C0024EED2 /* NightShiftEnabler */ = { 94 | isa = PBXGroup; 95 | children = ( 96 | 1C748C2C1C21952C0024EED2 /* kern_start.cpp */, 97 | 0F848D9823FC6A7E00FEC38C /* kern_nse.cpp */, 98 | 0F848D9923FC6A7E00FEC38C /* kern_nse.hpp */, 99 | 0FB70CFB2145D1E8005BD386 /* Info.plist */, 100 | ); 101 | path = NightShiftEnabler; 102 | sourceTree = ""; 103 | }; 104 | CE405EB91E49DD7100AA0B3D /* Headers */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | CE405ED21E49F9FC00AA0B3D /* kern_api.hpp */, 108 | CE405ECF1E49EC9100AA0B3D /* kern_config.hpp */, 109 | CE405EBA1E49DD7100AA0B3D /* kern_compression.hpp */, 110 | CE405EBB1E49DD7100AA0B3D /* kern_disasm.hpp */, 111 | CE405EBC1E49DD7100AA0B3D /* kern_file.hpp */, 112 | CE405EBD1E49DD7100AA0B3D /* kern_iokit.hpp */, 113 | CE405EBE1E49DD7100AA0B3D /* kern_mach.hpp */, 114 | CE405EBF1E49DD7100AA0B3D /* kern_patcher.hpp */, 115 | CE405EC01E49DD7100AA0B3D /* kern_policy.hpp */, 116 | CE405EC31E49DD7100AA0B3D /* kern_user.hpp */, 117 | CE405EC41E49DD7100AA0B3D /* kern_util.hpp */, 118 | CE405EDA1E4A080F00AA0B3D /* plugin_start.hpp */, 119 | ); 120 | name = Headers; 121 | path = Lilu.kext/Contents/Resources/Headers; 122 | sourceTree = SOURCE_ROOT; 123 | }; 124 | CE405EC51E49DD7100AA0B3D /* Library */ = { 125 | isa = PBXGroup; 126 | children = ( 127 | CE405EC61E49DD7100AA0B3D /* LegacyIOService.h */, 128 | CE405ED81E4A080700AA0B3D /* plugin_start.cpp */, 129 | ); 130 | name = Library; 131 | path = Lilu.kext/Contents/Resources/Library; 132 | sourceTree = SOURCE_ROOT; 133 | }; 134 | CE405EC81E49DD7B00AA0B3D /* SDK */ = { 135 | isa = PBXGroup; 136 | children = ( 137 | CE405EB91E49DD7100AA0B3D /* Headers */, 138 | CE405EC51E49DD7100AA0B3D /* Library */, 139 | ); 140 | name = SDK; 141 | sourceTree = ""; 142 | }; 143 | /* End PBXGroup section */ 144 | 145 | /* Begin PBXHeadersBuildPhase section */ 146 | 1C748C241C21952C0024EED2 /* Headers */ = { 147 | isa = PBXHeadersBuildPhase; 148 | buildActionMask = 2147483647; 149 | files = ( 150 | 0F848D9B23FC6A7E00FEC38C /* kern_nse.hpp in Headers */, 151 | ); 152 | runOnlyForDeploymentPostprocessing = 0; 153 | }; 154 | /* End PBXHeadersBuildPhase section */ 155 | 156 | /* Begin PBXNativeTarget section */ 157 | 1C748C261C21952C0024EED2 /* NightShiftEnabler */ = { 158 | isa = PBXNativeTarget; 159 | buildConfigurationList = 1C748C311C21952C0024EED2 /* Build configuration list for PBXNativeTarget "NightShiftEnabler" */; 160 | buildPhases = ( 161 | 1C748C221C21952C0024EED2 /* Sources */, 162 | 1C748C241C21952C0024EED2 /* Headers */, 163 | 1C748C251C21952C0024EED2 /* Resources */, 164 | 1C642F521C8F157A006B4C51 /* CopyFiles */, 165 | CEF0765B204C5BAD00AC511E /* Archive */, 166 | ); 167 | buildRules = ( 168 | ); 169 | dependencies = ( 170 | ); 171 | name = NightShiftEnabler; 172 | productName = NightShiftEnabler; 173 | productReference = 1C748C271C21952C0024EED2 /* NightShiftEnabler.kext */; 174 | productType = "com.apple.product-type.kernel-extension"; 175 | }; 176 | /* End PBXNativeTarget section */ 177 | 178 | /* Begin PBXProject section */ 179 | 1C748C1E1C21952C0024EED2 /* Project object */ = { 180 | isa = PBXProject; 181 | attributes = { 182 | LastUpgradeCheck = 1020; 183 | ORGANIZATIONNAME = ""; 184 | TargetAttributes = { 185 | 1C748C261C21952C0024EED2 = { 186 | CreatedOnToolsVersion = 7.2; 187 | }; 188 | }; 189 | }; 190 | buildConfigurationList = 1C748C211C21952C0024EED2 /* Build configuration list for PBXProject "NightShiftEnabler" */; 191 | compatibilityVersion = "Xcode 9.3"; 192 | developmentRegion = en; 193 | hasScannedForEncodings = 0; 194 | knownRegions = ( 195 | en, 196 | Base, 197 | ); 198 | mainGroup = 1C748C1D1C21952C0024EED2; 199 | productRefGroup = 1C748C281C21952C0024EED2 /* Products */; 200 | projectDirPath = ""; 201 | projectRoot = ""; 202 | targets = ( 203 | 1C748C261C21952C0024EED2 /* NightShiftEnabler */, 204 | ); 205 | }; 206 | /* End PBXProject section */ 207 | 208 | /* Begin PBXResourcesBuildPhase section */ 209 | 1C748C251C21952C0024EED2 /* Resources */ = { 210 | isa = PBXResourcesBuildPhase; 211 | buildActionMask = 2147483647; 212 | files = ( 213 | 0F2DBBC8243CEFA00017A37C /* LICENSE.txt in Resources */, 214 | 0F2DBBC7243CEFA00017A37C /* README.md in Resources */, 215 | 0F2DBBC6243CEFA00017A37C /* Changelog.md in Resources */, 216 | ); 217 | runOnlyForDeploymentPostprocessing = 0; 218 | }; 219 | /* End PBXResourcesBuildPhase section */ 220 | 221 | /* Begin PBXShellScriptBuildPhase section */ 222 | CEF0765B204C5BAD00AC511E /* Archive */ = { 223 | isa = PBXShellScriptBuildPhase; 224 | buildActionMask = 2147483647; 225 | files = ( 226 | ); 227 | inputPaths = ( 228 | ); 229 | name = Archive; 230 | outputPaths = ( 231 | ); 232 | runOnlyForDeploymentPostprocessing = 0; 233 | shellPath = /bin/bash; 234 | shellScript = "cd \"${TARGET_BUILD_DIR}\"\n\ndist=(\"$FULL_PRODUCT_NAME\")\nif [ -d \"$DWARF_DSYM_FILE_NAME\" ]; then dist+=(\"$DWARF_DSYM_FILE_NAME\"); fi\n\narchive=\"${PRODUCT_NAME}-${MODULE_VERSION}-$(echo $CONFIGURATION | tr /a-z/ /A-Z/).zip\"\nrm -rf *.zip\nif [ \"$CONFIGURATION\" == \"Release\" ]; then\n strip -x -T \"${EXECUTABLE_PATH}\" &>/dev/null || strip -x \"${EXECUTABLE_PATH}\"\nfi\nzip -qry \"${archive}\" \"${dist[@]}\"\n"; 235 | }; 236 | /* End PBXShellScriptBuildPhase section */ 237 | 238 | /* Begin PBXSourcesBuildPhase section */ 239 | 1C748C221C21952C0024EED2 /* Sources */ = { 240 | isa = PBXSourcesBuildPhase; 241 | buildActionMask = 2147483647; 242 | files = ( 243 | CE405ED91E4A080700AA0B3D /* plugin_start.cpp in Sources */, 244 | 1C748C2D1C21952C0024EED2 /* kern_start.cpp in Sources */, 245 | 0F848D9A23FC6A7E00FEC38C /* kern_nse.cpp in Sources */, 246 | ); 247 | runOnlyForDeploymentPostprocessing = 0; 248 | }; 249 | /* End PBXSourcesBuildPhase section */ 250 | 251 | /* Begin XCBuildConfiguration section */ 252 | 1C748C2F1C21952C0024EED2 /* Debug */ = { 253 | isa = XCBuildConfiguration; 254 | buildSettings = { 255 | ALWAYS_SEARCH_USER_PATHS = NO; 256 | ARCHS = x86_64; 257 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 258 | CLANG_CXX_LANGUAGE_STANDARD = "c++1y"; 259 | CLANG_CXX_LIBRARY = "libc++"; 260 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 261 | CLANG_WARN_BOOL_CONVERSION = YES; 262 | CLANG_WARN_COMMA = YES; 263 | CLANG_WARN_CONSTANT_CONVERSION = YES; 264 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 265 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 266 | CLANG_WARN_EMPTY_BODY = YES; 267 | CLANG_WARN_ENUM_CONVERSION = YES; 268 | CLANG_WARN_INFINITE_RECURSION = YES; 269 | CLANG_WARN_INT_CONVERSION = YES; 270 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 271 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 272 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 273 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 274 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 275 | CLANG_WARN_STRICT_PROTOTYPES = YES; 276 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 277 | CLANG_WARN_UNREACHABLE_CODE = YES; 278 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 279 | DEBUG_INFORMATION_FORMAT = dwarf; 280 | ENABLE_STRICT_OBJC_MSGSEND = YES; 281 | ENABLE_TESTABILITY = YES; 282 | GCC_C_LANGUAGE_STANDARD = c11; 283 | GCC_NO_COMMON_BLOCKS = YES; 284 | GCC_OPTIMIZATION_LEVEL = 0; 285 | GCC_PREPROCESSOR_DEFINITIONS = ( 286 | "DEBUG=1", 287 | "$(inherited)", 288 | ); 289 | GCC_SYMBOLS_PRIVATE_EXTERN = YES; 290 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 291 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 292 | GCC_WARN_UNDECLARED_SELECTOR = YES; 293 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 294 | GCC_WARN_UNUSED_FUNCTION = YES; 295 | GCC_WARN_UNUSED_VARIABLE = YES; 296 | KERNEL_EXTENSION_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/MacKernelSDK/Headers"; 297 | KERNEL_FRAMEWORK_HEADERS = "$(PROJECT_DIR)/MacKernelSDK/Headers"; 298 | ONLY_ACTIVE_ARCH = YES; 299 | SDKROOT = macosx; 300 | }; 301 | name = Debug; 302 | }; 303 | 1C748C301C21952C0024EED2 /* Release */ = { 304 | isa = XCBuildConfiguration; 305 | buildSettings = { 306 | ALWAYS_SEARCH_USER_PATHS = NO; 307 | ARCHS = x86_64; 308 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 309 | CLANG_CXX_LANGUAGE_STANDARD = "c++1y"; 310 | CLANG_CXX_LIBRARY = "libc++"; 311 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 312 | CLANG_WARN_BOOL_CONVERSION = YES; 313 | CLANG_WARN_COMMA = YES; 314 | CLANG_WARN_CONSTANT_CONVERSION = YES; 315 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 316 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 317 | CLANG_WARN_EMPTY_BODY = YES; 318 | CLANG_WARN_ENUM_CONVERSION = YES; 319 | CLANG_WARN_INFINITE_RECURSION = YES; 320 | CLANG_WARN_INT_CONVERSION = YES; 321 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 322 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 323 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 324 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 325 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 326 | CLANG_WARN_STRICT_PROTOTYPES = YES; 327 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 328 | CLANG_WARN_UNREACHABLE_CODE = YES; 329 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 330 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 331 | ENABLE_STRICT_OBJC_MSGSEND = YES; 332 | GCC_C_LANGUAGE_STANDARD = c11; 333 | GCC_NO_COMMON_BLOCKS = YES; 334 | GCC_OPTIMIZATION_LEVEL = 3; 335 | GCC_SYMBOLS_PRIVATE_EXTERN = YES; 336 | GCC_UNROLL_LOOPS = YES; 337 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 338 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 339 | GCC_WARN_UNDECLARED_SELECTOR = YES; 340 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 341 | GCC_WARN_UNUSED_FUNCTION = YES; 342 | GCC_WARN_UNUSED_VARIABLE = YES; 343 | KERNEL_EXTENSION_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/MacKernelSDK/Headers"; 344 | KERNEL_FRAMEWORK_HEADERS = "$(PROJECT_DIR)/MacKernelSDK/Headers"; 345 | SDKROOT = macosx; 346 | }; 347 | name = Release; 348 | }; 349 | 1C748C321C21952C0024EED2 /* Debug */ = { 350 | isa = XCBuildConfiguration; 351 | buildSettings = { 352 | CLANG_ENABLE_OBJC_WEAK = YES; 353 | CODE_SIGN_IDENTITY = ""; 354 | CODE_SIGN_STYLE = Manual; 355 | COPY_PHASE_STRIP = NO; 356 | CURRENT_PROJECT_VERSION = 1.1.1; 357 | DEPLOYMENT_POSTPROCESSING = YES; 358 | DEVELOPMENT_TEAM = ""; 359 | GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS = NO; 360 | GCC_ENABLE_KERNEL_DEVELOPMENT = NO; 361 | GCC_GENERATE_DEBUGGING_SYMBOLS = NO; 362 | GCC_PREPROCESSOR_DEFINITIONS = ( 363 | "MODULE_VERSION=$(MODULE_VERSION)", 364 | "PRODUCT_NAME=$(PRODUCT_NAME)", 365 | "$(inherited)", 366 | ); 367 | HEADER_SEARCH_PATHS = "${PROJECT_DIR}/Lilu.kext/Contents/Resources"; 368 | INFOPLIST_FILE = "$(SRCROOT)/NightShiftEnabler/Info.plist"; 369 | KERNEL_EXTENSION_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/MacKernelSDK/Headers"; 370 | KERNEL_FRAMEWORK_HEADERS = "$(PROJECT_DIR)/MacKernelSDK/Headers"; 371 | LIBRARY_SEARCH_PATHS = ( 372 | "$(inherited)", 373 | "$(PROJECT_DIR)/MacKernelSDK/Library/x86_64", 374 | ); 375 | MACOSX_DEPLOYMENT_TARGET = 10.13; 376 | MARKETING_VERSION = 1.1.1; 377 | MODULE_NAME = com.cdf.NightShiftEnabler; 378 | MODULE_START = "$(PRODUCT_NAME)_kern_start"; 379 | MODULE_STOP = "$(PRODUCT_NAME)_kern_stop"; 380 | MODULE_VERSION = 1.1.1; 381 | OTHER_CFLAGS = ( 382 | "-mmmx", 383 | "-msse", 384 | "-msse2", 385 | "-msse3", 386 | "-mfpmath=sse", 387 | "-mssse3", 388 | "-ftree-vectorize", 389 | "-fno-non-call-exceptions", 390 | "-fno-builtin", 391 | "-fno-asynchronous-unwind-tables", 392 | "-Wno-unknown-warning-option", 393 | "-Wno-ossharedptr-misuse", 394 | "-Wno-vla", 395 | ); 396 | OTHER_LDFLAGS = "-static"; 397 | PRODUCT_BUNDLE_IDENTIFIER = "$(MODULE_NAME)"; 398 | PRODUCT_NAME = "$(TARGET_NAME)"; 399 | WRAPPER_EXTENSION = kext; 400 | }; 401 | name = Debug; 402 | }; 403 | 1C748C331C21952C0024EED2 /* Release */ = { 404 | isa = XCBuildConfiguration; 405 | buildSettings = { 406 | CLANG_ENABLE_OBJC_WEAK = YES; 407 | CODE_SIGN_IDENTITY = ""; 408 | CODE_SIGN_STYLE = Manual; 409 | CURRENT_PROJECT_VERSION = 1.1.1; 410 | DEAD_CODE_STRIPPING = YES; 411 | DEPLOYMENT_POSTPROCESSING = YES; 412 | DEVELOPMENT_TEAM = ""; 413 | GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS = NO; 414 | GCC_ENABLE_KERNEL_DEVELOPMENT = NO; 415 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES; 416 | GCC_PREPROCESSOR_DEFINITIONS = ( 417 | "MODULE_VERSION=$(MODULE_VERSION)", 418 | "PRODUCT_NAME=$(PRODUCT_NAME)", 419 | ); 420 | HEADER_SEARCH_PATHS = "${PROJECT_DIR}/Lilu.kext/Contents/Resources"; 421 | INFOPLIST_FILE = "$(SRCROOT)/NightShiftEnabler/Info.plist"; 422 | KERNEL_EXTENSION_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/MacKernelSDK/Headers"; 423 | KERNEL_FRAMEWORK_HEADERS = "$(PROJECT_DIR)/MacKernelSDK/Headers"; 424 | LIBRARY_SEARCH_PATHS = ( 425 | "$(inherited)", 426 | "$(PROJECT_DIR)/MacKernelSDK/Library/x86_64", 427 | ); 428 | LLVM_LTO = YES; 429 | MACOSX_DEPLOYMENT_TARGET = 10.13; 430 | MARKETING_VERSION = 1.1.1; 431 | MODULE_NAME = com.cdf.NightShiftEnabler; 432 | MODULE_START = "$(PRODUCT_NAME)_kern_start"; 433 | MODULE_STOP = "$(PRODUCT_NAME)_kern_stop"; 434 | MODULE_VERSION = 1.1.1; 435 | OTHER_CFLAGS = ( 436 | "-mmmx", 437 | "-msse", 438 | "-msse2", 439 | "-msse3", 440 | "-mfpmath=sse", 441 | "-mssse3", 442 | "-ftree-vectorize", 443 | "-fno-non-call-exceptions", 444 | "-fno-builtin", 445 | "-fno-asynchronous-unwind-tables", 446 | "-Wno-unknown-warning-option", 447 | "-Wno-ossharedptr-misuse", 448 | "-Wno-vla", 449 | ); 450 | OTHER_LDFLAGS = "-static"; 451 | PRODUCT_BUNDLE_IDENTIFIER = "$(MODULE_NAME)"; 452 | PRODUCT_NAME = "$(TARGET_NAME)"; 453 | STRIP_STYLE = "non-global"; 454 | WRAPPER_EXTENSION = kext; 455 | }; 456 | name = Release; 457 | }; 458 | /* End XCBuildConfiguration section */ 459 | 460 | /* Begin XCConfigurationList section */ 461 | 1C748C211C21952C0024EED2 /* Build configuration list for PBXProject "NightShiftEnabler" */ = { 462 | isa = XCConfigurationList; 463 | buildConfigurations = ( 464 | 1C748C2F1C21952C0024EED2 /* Debug */, 465 | 1C748C301C21952C0024EED2 /* Release */, 466 | ); 467 | defaultConfigurationIsVisible = 0; 468 | defaultConfigurationName = Release; 469 | }; 470 | 1C748C311C21952C0024EED2 /* Build configuration list for PBXNativeTarget "NightShiftEnabler" */ = { 471 | isa = XCConfigurationList; 472 | buildConfigurations = ( 473 | 1C748C321C21952C0024EED2 /* Debug */, 474 | 1C748C331C21952C0024EED2 /* Release */, 475 | ); 476 | defaultConfigurationIsVisible = 0; 477 | defaultConfigurationName = Release; 478 | }; 479 | /* End XCConfigurationList section */ 480 | }; 481 | rootObject = 1C748C1E1C21952C0024EED2 /* Project object */; 482 | } 483 | --------------------------------------------------------------------------------