├── .gitignore ├── Extras ├── Brightness │ ├── Brightness.c │ └── Brightness.h ├── NSDate+Extensions │ ├── NSDate+Extensions.h │ └── NSDate+Extensions.m └── Solar │ ├── Solar.c │ └── Solar.h ├── GoodNight Widget ├── Base.lproj │ └── MainInterface.storyboard ├── GoodNight Widget.entitlements ├── Info.plist ├── TodayViewController.h ├── TodayViewController.m ├── de.lproj │ └── MainInterface.strings ├── fr.lproj │ └── MainInterface.strings ├── ja.lproj │ └── MainInterface.strings └── nl.lproj │ └── MainInterface.strings ├── GoodNight-Mac ├── AboutViewController.h ├── AboutViewController.m ├── AppDelegate.h ├── AppDelegate.m ├── Base.lproj │ └── Main.storyboard ├── ColorViewController.h ├── ColorViewController.m ├── Info.plist ├── MacAssets.xcassets │ ├── AppIcon.appiconset │ │ ├── 1024.png │ │ ├── 128.png │ │ ├── 16.png │ │ ├── 256-1.png │ │ ├── 256.png │ │ ├── 32-1.png │ │ ├── 32.png │ │ ├── 512-1.png │ │ ├── 512.png │ │ ├── 64.png │ │ └── Contents.json │ ├── Contents.json │ ├── icon_raw_rounded.imageset │ │ ├── 1024.png │ │ ├── 512.png │ │ └── Contents.json │ └── menu.imageset │ │ ├── 16.png │ │ ├── 32.png │ │ └── Contents.json ├── MacGammaController.h ├── MacGammaController.m ├── MainTouchBarController.h ├── MainTouchBarController.m ├── PrefixHeader-Mac.pch ├── ShadeTouchBarController.h ├── ShadeTouchBarController.m ├── ShadeViewController.h ├── ShadeViewController.m ├── TabViewController.h ├── TabViewController.m ├── TemperatureTouchBarController.h ├── TemperatureTouchBarController.m ├── TemperatureViewController.h ├── TemperatureViewController.m ├── WhitePointMacViewController.h ├── WhitePointMacViewController.m ├── WhitePointTouchBarController.h ├── WhitePointTouchBarController.m └── main.m ├── GoodNight.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcuserdata │ ├── Alice.xcuserdatad │ └── xcschemes │ │ ├── GoodNight Widget.xcscheme │ │ ├── GoodNight.xcscheme │ │ └── xcschememanagement.plist │ └── Anthony.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ ├── GoodNight Widget.xcscheme │ ├── GoodNight-Mac.xcscheme │ ├── GoodNight.xcscheme │ └── xcschememanagement.plist ├── GoodNight ├── AppDelegate.h ├── AppDelegate.m ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── 120-1.png │ │ ├── 120.png │ │ ├── 152.png │ │ ├── 167.png │ │ ├── 180.png │ │ ├── 29.png │ │ ├── 40.png │ │ ├── 58-1.png │ │ ├── 58.png │ │ ├── 76.png │ │ ├── 80-1.png │ │ ├── 80.png │ │ ├── 87.png │ │ └── Contents.json │ ├── Brand Assets.launchimage │ │ └── Contents.json │ ├── Contents.json │ ├── disable-switch.imageset │ │ ├── Contents.json │ │ ├── Toggle Off-105.png │ │ ├── Toggle Off-35.png │ │ └── Toggle Off-70.png │ ├── enable-switch.imageset │ │ ├── Contents.json │ │ ├── Toggle On Filled-105.png │ │ ├── Toggle On Filled-35.png │ │ └── Toggle On Filled-70.png │ └── launch.imageset │ │ ├── Contents.json │ │ ├── launch.png │ │ ├── launch@2x.png │ │ └── launch@3x.png ├── Base.lproj │ ├── LaunchScreen.storyboard │ ├── Localizable.strings │ └── Storyboard.storyboard ├── BrightnessViewController.h ├── BrightnessViewController.m ├── CreditsViewController.h ├── CreditsViewController.m ├── CustomViewController.h ├── CustomViewController.m ├── Defaults.plist ├── ForceTouchController.h ├── ForceTouchController.m ├── GammaController.h ├── GammaController.m ├── GoodNight.entitlements ├── IOMobileFramebufferClient.h ├── IOMobileFramebufferClient.m ├── Info.plist ├── InitialViewController.h ├── InitialViewController.m ├── MainViewController.h ├── MainViewController.m ├── MobileGestaltClient.h ├── MobileGestaltClient.m ├── PrefixHeader.pch ├── SettingsViewController.h ├── SettingsViewController.m ├── SpringBoardServicesClient.h ├── SpringBoardServicesClient.m ├── WhitePointViewController.h ├── WhitePointViewController.m ├── de.lproj │ ├── LaunchScreen.strings │ ├── Localizable.strings │ └── Storyboard.strings ├── fr.lproj │ ├── LaunchScreen.strings │ ├── Localizable.strings │ └── Storyboard.strings ├── ja.lproj │ ├── LaunchScreen.strings │ ├── Localizable.strings │ └── Storyboard.strings ├── main.m └── nl.lproj │ ├── LaunchScreen.strings │ ├── Localizable.strings │ └── Storyboard.strings ├── Help ├── 1.png ├── 2.png ├── 3.png ├── 4.png └── README.md ├── MASShortcut.framework ├── Headers ├── MASShortcut ├── Modules ├── Resources └── Versions │ ├── A │ ├── Headers │ │ ├── MASDictionaryTransformer.h │ │ ├── MASKeyCodes.h │ │ ├── MASKeyMasks.h │ │ ├── MASShortcut.h │ │ ├── MASShortcutBinder.h │ │ ├── MASShortcutMonitor.h │ │ ├── MASShortcutValidator.h │ │ ├── MASShortcutView+Bindings.h │ │ ├── MASShortcutView.h │ │ └── Shortcut.h │ ├── MASShortcut │ ├── Modules │ │ └── module.modulemap │ └── Resources │ │ ├── Info.plist │ │ ├── cs.lproj │ │ └── Localizable.strings │ │ ├── de.lproj │ │ └── Localizable.strings │ │ ├── en.lproj │ │ └── Localizable.strings │ │ ├── es.lproj │ │ └── Localizable.strings │ │ ├── fr.lproj │ │ └── Localizable.strings │ │ ├── it.lproj │ │ └── Localizable.strings │ │ ├── ja.lproj │ │ └── Localizable.strings │ │ ├── ko.lproj │ │ └── Localizable.strings │ │ ├── nl.lproj │ │ └── Localizable.strings │ │ ├── pl.lproj │ │ └── Localizable.strings │ │ ├── ru.lproj │ │ └── Localizable.strings │ │ ├── zh-Hans.lproj │ │ └── Localizable.strings │ │ └── zh-Hant.lproj │ │ └── Localizable.strings │ └── Current ├── README.md └── Sparkle.framework ├── Headers ├── Modules ├── PrivateHeaders ├── Resources ├── Sparkle └── Versions ├── A ├── Headers │ ├── SUAppcast.h │ ├── SUAppcastItem.h │ ├── SUErrors.h │ ├── SUExport.h │ ├── SUStandardVersionComparator.h │ ├── SUUpdater.h │ ├── SUVersionComparisonProtocol.h │ ├── SUVersionDisplayProtocol.h │ └── Sparkle.h ├── Modules │ └── module.modulemap ├── PrivateHeaders │ └── SUUnarchiver.h ├── Resources │ ├── Autoupdate.app │ │ └── Contents │ │ │ ├── Info.plist │ │ │ ├── MacOS │ │ │ ├── Autoupdate │ │ │ └── fileop │ │ │ ├── PkgInfo │ │ │ └── Resources │ │ │ ├── AppIcon.icns │ │ │ ├── SUStatus.nib │ │ │ ├── ar.lproj │ │ │ └── Sparkle.strings │ │ │ ├── ca.lproj │ │ │ └── Sparkle.strings │ │ │ ├── cs.lproj │ │ │ └── Sparkle.strings │ │ │ ├── da.lproj │ │ │ └── Sparkle.strings │ │ │ ├── de.lproj │ │ │ └── Sparkle.strings │ │ │ ├── el.lproj │ │ │ └── Sparkle.strings │ │ │ ├── en.lproj │ │ │ └── Sparkle.strings │ │ │ ├── es.lproj │ │ │ └── Sparkle.strings │ │ │ ├── fi.lproj │ │ │ └── Sparkle.strings │ │ │ ├── fr.lproj │ │ │ └── Sparkle.strings │ │ │ ├── he.lproj │ │ │ └── Sparkle.strings │ │ │ ├── is.lproj │ │ │ └── Sparkle.strings │ │ │ ├── it.lproj │ │ │ └── Sparkle.strings │ │ │ ├── ja.lproj │ │ │ └── Sparkle.strings │ │ │ ├── ko.lproj │ │ │ └── Sparkle.strings │ │ │ ├── nb.lproj │ │ │ └── Sparkle.strings │ │ │ ├── nl.lproj │ │ │ └── Sparkle.strings │ │ │ ├── pl.lproj │ │ │ └── Sparkle.strings │ │ │ ├── pt_BR.lproj │ │ │ └── Sparkle.strings │ │ │ ├── pt_PT.lproj │ │ │ └── Sparkle.strings │ │ │ ├── ro.lproj │ │ │ └── Sparkle.strings │ │ │ ├── ru.lproj │ │ │ └── Sparkle.strings │ │ │ ├── sk.lproj │ │ │ └── Sparkle.strings │ │ │ ├── sl.lproj │ │ │ └── Sparkle.strings │ │ │ ├── sv.lproj │ │ │ └── Sparkle.strings │ │ │ ├── th.lproj │ │ │ └── Sparkle.strings │ │ │ ├── tr.lproj │ │ │ └── Sparkle.strings │ │ │ ├── uk.lproj │ │ │ └── Sparkle.strings │ │ │ ├── zh_CN.lproj │ │ │ └── Sparkle.strings │ │ │ └── zh_TW.lproj │ │ │ └── Sparkle.strings │ ├── Info.plist │ ├── SUModelTranslation.plist │ ├── SUStatus.nib │ ├── ar.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── ca.lproj │ │ └── Sparkle.strings │ ├── cs.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── da.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── de.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── el.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── en.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── es.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── fi.lproj │ │ └── Sparkle.strings │ ├── fr.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── fr_CA.lproj │ ├── he.lproj │ │ └── Sparkle.strings │ ├── is.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── it.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── ja.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── ko.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── nb.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── nl.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── pl.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── pt.lproj │ ├── pt_BR.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── pt_PT.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── ro.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── ru.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── sk.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── sl.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── sv.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── th.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── tr.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── uk.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ ├── zh_CN.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings │ └── zh_TW.lproj │ │ ├── SUAutomaticUpdateAlert.nib │ │ ├── SUUpdateAlert.nib │ │ ├── SUUpdatePermissionPrompt.nib │ │ └── Sparkle.strings └── Sparkle └── Current /.gitignore: -------------------------------------------------------------------------------- 1 | *.ipa 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /Extras/Brightness/Brightness.c: -------------------------------------------------------------------------------- 1 | /* brightness.c -- Set brightness based on hour 2 | This file is part of brightness. 3 | 4 | Brightness is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | Brightness is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public License 15 | along with Brightness. If not, see . 16 | Copyright (c) 2013 Jakub Tymejczyk 17 | */ 18 | 19 | #include "Brightness.h" 20 | 21 | /*also from Redshift*/ 22 | float calculate_interpolated_value(double elevation, float day, float night) 23 | { 24 | float result; 25 | if (elevation < TRANSITION_LOW) { 26 | result = night; 27 | } else if (elevation < TRANSITION_HIGH) { 28 | /* Transition period: interpolate */ 29 | float a = (TRANSITION_LOW - elevation) / 30 | (TRANSITION_LOW - TRANSITION_HIGH); 31 | result = (1.0-a)*night + a*day; 32 | } else { 33 | result = day; 34 | } 35 | 36 | return result; 37 | } -------------------------------------------------------------------------------- /Extras/Brightness/Brightness.h: -------------------------------------------------------------------------------- 1 | // 2 | // Brightness.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 6/22/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #ifndef brightness_h 10 | #define brightness_h 11 | 12 | #include 13 | #include "Solar.h" 14 | 15 | #define TRANSITION_LOW SOLAR_CIVIL_TWILIGHT_ELEV 16 | #define TRANSITION_HIGH 3.0 17 | 18 | float calculate_interpolated_value(double elevation, float day, float night); 19 | 20 | #endif /* brightness_h */ 21 | 22 | -------------------------------------------------------------------------------- /Extras/NSDate+Extensions/NSDate+Extensions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSDate+Extensions.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 10/13/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSDate (Extensions) 12 | 13 | - (BOOL)isEarlierThan:(NSDate *)date; 14 | - (BOOL)isLaterThan:(NSDate *)date; 15 | 16 | @end -------------------------------------------------------------------------------- /Extras/NSDate+Extensions/NSDate+Extensions.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSDate+Extensions.m 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 10/13/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import "NSDate+Extensions.h" 10 | 11 | @implementation NSDate (Extensions) 12 | 13 | - (BOOL)isEarlierThan:(NSDate *)date { 14 | return [self earlierDate:date] == self; 15 | } 16 | 17 | - (BOOL)isLaterThan:(NSDate *)date { 18 | return [self laterDate:date] == self; 19 | } 20 | 21 | @end -------------------------------------------------------------------------------- /Extras/Solar/Solar.h: -------------------------------------------------------------------------------- 1 | /* Solar.h -- Solar position header 2 | This file is part of Redshift. 3 | 4 | Redshift is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU General Public License as published by 6 | the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | Redshift is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public License 15 | along with Redshift. If not, see . 16 | 17 | Copyright (c) 2010 Jon Lund Steffensen 18 | */ 19 | 20 | #ifndef REDSHIFT_SOLAR_H 21 | #define REDSHIFT_SOLAR_H 22 | 23 | #include "time.h" 24 | 25 | /* Model of atmospheric refraction near horizon (in degrees). */ 26 | #define SOLAR_ATM_REFRAC 0.833 27 | 28 | #define SOLAR_ASTRO_TWILIGHT_ELEV -18.0 29 | #define SOLAR_NAUT_TWILIGHT_ELEV -12.0 30 | #define SOLAR_CIVIL_TWILIGHT_ELEV -6.0 31 | #define SOLAR_DAYTIME_ELEV (0.0 - SOLAR_ATM_REFRAC) 32 | 33 | typedef enum { 34 | SOLAR_TIME_NOON = 0, 35 | SOLAR_TIME_MIDNIGHT, 36 | SOLAR_TIME_ASTRO_DAWN, 37 | SOLAR_TIME_NAUT_DAWN, 38 | SOLAR_TIME_CIVIL_DAWN, 39 | SOLAR_TIME_SUNRISE, 40 | SOLAR_TIME_SUNSET, 41 | SOLAR_TIME_CIVIL_DUSK, 42 | SOLAR_TIME_NAUT_DUSK, 43 | SOLAR_TIME_ASTRO_DUSK, 44 | SOLAR_TIME_MAX 45 | } solar_time_t; 46 | 47 | 48 | double solar_elevation(double date, double lat, double lon); 49 | void solar_table_fill(double date, double lat, double lon, double *table); 50 | 51 | #endif /* ! REDSHIFT_SOLAR_H */ -------------------------------------------------------------------------------- /GoodNight Widget/GoodNight Widget.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.application-groups 6 | 7 | group.com.agatiello.GoodNight 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /GoodNight Widget/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | GoodNight Widget 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIcons 12 | 13 | CFBundleIcons~ipad 14 | 15 | CFBundleIdentifier 16 | $(PRODUCT_BUNDLE_IDENTIFIER) 17 | CFBundleInfoDictionaryVersion 18 | 6.0 19 | CFBundleName 20 | $(PRODUCT_NAME) 21 | CFBundlePackageType 22 | XPC! 23 | CFBundleShortVersionString 24 | 1.1 25 | CFBundleSignature 26 | ???? 27 | CFBundleVersion 28 | 1 29 | NSExtension 30 | 31 | NSExtensionMainStoryboard 32 | MainInterface 33 | NSExtensionPointIdentifier 34 | com.apple.widget-extension 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /GoodNight Widget/TodayViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TodayViewController.h 3 | // GoodNight Widget 4 | // 5 | // Created by Anthony Agatiello on 10/29/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface TodayViewController : UIViewController 12 | 13 | @property (weak, nonatomic) IBOutlet UIButton *toggleButton; 14 | @property (weak, nonatomic) IBOutlet UIButton *darkroomButton; 15 | @property (weak, nonatomic) IBOutlet UILabel *temperatureLabel; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /GoodNight Widget/de.lproj/MainInterface.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UIButton"; normalTitle = "Darkroom on"; ObjectID = "DGb-YH-tIs"; */ 3 | "DGb-YH-tIs.normalTitle" = "Darkroom on"; 4 | 5 | /* Class = "UIButton"; selectedTitle = "Darkroom off"; ObjectID = "DGb-YH-tIs"; */ 6 | "DGb-YH-tIs.selectedTitle" = "Darkroom off"; 7 | 8 | /* Class = "UILabel"; text = "Label"; ObjectID = "lUd-BI-2Lc"; */ 9 | "lUd-BI-2Lc.text" = "Label"; 10 | 11 | /* Class = "UIButton"; normalTitle = "Gamma on"; ObjectID = "zOd-Wo-5gC"; */ 12 | "zOd-Wo-5gC.normalTitle" = "Gamma on"; 13 | 14 | /* Class = "UIButton"; selectedTitle = "Gamma off"; ObjectID = "zOd-Wo-5gC"; */ 15 | "zOd-Wo-5gC.selectedTitle" = "Gamma off"; 16 | -------------------------------------------------------------------------------- /GoodNight Widget/fr.lproj/MainInterface.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UIButton"; normalTitle = "Darkroom on"; ObjectID = "DGb-YH-tIs"; */ 3 | "DGb-YH-tIs.normalTitle" = "Chambre noire on"; 4 | 5 | /* Class = "UIButton"; selectedTitle = "Darkroom off"; ObjectID = "DGb-YH-tIs"; */ 6 | "DGb-YH-tIs.selectedTitle" = "Chambre noire off"; 7 | 8 | /* Class = "UILabel"; text = "Label"; ObjectID = "lUd-BI-2Lc"; */ 9 | "lUd-BI-2Lc.text" = "Label"; 10 | 11 | /* Class = "UIButton"; normalTitle = "Gamma on"; ObjectID = "zOd-Wo-5gC"; */ 12 | "zOd-Wo-5gC.normalTitle" = "Gamma on"; 13 | 14 | /* Class = "UIButton"; selectedTitle = "Gamma off"; ObjectID = "zOd-Wo-5gC"; */ 15 | "zOd-Wo-5gC.selectedTitle" = "Gamma off"; 16 | -------------------------------------------------------------------------------- /GoodNight Widget/ja.lproj/MainInterface.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UIButton"; normalTitle = "Darkroom on"; ObjectID = "DGb-YH-tIs"; */ 3 | "DGb-YH-tIs.normalTitle" = "暗室ON"; 4 | 5 | /* Class = "UIButton"; selectedTitle = "Darkroom off"; ObjectID = "DGb-YH-tIs"; */ 6 | "DGb-YH-tIs.selectedTitle" = "暗室OFF"; 7 | 8 | /* Class = "UILabel"; text = "Label"; ObjectID = "lUd-BI-2Lc"; */ 9 | "lUd-BI-2Lc.text" = "ラベル"; 10 | 11 | /* Class = "UIButton"; normalTitle = "Gamma on"; ObjectID = "zOd-Wo-5gC"; */ 12 | "zOd-Wo-5gC.normalTitle" = "ガンマON"; 13 | 14 | /* Class = "UIButton"; selectedTitle = "Gamma off"; ObjectID = "zOd-Wo-5gC"; */ 15 | "zOd-Wo-5gC.selectedTitle" = "ガンマOFF"; 16 | -------------------------------------------------------------------------------- /GoodNight Widget/nl.lproj/MainInterface.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UIButton"; normalTitle = "Darkroom on"; ObjectID = "DGb-YH-tIs"; */ 2 | "DGb-YH-tIs.normalTitle" = "Darkroom aan"; 3 | 4 | /* Class = "UIButton"; selectedTitle = "Darkroom off"; ObjectID = "DGb-YH-tIs"; */ 5 | "DGb-YH-tIs.selectedTitle" = "Darkroom uit"; 6 | 7 | /* Class = "UILabel"; text = "Label"; ObjectID = "lUd-BI-2Lc"; */ 8 | "lUd-BI-2Lc.text" = "Label"; 9 | 10 | /* Class = "UIButton"; normalTitle = "Gamma on"; ObjectID = "zOd-Wo-5gC"; */ 11 | "zOd-Wo-5gC.normalTitle" = "Gamma aan"; 12 | 13 | /* Class = "UIButton"; selectedTitle = "Gamma off"; ObjectID = "zOd-Wo-5gC"; */ 14 | "zOd-Wo-5gC.selectedTitle" = "Gamma uit"; 15 | 16 | -------------------------------------------------------------------------------- /GoodNight-Mac/AboutViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // AboutViewController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 11/26/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AboutViewController : NSViewController 12 | 13 | @property (strong, nonatomic) IBOutlet NSTextField *versionLabel; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /GoodNight-Mac/AboutViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // AboutViewController.m 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 11/26/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import "AboutViewController.h" 10 | #import 11 | 12 | @implementation AboutViewController 13 | 14 | - (void)viewWillAppear { 15 | [super viewWillAppear]; 16 | 17 | self.view.window.titleVisibility = NSWindowTitleHidden; 18 | self.view.window.titlebarAppearsTransparent = YES; 19 | self.view.window.styleMask |= NSWindowStyleMaskFullSizeContentView; 20 | 21 | NSString *appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; 22 | self.versionLabel.stringValue = [NSString stringWithFormat:@"Version %@", appVersionString]; 23 | } 24 | 25 | - (IBAction)updateButtonClicked:(NSButton *)button { 26 | [[[SUUpdater alloc] init] checkForUpdates:nil]; 27 | } 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /GoodNight-Mac/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // GoodNight-Mac 4 | // 5 | // Created by Anthony Agatiello on 11/17/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | 13 | static NSString * const MASOpenShortcutEnabledKey = @"openShortcutEnabled"; 14 | static NSString * const MASResetShortcutEnabledKey = @"resetShortcutEnabled"; 15 | static NSString * const MASDarkroomShortcutEnabledKey = @"darkroomShortcutEnabled"; 16 | static NSString * const MASDarkThemeShortcutEnabledKey = @"darkThemeShortcutEnabled"; 17 | 18 | static NSUInteger const GoodNightModifierFlags = NSEventModifierFlagCommand | NSEventModifierFlagOption; 19 | 20 | static float _darkThemeFloatValue = 33/255.0f; 21 | 22 | static void *MASObservingContext = &MASObservingContext; 23 | 24 | @interface AppDelegate : NSObject 25 | 26 | @property (strong, nonatomic) NSStatusItem *statusItem; 27 | @property (strong, nonatomic) NSMenu *statusMenu; 28 | @property (strong, nonatomic) NSMenuItem *loginItem; 29 | @property (strong, nonatomic) NSMenuItem *seperatorItem; 30 | 31 | @property NSWindowController *tabWindowController; 32 | @property NSWindowController *aboutWindowController; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /GoodNight-Mac/ColorViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ColorViewController.h 3 | // GoodNight-Mac 4 | // 5 | // Created by Anthony Agatiello on 11/23/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ColorViewController : NSViewController 12 | 13 | @property (strong, nonatomic) IBOutlet NSColorWell *colorWell; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /GoodNight-Mac/ColorViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ColorViewController.m 3 | // GoodNight-Mac 4 | // 5 | // Created by Anthony Agatiello on 11/23/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import "ColorViewController.h" 10 | #import "MacGammaController.h" 11 | #import "TemperatureViewController.h" 12 | #import "AppDelegate.h" 13 | 14 | @implementation ColorViewController 15 | 16 | - (void)viewDidLoad { 17 | [super viewDidLoad]; 18 | 19 | [self.colorWell addObserver:self forKeyPath:@"color" options:kNilOptions context:nil]; 20 | } 21 | 22 | - (void)viewWillAppear { 23 | [super viewWillAppear]; 24 | 25 | [self.view setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]]; 26 | [self.view.window setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]]; 27 | [self.view.layer setBackgroundColor:[[NSColor colorWithRed:_darkThemeFloatValue green:_darkThemeFloatValue blue:_darkThemeFloatValue alpha:1.0] CGColor]]; 28 | } 29 | 30 | - (void)dealloc { 31 | [self.colorWell removeObserver:self forKeyPath:@"color"]; 32 | } 33 | 34 | - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 35 | [MacGammaController setInvertedColorsEnabled:NO]; 36 | 37 | NSColor *color = [self.colorWell color]; 38 | 39 | float redValue = [color redComponent]; 40 | float greenValue = [color greenComponent]; 41 | float blueValue = [color blueComponent]; 42 | 43 | [userDefaults setFloat:0 forKey:@"orangeValue"]; 44 | [userDefaults setFloat:1 forKey:@"brightnessValue"]; 45 | [userDefaults setFloat:0.5 forKey:@"whitePointValue"]; 46 | [userDefaults setBool:NO forKey:@"darkroomEnabled"]; 47 | [userDefaults synchronize]; 48 | 49 | [MacGammaController setGammaWithRed:redValue green:greenValue blue:blueValue]; 50 | } 51 | 52 | - (IBAction)resetColor:(NSButton *)button { 53 | [MacGammaController resetAllAdjustments]; 54 | } 55 | 56 | @end 57 | -------------------------------------------------------------------------------- /GoodNight-Mac/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en_US 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | GoodNight 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.2.2 19 | CFBundleVersion 20 | 1.2.2 21 | LSApplicationCategoryType 22 | public.app-category.utilities 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | LSUIElement 26 | 27 | NSAppTransportSecurity 28 | 29 | NSAllowsArbitraryLoads 30 | 31 | 32 | NSHumanReadableCopyright 33 | Copyright © 2016 ADA Tech, LLC. All rights reserved. 34 | NSMainStoryboardFile 35 | Main 36 | NSPrincipalClass 37 | NSApplication 38 | SUFeedURL 39 | https://adatechri.com/GoodNightUpdate.xml 40 | 41 | 42 | -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/128.png -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/16.png -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/256-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/256-1.png -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/256.png -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/32-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/32-1.png -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/32.png -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/512-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/512-1.png -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/512.png -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/64.png -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "16.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "32-1.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "32.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "64.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "idiom" : "mac", 30 | "filename" : "128.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "128x128", 35 | "idiom" : "mac", 36 | "filename" : "256-1.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "256x256", 41 | "idiom" : "mac", 42 | "filename" : "256.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "idiom" : "mac", 48 | "filename" : "512-1.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "idiom" : "mac", 54 | "filename" : "512.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "filename" : "1024.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/icon_raw_rounded.imageset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight-Mac/MacAssets.xcassets/icon_raw_rounded.imageset/1024.png -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/icon_raw_rounded.imageset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight-Mac/MacAssets.xcassets/icon_raw_rounded.imageset/512.png -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/icon_raw_rounded.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "mac", 5 | "filename" : "512.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "mac", 10 | "filename" : "1024.png", 11 | "scale" : "2x" 12 | } 13 | ], 14 | "info" : { 15 | "version" : 1, 16 | "author" : "xcode" 17 | } 18 | } -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/menu.imageset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight-Mac/MacAssets.xcassets/menu.imageset/16.png -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/menu.imageset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight-Mac/MacAssets.xcassets/menu.imageset/32.png -------------------------------------------------------------------------------- /GoodNight-Mac/MacAssets.xcassets/menu.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "mac", 5 | "filename" : "16.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "mac", 10 | "filename" : "32.png", 11 | "scale" : "2x" 12 | } 13 | ], 14 | "info" : { 15 | "version" : 1, 16 | "author" : "xcode" 17 | } 18 | } -------------------------------------------------------------------------------- /GoodNight-Mac/MacGammaController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MacGammaController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 12/7/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MacGammaController : NSObject 12 | 13 | + (void)setGammaWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue; 14 | + (void)setGammaWithOrangeness:(CGFloat)percentOrange; 15 | + (void)setInvertedColorsEnabled:(BOOL)enabled; 16 | + (void)resetAllAdjustments; 17 | + (void)toggleDarkroom; 18 | + (void)toggleSystemTheme; 19 | + (void)setWhitePoint:(CGFloat)whitePoint; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /GoodNight-Mac/MainTouchBarController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MainTouchBarController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 11/25/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MainTouchBarController : NSTouchBar 12 | 13 | @property (strong, nonatomic) IBOutlet NSColorPickerTouchBarItem *touchBarColorPicker; 14 | @property (strong, nonatomic) IBOutlet NSButton *touchBarDarkThemeButton; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /GoodNight-Mac/MainTouchBarController.m: -------------------------------------------------------------------------------- 1 | // 2 | // MainTouchBarController.m 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 11/25/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import "MainTouchBarController.h" 10 | #import "MacGammaController.h" 11 | #import "TemperatureViewController.h" 12 | 13 | @implementation MainTouchBarController 14 | 15 | - (void)awakeFromNib { 16 | [self.touchBarColorPicker setEnabled:YES]; 17 | [self.touchBarColorPicker addObserver:self forKeyPath:@"color" options:kNilOptions context:nil]; 18 | 19 | [defNotifCenter addObserver:self selector:@selector(defaultsChanged) name:NSUserDefaultsDidChangeNotification object:nil]; 20 | [self setDarkThemeButtonText]; 21 | } 22 | 23 | - (void)dealloc { 24 | [self.touchBarColorPicker removeObserver:self forKeyPath:@"color"]; 25 | } 26 | 27 | - (void)defaultsChanged { 28 | [self setDarkThemeButtonText]; 29 | } 30 | 31 | - (void)setDarkThemeButtonText { 32 | if ([userDefaults boolForKey:@"darkThemeEnabled"]) { 33 | [self.touchBarDarkThemeButton setTitle:@"Dark Theme Off"]; 34 | } 35 | else { 36 | [self.touchBarDarkThemeButton setTitle:@"Dark Theme On"]; 37 | } 38 | } 39 | 40 | - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 41 | NSColor *color = self.touchBarColorPicker.color; 42 | 43 | float redValue = [color redComponent]; 44 | float greenValue = [color greenComponent]; 45 | float blueValue = [color blueComponent]; 46 | 47 | [MacGammaController setGammaWithRed:redValue green:greenValue blue:blueValue]; 48 | 49 | [userDefaults setFloat:0 forKey:@"orangeValue"]; 50 | [userDefaults setFloat:1 forKey:@"brightnessValue"]; 51 | [userDefaults setFloat:0.5 forKey:@"whitePointValue"]; 52 | [userDefaults setBool:NO forKey:@"darkroomEnabled"]; 53 | [userDefaults synchronize]; 54 | } 55 | 56 | - (IBAction)resetAll:(NSButton *)button { 57 | [MacGammaController resetAllAdjustments]; 58 | } 59 | 60 | - (IBAction)toggleDarkTheme:(NSButton *)button { 61 | if ([self.touchBarDarkThemeButton.title isEqualToString:@"Dark Theme On"]) { 62 | [self.touchBarDarkThemeButton setTitle:@"Dark Theme Off"]; 63 | } 64 | else { 65 | [self.touchBarDarkThemeButton setTitle:@"Dark Theme On"]; 66 | } 67 | 68 | [MacGammaController toggleSystemTheme]; 69 | } 70 | 71 | @end 72 | -------------------------------------------------------------------------------- /GoodNight-Mac/PrefixHeader-Mac.pch: -------------------------------------------------------------------------------- 1 | // 2 | // PrefixHeader-Mac.pch 3 | // GoodNight-Mac 4 | // 5 | // Created by Anthony Agatiello on 11/23/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #ifndef PrefixHeader_Mac_pch 10 | #define PrefixHeader_Mac_pch 11 | 12 | #define userDefaults [NSUserDefaults standardUserDefaults] 13 | #define defNotifCenter [NSNotificationCenter defaultCenter] 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /GoodNight-Mac/ShadeTouchBarController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ShadeTouchBarController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 11/25/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ShadeTouchBarController : NSTouchBar 12 | 13 | @property (strong, nonatomic) IBOutlet NSSliderTouchBarItem *brightnessTouchBarSlider; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /GoodNight-Mac/ShadeTouchBarController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ShadeTouchBarController.m 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 11/25/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import "ShadeTouchBarController.h" 10 | #import "MacGammaController.h" 11 | #import "TemperatureViewController.h" 12 | #import "ShadeViewController.h" 13 | 14 | @implementation ShadeTouchBarController 15 | 16 | - (void)awakeFromNib { 17 | [self.brightnessTouchBarSlider.slider setFloatValue:[userDefaults floatForKey:@"brightnessValue"]]; 18 | self.brightnessTouchBarSlider.label = [NSString stringWithFormat:@"%d%%", (int)round([userDefaults floatForKey:@"brightnessValue"] * 100)]; 19 | 20 | [defNotifCenter addObserver:self selector:@selector(defaultsChanged) name:NSUserDefaultsDidChangeNotification object:nil]; 21 | } 22 | 23 | - (void)defaultsChanged { 24 | [self.brightnessTouchBarSlider.slider setFloatValue:[userDefaults floatForKey:@"brightnessValue"]]; 25 | self.brightnessTouchBarSlider.label = [NSString stringWithFormat:@"%d%%", (int)round([userDefaults floatForKey:@"brightnessValue"] * 100)]; 26 | } 27 | 28 | - (IBAction)brightnessSliderDidChange:(NSSliderTouchBarItem *)slider { 29 | float sliderValue = self.brightnessTouchBarSlider.slider.floatValue; 30 | [userDefaults setFloat:sliderValue forKey:@"brightnessValue"]; 31 | sliderValue = [userDefaults floatForKey:@"brightnessValue"]; 32 | 33 | [MacGammaController setGammaWithRed:sliderValue green:sliderValue blue:sliderValue]; 34 | self.brightnessTouchBarSlider.label = [NSString stringWithFormat:@"%d%%", (int)round([userDefaults floatForKey:@"brightnessValue"] * 100)]; 35 | 36 | if (self.brightnessTouchBarSlider.slider.floatValue == 1) { 37 | [self resetBrightness:nil]; 38 | } 39 | 40 | if (self.brightnessTouchBarSlider.slider.floatValue < 0.3) { 41 | float sliderValue = self.brightnessTouchBarSlider.slider.floatValue = 0.3; 42 | [userDefaults setFloat:sliderValue forKey:@"brightnessValue"]; 43 | sliderValue = [userDefaults floatForKey:@"brightnessValue"]; 44 | 45 | self.brightnessTouchBarSlider.label = [NSString stringWithFormat:@"%d%%", (int)round(sliderValue * 100)]; 46 | [MacGammaController setGammaWithRed:sliderValue green:sliderValue blue:sliderValue]; 47 | 48 | [ShadeViewController showBrightnessAlert]; 49 | } 50 | 51 | [userDefaults setFloat:0 forKey:@"orangeValue"]; 52 | [userDefaults setFloat:0.5 forKey:@"whitePointValue"]; 53 | [userDefaults setBool:NO forKey:@"darkroomEnabled"]; 54 | [userDefaults synchronize]; 55 | } 56 | 57 | - (IBAction)resetBrightness:(NSButton *)button { 58 | [MacGammaController resetAllAdjustments]; 59 | self.brightnessTouchBarSlider.label = @"100%"; 60 | self.brightnessTouchBarSlider.slider.floatValue = [userDefaults floatForKey:@"brightnessValue"]; 61 | } 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /GoodNight-Mac/ShadeViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ShadeViewController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 11/25/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ShadeViewController : NSViewController 12 | 13 | @property (strong, nonatomic) IBOutlet NSSlider *brightnessSlider; 14 | @property (strong, nonatomic) IBOutlet NSTextField *percentTextField; 15 | 16 | + (void)showBrightnessAlert; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /GoodNight-Mac/ShadeViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ShadeViewController.m 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 11/25/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import "ShadeViewController.h" 10 | #import "MacGammaController.h" 11 | #import "TemperatureViewController.h" 12 | #import "AppDelegate.h" 13 | 14 | @implementation ShadeViewController 15 | 16 | - (void)viewDidLoad { 17 | [super viewDidLoad]; 18 | 19 | [defNotifCenter addObserver:self selector:@selector(defaultsChanged) name:NSUserDefaultsDidChangeNotification object:nil]; 20 | } 21 | 22 | - (void)defaultsChanged { 23 | [self.brightnessSlider setFloatValue:[userDefaults floatForKey:@"brightnessValue"]]; 24 | [self.percentTextField setStringValue:[NSString stringWithFormat:@"%d%%", (int)round([userDefaults floatForKey:@"brightnessValue"] * 100)]]; 25 | } 26 | 27 | - (void)dealloc { 28 | [defNotifCenter removeObserver:self name:NSUserDefaultsDidChangeNotification object:nil]; 29 | } 30 | 31 | - (void)viewWillAppear { 32 | [super viewWillAppear]; 33 | 34 | [self.view setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]]; 35 | [self.view.window setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]]; 36 | [self.view.layer setBackgroundColor:[[NSColor colorWithRed:_darkThemeFloatValue green:_darkThemeFloatValue blue:_darkThemeFloatValue alpha:1.0] CGColor]]; 37 | 38 | [self.brightnessSlider setFloatValue:[userDefaults floatForKey:@"brightnessValue"]]; 39 | [self.percentTextField setStringValue:[NSString stringWithFormat:@"%d%%", (int)round([userDefaults floatForKey:@"brightnessValue"] * 100)]]; 40 | } 41 | 42 | - (IBAction)brightnessSliderDidChange:(NSSlider *)slider { 43 | [MacGammaController setInvertedColorsEnabled:NO]; 44 | 45 | float sliderValue = self.brightnessSlider.floatValue; 46 | [userDefaults setFloat:sliderValue forKey:@"brightnessValue"]; 47 | sliderValue = [userDefaults floatForKey:@"brightnessValue"]; 48 | 49 | self.percentTextField.stringValue = [NSString stringWithFormat:@"%d%%", (int)round(sliderValue * 100)]; 50 | [MacGammaController setGammaWithRed:sliderValue green:sliderValue blue:sliderValue]; 51 | 52 | if (self.brightnessSlider.floatValue == 1) { 53 | [self resetBrightness:nil]; 54 | } 55 | 56 | if (self.brightnessSlider.floatValue < 0.3) { 57 | float sliderValue = self.brightnessSlider.floatValue = 0.3; 58 | [userDefaults setFloat:sliderValue forKey:@"brightnessValue"]; 59 | sliderValue = [userDefaults floatForKey:@"brightnessValue"]; 60 | 61 | self.percentTextField.stringValue = [NSString stringWithFormat:@"%d%%", (int)round(sliderValue * 100)]; 62 | [MacGammaController setGammaWithRed:sliderValue green:sliderValue blue:sliderValue]; 63 | 64 | [ShadeViewController showBrightnessAlert]; 65 | } 66 | 67 | [userDefaults setBool:NO forKey:@"darkroomEnabled"]; 68 | [userDefaults setFloat:0 forKey:@"orangeValue"]; 69 | [userDefaults setFloat:0.5 forKey:@"whitePointValue"]; 70 | [userDefaults synchronize]; 71 | } 72 | 73 | + (void)showBrightnessAlert { 74 | NSAlert *alert = [[NSAlert alloc] init]; 75 | [alert setMessageText:@"Warning!"]; 76 | [alert setInformativeText:@"If you set the brightness lower than the current level, you will not be able to see your screen!"]; 77 | [alert addButtonWithTitle:@"OK"]; 78 | [alert runModal]; 79 | } 80 | 81 | - (IBAction)resetBrightness:(NSButton *)button { 82 | [MacGammaController resetAllAdjustments]; 83 | self.brightnessSlider.floatValue = [userDefaults floatForKey:@"brightnessValue"]; 84 | self.percentTextField.stringValue = @"100%"; 85 | } 86 | 87 | @end 88 | -------------------------------------------------------------------------------- /GoodNight-Mac/TabViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TabViewController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 11/23/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface TabViewController : NSTabViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /GoodNight-Mac/TabViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // TabViewController.m 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 11/23/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import "TabViewController.h" 10 | 11 | @implementation TabViewController 12 | 13 | - (void)viewWillAppear { 14 | [super viewWillAppear]; 15 | 16 | self.view.window.titleVisibility = NSWindowTitleHidden; 17 | self.view.window.titlebarAppearsTransparent = YES; 18 | self.view.window.styleMask |= NSWindowStyleMaskFullSizeContentView; 19 | 20 | if (![userDefaults valueForKey:@"alertShowed"]) { 21 | NSAlert *alert = [[NSAlert alloc] init]; 22 | [alert setMessageText:@"Helpful tip!"]; 23 | [alert setInformativeText:@"You must keep GoodNight running in the background to keep the settings you set. However, you can go to File → Close or press ⌘W to close the window and keep the app running."]; 24 | [alert addButtonWithTitle:@"OK"]; 25 | [alert addButtonWithTitle:@"Don't Show Again"]; 26 | 27 | if ([alert runModal] == NSAlertSecondButtonReturn) { 28 | [userDefaults setValue:[NSDate date] forKey:@"alertShowed"]; 29 | } 30 | } 31 | } 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /GoodNight-Mac/TemperatureTouchBarController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TouchBarController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 11/24/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface TemperatureTouchBarController : NSTouchBar 12 | 13 | @property (strong, nonatomic) IBOutlet NSSliderTouchBarItem *touchBarTemperatureSlider; 14 | @property (strong, nonatomic) IBOutlet NSButton *touchBarResetButton; 15 | @property (strong, nonatomic) IBOutlet NSButton *touchBarDarkroomButton; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /GoodNight-Mac/TemperatureTouchBarController.m: -------------------------------------------------------------------------------- 1 | // 2 | // TouchBarController.m 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 11/24/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import "TemperatureTouchBarController.h" 10 | #import "MacGammaController.h" 11 | #import "TemperatureViewController.h" 12 | 13 | @implementation TemperatureTouchBarController 14 | 15 | - (void)awakeFromNib { 16 | [self.touchBarTemperatureSlider.slider setFloatValue:[userDefaults floatForKey:@"orangeValue"]]; 17 | self.touchBarTemperatureSlider.label = [NSString stringWithFormat:@"%dK", (int)round((((self.touchBarTemperatureSlider.slider.maxValue - self.touchBarTemperatureSlider.slider.floatValue) * 45 + 20) * 10) * 10)]; 18 | 19 | [defNotifCenter addObserver:self selector:@selector(defaultsChanged) name:NSUserDefaultsDidChangeNotification object:nil]; 20 | } 21 | 22 | - (void)defaultsChanged { 23 | [self.touchBarTemperatureSlider.slider setFloatValue:[userDefaults floatForKey:@"orangeValue"]]; 24 | self.touchBarTemperatureSlider.label = [NSString stringWithFormat:@"%dK", (int)round((((self.touchBarTemperatureSlider.slider.maxValue - self.touchBarTemperatureSlider.slider.floatValue) * 45 + 20) * 10) * 10)]; 25 | 26 | if ([userDefaults boolForKey:@"darkroomEnabled"]) { 27 | [self.touchBarDarkroomButton setTitle:@"Disable Darkroom"]; 28 | } 29 | else { 30 | [self.touchBarDarkroomButton setTitle:@"Enable Darkroom"]; 31 | } 32 | } 33 | 34 | - (IBAction)touchBarSliderValueDidChange:(NSSliderTouchBarItem *)slider { 35 | [self.touchBarDarkroomButton setTitle:@"Enable Darkroom"]; 36 | [userDefaults setFloat:self.touchBarTemperatureSlider.slider.floatValue forKey:@"orangeValue"]; 37 | [MacGammaController setGammaWithOrangeness:[userDefaults floatForKey:@"orangeValue"]]; 38 | 39 | if (self.touchBarTemperatureSlider.slider.floatValue == 0) { 40 | [self resetTemperature:nil]; 41 | } 42 | 43 | self.touchBarTemperatureSlider.label = [NSString stringWithFormat:@"%dK", (int)round((((self.touchBarTemperatureSlider.slider.maxValue - self.touchBarTemperatureSlider.slider.floatValue) * 45 + 20) * 10) * 10)]; 44 | 45 | [userDefaults setFloat:1 forKey:@"brightnessValue"]; 46 | [userDefaults setFloat:0.5 forKey:@"whitePointValue"]; 47 | [userDefaults setBool:NO forKey:@"darkroomEnabled"]; 48 | [userDefaults synchronize]; 49 | } 50 | 51 | - (IBAction)resetTemperature:(NSButton *)button { 52 | [MacGammaController resetAllAdjustments]; 53 | } 54 | 55 | - (IBAction)toggleDarkroom:(NSButton *)button { 56 | [self.touchBarTemperatureSlider.slider setFloatValue:[userDefaults floatForKey:@"orangeValue"]]; 57 | self.touchBarTemperatureSlider.label = [NSString stringWithFormat:@"%dK", (int)round((((self.touchBarTemperatureSlider.slider.maxValue - self.touchBarTemperatureSlider.slider.floatValue) * 45 + 20) * 10) * 10)]; 58 | 59 | if ([self.touchBarDarkroomButton.title isEqualToString:@"Enable Darkroom"]) { 60 | [self.touchBarDarkroomButton setTitle:@"Disable Darkroom"]; 61 | } 62 | else { 63 | [self.touchBarDarkroomButton setTitle:@"Enable Darkroom"]; 64 | } 65 | 66 | [MacGammaController toggleDarkroom]; 67 | } 68 | 69 | @end 70 | 71 | -------------------------------------------------------------------------------- /GoodNight-Mac/TemperatureViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // GoodNight-Mac 4 | // 5 | // Created by Anthony Agatiello on 11/17/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface TemperatureViewController : NSViewController 12 | 13 | @property (strong, nonatomic) IBOutlet NSSlider *temperatureSlider; 14 | @property (strong, nonatomic) IBOutlet NSTextField *temperatureLabel; 15 | @property (strong, nonatomic) IBOutlet NSButton *darkroomButton; 16 | @property (strong, nonatomic) IBOutlet NSButton *darkThemeButton; 17 | 18 | @end 19 | 20 | @interface TemperatureSlider : NSSlider 21 | 22 | - (float)floatValue; 23 | - (void)setFloatValue:(float)floatValue; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /GoodNight-Mac/WhitePointMacViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // WhitePointMacViewController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 12/9/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface WhitePointMacViewController : NSViewController 12 | 13 | @property (strong, nonatomic) IBOutlet NSSlider *whitePointSlider; 14 | @property (strong, nonatomic) IBOutlet NSTextField *whitePointLabel; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /GoodNight-Mac/WhitePointMacViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // WhitePointMacViewController.m 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 12/9/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import "WhitePointMacViewController.h" 10 | #import "AppDelegate.h" 11 | #import "MacGammaController.h" 12 | 13 | @implementation WhitePointMacViewController 14 | 15 | - (void)viewDidLoad { 16 | [super viewDidLoad]; 17 | 18 | [defNotifCenter addObserver:self selector:@selector(defaultsChanged) name:NSUserDefaultsDidChangeNotification object:nil]; 19 | } 20 | 21 | - (void)viewWillAppear { 22 | [super viewWillAppear]; 23 | 24 | [self.view setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]]; 25 | [self.view.window setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]]; 26 | [self.view.layer setBackgroundColor:[[NSColor colorWithRed:_darkThemeFloatValue green:_darkThemeFloatValue blue:_darkThemeFloatValue alpha:1.0] CGColor]]; 27 | 28 | [self.whitePointSlider setFloatValue:[userDefaults floatForKey:@"whitePointValue"]]; 29 | [self.whitePointLabel setStringValue:[NSString stringWithFormat:@"%d%%", (int)round([userDefaults floatForKey:@"whitePointValue"] * 100) * 2]]; 30 | } 31 | 32 | - (void)dealloc { 33 | [defNotifCenter removeObserver:self name:NSUserDefaultsDidChangeNotification object:nil]; 34 | } 35 | 36 | - (void)defaultsChanged { 37 | [self.whitePointSlider setFloatValue:[userDefaults floatForKey:@"whitePointValue"]]; 38 | [self.whitePointLabel setStringValue:[NSString stringWithFormat:@"%d%%", (int)round([userDefaults floatForKey:@"whitePointValue"] * 100) * 2]]; 39 | } 40 | 41 | - (IBAction)whitePointSliderDidChange:(NSSlider *)slider { 42 | [userDefaults setFloat:self.whitePointSlider.floatValue forKey:@"whitePointValue"]; 43 | self.whitePointLabel.stringValue = [NSString stringWithFormat:@"%d%%", (int)round([userDefaults floatForKey:@"whitePointValue"] * 100) * 2]; 44 | 45 | [MacGammaController setWhitePoint:[userDefaults floatForKey:@"whitePointValue"]]; 46 | 47 | [userDefaults setBool:NO forKey:@"darkroomEnabled"]; 48 | [userDefaults setFloat:1 forKey:@"brightnessValue"]; 49 | [userDefaults setFloat:0 forKey:@"orangeValue"]; 50 | [userDefaults synchronize]; 51 | } 52 | 53 | - (IBAction)resetWhitePoint:(NSButton *)button { 54 | self.whitePointSlider.floatValue = [userDefaults floatForKey:@"whitePointValue"]; 55 | self.whitePointLabel.stringValue = @"100%"; 56 | [MacGammaController resetAllAdjustments]; 57 | } 58 | 59 | @end 60 | -------------------------------------------------------------------------------- /GoodNight-Mac/WhitePointTouchBarController.h: -------------------------------------------------------------------------------- 1 | // 2 | // WhitePointTouchBarController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 12/9/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface WhitePointTouchBarController : NSTouchBar 12 | 13 | @property (strong, nonatomic) IBOutlet NSSliderTouchBarItem *whitePointTouchBarSlider; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /GoodNight-Mac/WhitePointTouchBarController.m: -------------------------------------------------------------------------------- 1 | // 2 | // WhitePointTouchBarController.m 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 12/9/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import "WhitePointTouchBarController.h" 10 | #import "MacGammaController.h" 11 | 12 | @implementation WhitePointTouchBarController 13 | 14 | - (void)awakeFromNib { 15 | [self.whitePointTouchBarSlider.slider setFloatValue:[userDefaults floatForKey:@"whitePointValue"]]; 16 | self.whitePointTouchBarSlider.label = [NSString stringWithFormat:@"%d%%", (int)round([userDefaults floatForKey:@"whitePointValue"] * 100) * 2]; 17 | 18 | [defNotifCenter addObserver:self selector:@selector(defaultsChanged) name:NSUserDefaultsDidChangeNotification object:nil]; 19 | } 20 | 21 | - (void)defaultsChanged { 22 | [self.whitePointTouchBarSlider.slider setFloatValue:[userDefaults floatForKey:@"whitePointValue"]]; 23 | self.whitePointTouchBarSlider.label = [NSString stringWithFormat:@"%d%%", (int)round([userDefaults floatForKey:@"whitePointValue"] * 100) * 2]; 24 | } 25 | 26 | - (IBAction)whitePointTouchBarChanged:(NSSliderTouchBarItem *)slider { 27 | [userDefaults setFloat:self.whitePointTouchBarSlider.slider.floatValue forKey:@"whitePointValue"]; 28 | self.whitePointTouchBarSlider.label = [NSString stringWithFormat:@"%d%%", (int)round([userDefaults floatForKey:@"whitePointValue"] * 100) * 2]; 29 | 30 | [MacGammaController setWhitePoint:[userDefaults floatForKey:@"whitePointValue"]]; 31 | 32 | [userDefaults setFloat:0 forKey:@"orangeValue"]; 33 | [userDefaults setFloat:1 forKey:@"brightnessValue"]; 34 | [userDefaults setBool:NO forKey:@"darkroomEnabled"]; 35 | [userDefaults synchronize]; 36 | } 37 | 38 | - (IBAction)resetWhitePoint:(NSButton *)button { 39 | [MacGammaController resetAllAdjustments]; 40 | self.whitePointTouchBarSlider.label = @"100%"; 41 | self.whitePointTouchBarSlider.slider.floatValue = [userDefaults floatForKey:@"whitePointValue"]; 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /GoodNight-Mac/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // GoodNight-Mac 4 | // 5 | // Created by Anthony Agatiello on 11/17/16. 6 | // Copyright © 2016 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, const char * argv[]) { 12 | return NSApplicationMain(argc, argv); 13 | } 14 | -------------------------------------------------------------------------------- /GoodNight.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /GoodNight.xcodeproj/xcuserdata/Alice.xcuserdatad/xcschemes/GoodNight Widget.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 10 | 16 | 22 | 23 | 24 | 30 | 36 | 37 | 38 | 39 | 40 | 45 | 46 | 47 | 48 | 54 | 55 | 56 | 57 | 58 | 59 | 70 | 72 | 78 | 79 | 80 | 81 | 82 | 83 | 90 | 92 | 98 | 99 | 100 | 101 | 103 | 104 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /GoodNight.xcodeproj/xcuserdata/Alice.xcuserdatad/xcschemes/GoodNight.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /GoodNight.xcodeproj/xcuserdata/Alice.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | GoodNight Widget.xcscheme 8 | 9 | orderHint 10 | 1 11 | 12 | GoodNight.xcscheme 13 | 14 | orderHint 15 | 0 16 | 17 | 18 | SuppressBuildableAutocreation 19 | 20 | 925B811D1BE2BCE1003A6C4B 21 | 22 | primary 23 | 24 | 25 | B9E536451B38D90D0097BF90 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /GoodNight.xcodeproj/xcuserdata/Anthony.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /GoodNight.xcodeproj/xcuserdata/Anthony.xcuserdatad/xcschemes/GoodNight Widget.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 10 | 16 | 22 | 23 | 24 | 30 | 36 | 37 | 38 | 39 | 40 | 45 | 46 | 47 | 48 | 54 | 55 | 56 | 57 | 58 | 59 | 70 | 72 | 78 | 79 | 80 | 81 | 82 | 83 | 90 | 92 | 98 | 99 | 100 | 101 | 103 | 104 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /GoodNight.xcodeproj/xcuserdata/Anthony.xcuserdatad/xcschemes/GoodNight-Mac.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /GoodNight.xcodeproj/xcuserdata/Anthony.xcuserdatad/xcschemes/GoodNight.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /GoodNight.xcodeproj/xcuserdata/Anthony.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | GoodNight Widget.xcscheme 8 | 9 | orderHint 10 | 1 11 | 12 | GoodNight-Mac.xcscheme 13 | 14 | orderHint 15 | 2 16 | 17 | GoodNight.xcscheme 18 | 19 | orderHint 20 | 0 21 | 22 | 23 | SuppressBuildableAutocreation 24 | 25 | 922B281C1DDE81CF0075C274 26 | 27 | primary 28 | 29 | 30 | 925B811D1BE2BCE1003A6C4B 31 | 32 | primary 33 | 34 | 35 | B9E536451B38D90D0097BF90 36 | 37 | primary 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /GoodNight/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 6/22/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | + (void)updateNotifications; 14 | + (id)initWithIdentifier:(NSString *)identifier; 15 | + (BOOL)checkAlertNeededWithViewController:(UIViewController*)vc andExecutionBlock:(void(^)(UIAlertAction *action))block forKeys:(NSString *)firstKey, ... NS_REQUIRES_NIL_TERMINATION; 16 | 17 | @property (strong, nonatomic) UIWindow *window; 18 | 19 | @end -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/AppIcon.appiconset/120-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/AppIcon.appiconset/120-1.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/AppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/AppIcon.appiconset/152.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/AppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/AppIcon.appiconset/167.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/AppIcon.appiconset/58-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/AppIcon.appiconset/58-1.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/AppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/AppIcon.appiconset/76.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/AppIcon.appiconset/80-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/AppIcon.appiconset/80-1.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "29x29", 5 | "idiom" : "iphone", 6 | "filename" : "58.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "29x29", 11 | "idiom" : "iphone", 12 | "filename" : "87.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "40x40", 17 | "idiom" : "iphone", 18 | "filename" : "80.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "40x40", 23 | "idiom" : "iphone", 24 | "filename" : "120.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "60x60", 29 | "idiom" : "iphone", 30 | "filename" : "120-1.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "60x60", 35 | "idiom" : "iphone", 36 | "filename" : "180.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "29x29", 41 | "idiom" : "ipad", 42 | "filename" : "29.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "29x29", 47 | "idiom" : "ipad", 48 | "filename" : "58-1.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "40x40", 53 | "idiom" : "ipad", 54 | "filename" : "40.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "40x40", 59 | "idiom" : "ipad", 60 | "filename" : "80-1.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "76x76", 65 | "idiom" : "ipad", 66 | "filename" : "76.png", 67 | "scale" : "1x" 68 | }, 69 | { 70 | "size" : "76x76", 71 | "idiom" : "ipad", 72 | "filename" : "152.png", 73 | "scale" : "2x" 74 | }, 75 | { 76 | "size" : "83.5x83.5", 77 | "idiom" : "ipad", 78 | "filename" : "167.png", 79 | "scale" : "2x" 80 | } 81 | ], 82 | "info" : { 83 | "version" : 1, 84 | "author" : "xcode" 85 | } 86 | } -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/Brand Assets.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "ipad", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "1x" 9 | }, 10 | { 11 | "orientation" : "landscape", 12 | "idiom" : "ipad", 13 | "extent" : "full-screen", 14 | "minimum-system-version" : "7.0", 15 | "scale" : "1x" 16 | }, 17 | { 18 | "orientation" : "portrait", 19 | "idiom" : "ipad", 20 | "extent" : "full-screen", 21 | "minimum-system-version" : "7.0", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "orientation" : "landscape", 26 | "idiom" : "ipad", 27 | "extent" : "full-screen", 28 | "minimum-system-version" : "7.0", 29 | "scale" : "2x" 30 | } 31 | ], 32 | "info" : { 33 | "version" : 1, 34 | "author" : "xcode" 35 | } 36 | } -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/disable-switch.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Toggle Off-35.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Toggle Off-70.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Toggle Off-105.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/disable-switch.imageset/Toggle Off-105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/disable-switch.imageset/Toggle Off-105.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/disable-switch.imageset/Toggle Off-35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/disable-switch.imageset/Toggle Off-35.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/disable-switch.imageset/Toggle Off-70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/disable-switch.imageset/Toggle Off-70.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/enable-switch.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Toggle On Filled-35.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Toggle On Filled-70.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Toggle On Filled-105.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/enable-switch.imageset/Toggle On Filled-105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/enable-switch.imageset/Toggle On Filled-105.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/enable-switch.imageset/Toggle On Filled-35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/enable-switch.imageset/Toggle On Filled-35.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/enable-switch.imageset/Toggle On Filled-70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/enable-switch.imageset/Toggle On Filled-70.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/launch.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "launch.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "launch@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "launch@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/launch.imageset/launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/launch.imageset/launch.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/launch.imageset/launch@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/launch.imageset/launch@2x.png -------------------------------------------------------------------------------- /GoodNight/Assets.xcassets/launch.imageset/launch@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Assets.xcassets/launch.imageset/launch@3x.png -------------------------------------------------------------------------------- /GoodNight/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /GoodNight/Base.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/Base.lproj/Localizable.strings -------------------------------------------------------------------------------- /GoodNight/BrightnessViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BrightnessViewController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 10/4/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | static BOOL warningIgnored; 13 | 14 | @interface BrightnessViewController : UITableViewController 15 | 16 | @property (weak, nonatomic) IBOutlet UISwitch *dimSwitch; 17 | @property (weak, nonatomic) IBOutlet UISwitch *darkroomSwitch; 18 | @property (weak, nonatomic) IBOutlet UISlider *dimSlider; 19 | 20 | @end -------------------------------------------------------------------------------- /GoodNight/CreditsViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FirstViewController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 10/4/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | 13 | static NSString *username = nil; 14 | static BOOL webViewShouldAppear = NO; 15 | 16 | @interface CreditsViewController : UITableViewController 17 | 18 | @end -------------------------------------------------------------------------------- /GoodNight/CreditsViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FirstViewController.m 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 10/4/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import "CreditsViewController.h" 10 | #import "AppDelegate.h" 11 | 12 | @implementation CreditsViewController 13 | 14 | - (instancetype)init 15 | { 16 | self = [AppDelegate initWithIdentifier:@"creditsViewController"]; 17 | return self; 18 | } 19 | 20 | - (void)viewDidLoad { 21 | [super viewDidLoad]; 22 | if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0") && self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) { 23 | [self registerForPreviewingWithDelegate:self sourceView:self.view]; 24 | } 25 | } 26 | 27 | - (UIViewController *)previewingContext:(id)previewingContext viewControllerForLocation:(CGPoint)location 28 | { 29 | if ([groupDefaults boolForKey:@"peekPopEnabled"]) { 30 | NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location]; 31 | 32 | if (indexPath) { 33 | UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 34 | NSString *cellText = [cell.textLabel.text substringFromIndex:1]; 35 | previewingContext.sourceRect = cell.frame; 36 | SFSafariViewController *safariVC = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://twitter.com/%@", cellText]] entersReaderIfAvailable:NO]; 37 | safariVC.delegate = self; 38 | username = cell.textLabel.text; 39 | return safariVC; 40 | } 41 | } 42 | return nil; 43 | } 44 | 45 | - (void)previewingContext:(id)previewingContext commitViewController:(UIViewController *)viewControllerToCommit { 46 | [self openTwitterAccount]; 47 | } 48 | 49 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 50 | if (tableView) { 51 | if (indexPath.section == 0) { 52 | if (indexPath.row == 0) { 53 | username = @"tomf64"; 54 | } 55 | if (indexPath.row == 1) { 56 | username = @"AAgatiello"; 57 | } 58 | if (indexPath.row == 2) { 59 | username = @"GoodNightiOS"; 60 | } 61 | if (indexPath.row == 3) { 62 | username = @"sapphirinedream"; 63 | } 64 | if (indexPath.row == 4) { 65 | username = @"Emu4iOS"; 66 | } 67 | if (indexPath.row == 5) { 68 | username = @"The120thWhisper"; 69 | } 70 | if (indexPath.row == 6) { 71 | username = @"lyablin_nikita"; 72 | } 73 | if (indexPath.row == 7) { 74 | username = @"mariokorte"; 75 | } 76 | [self openTwitterAccount]; 77 | } 78 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 79 | } 80 | } 81 | 82 | - (void)openTwitterAccount { 83 | NSString *scheme = @""; 84 | if ([app canOpenURL:[NSURL URLWithString:@"twitter://"]]) // Twitter 85 | { 86 | scheme = [NSString stringWithFormat:@"twitter://user?screen_name=%@",username]; 87 | } 88 | else if ([app canOpenURL:[NSURL URLWithString:@"tweetbot:"]]) // Tweetbot 89 | { 90 | scheme = [NSString stringWithFormat:@"tweetbot:///user_profile/%@",username]; 91 | } 92 | else if ([app canOpenURL:[NSURL URLWithString:@"twitterrific://"]]) // Twitterrific 93 | { 94 | scheme = [NSString stringWithFormat:@"twitterrific:///profile?screen_name=%@",username]; 95 | } 96 | else 97 | { 98 | if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) 99 | { 100 | SFSafariViewController *safariVC = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://twitter.com/%@", username]] entersReaderIfAvailable:NO]; 101 | safariVC.delegate = self; 102 | webViewShouldAppear = YES; 103 | [self presentViewController:safariVC animated:YES completion:nil]; 104 | } 105 | else 106 | { 107 | scheme = [NSString stringWithFormat:@"http://twitter.com/%@",username]; 108 | } 109 | } 110 | if (webViewShouldAppear == NO) { 111 | [app openURL:[NSURL URLWithString:scheme]]; 112 | } 113 | } 114 | 115 | @end 116 | -------------------------------------------------------------------------------- /GoodNight/CustomViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CustomViewController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 10/4/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | static BOOL warningIgnored; 13 | 14 | @interface CustomViewController : UITableViewController 15 | 16 | @property (weak, nonatomic) IBOutlet UISwitch *rgbSwitch; 17 | @property (weak, nonatomic) IBOutlet UISlider *redSlider; 18 | @property (weak, nonatomic) IBOutlet UISlider *greenSlider; 19 | @property (weak, nonatomic) IBOutlet UISlider *blueSlider; 20 | 21 | @end -------------------------------------------------------------------------------- /GoodNight/Defaults.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | redValue 6 | 1 7 | greenValue 8 | 1 9 | blueValue 10 | 1 11 | dimLevel 12 | 1 13 | enabled 14 | 15 | dimEnabled 16 | 17 | rgbEnabled 18 | 19 | darkroomEnabled 20 | 21 | colorChangingNightEnabled 22 | 23 | maxOrange 24 | 0.3111111111 25 | nightOrange 26 | 0 27 | dayOrange 28 | 1 29 | currentOrange 30 | 1 31 | colorChangingEnabled 32 | 33 | whitePointValue 34 | 0.65535 35 | whitePointEnabled 36 | 37 | whitePointForceTouch 38 | 39 | lastAutoChangeDate 40 | 1-12-30T00:00:00Z 41 | autoStartHour 42 | 19 43 | autoStartMinute 44 | 0 45 | autoEndHour 46 | 7 47 | autoEndMinute 48 | 0 49 | nightStartHour 50 | 23 51 | nightStartMinute 52 | 0 53 | nightEndHour 54 | 6 55 | nightEndMinute 56 | 0 57 | colorChangingLocationLatitude 58 | 0 59 | colorChangingLocationLongitude 60 | 0 61 | colorChangingLocationEnabled 62 | 63 | suspendEnabled 64 | 65 | forceTouchEnabled 66 | 67 | tempForceTouch 68 | 69 | dimForceTouch 70 | 71 | rgbForceTouch 72 | 73 | peekPopEnabled 74 | 75 | keyEnabled 76 | 0 77 | lastBackgroundCheck 78 | 1-12-30T00:00:00Z 79 | 80 | 81 | -------------------------------------------------------------------------------- /GoodNight/ForceTouchController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ForceTouchController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 10/20/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | static BOOL forceTouchActionEnabled = NO; 13 | 14 | @interface ForceTouchController : NSObject 15 | 16 | + (instancetype)sharedInstance; 17 | + (UIApplicationShortcutItem *)shortcutItemForCurrentState; 18 | + (void)updateShortcutItems; 19 | + (BOOL)handleShortcutItem:(UIApplicationShortcutItem *)shortcutItem; 20 | + (void)exitIfKeyEnabled; 21 | + (void)showFailedAlertWithKey:(NSString *)key; 22 | 23 | @end -------------------------------------------------------------------------------- /GoodNight/GammaController.h: -------------------------------------------------------------------------------- 1 | // 2 | // GammaController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 6/22/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef NS_ENUM(int, TimeBasedAction) { 12 | SwitchToOrangeness, 13 | SwitchToStandard, 14 | KeepOrangenessEnabled, 15 | KeepStandardEnabled 16 | }; 17 | 18 | static uint32_t minWhitePointValue; 19 | static NSOperationQueue *animationQueue = nil; 20 | 21 | @interface GammaController : NSObject 22 | 23 | + (void)setWhitePoint:(uint32_t)value; 24 | + (void)resetWhitePoint; 25 | + (uint32_t)getMinimumWhitePoint; 26 | 27 | + (void)autoChangeOrangenessIfNeededWithTransition:(BOOL)transition; 28 | + (void)setGammaWithMatrixAndRed:(float)red green:(float)green blue:(float)blue; 29 | + (void)enableOrangenessWithDefaults:(BOOL)defaults transition:(BOOL)transition; 30 | + (void)enableOrangenessWithDefaults:(BOOL)defaults transition:(BOOL)transition orangeLevel:(float)orangeLevel; 31 | + (void)setGammaWithTransitionFrom:(float)oldPercentOrange to:(float)newPercentOrange; 32 | + (void)disableGammaWithTransition:(BOOL)transition; 33 | + (void)enableDimness; 34 | + (void)setGammaWithCustomValues; 35 | + (void)suspendApp; 36 | + (void)disableColorAdjustment; 37 | + (void)disableDimness; 38 | + (void)disableOrangeness; 39 | + (TimeBasedAction)timeBasedActionForPrefix:(NSString*)autoOrNightPrefix; 40 | + (TimeBasedAction)timeBasedActionForLocationWithNewOrangeLevel:(float*)newOrangeLevel; 41 | + (void)setDarkroomEnabled:(BOOL)enable; 42 | + (BOOL)adjustmentForKeysEnabled:(NSString *)firstKey, ... NS_REQUIRES_NIL_TERMINATION; 43 | + (BOOL)adjustmentForKeysEnabled:(NSString *)firstKey withParameters:(va_list)valist; 44 | 45 | @end -------------------------------------------------------------------------------- /GoodNight/GoodNight.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.application-groups 6 | 7 | group.com.agatiello.GoodNight 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /GoodNight/IOMobileFramebufferClient.h: -------------------------------------------------------------------------------- 1 | // 2 | // IOMobileFramebufferClient.h 3 | // GoodNight 4 | // 5 | // Created by Manu Wallner on 11.12.2015. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | static void *IOMobileFramebufferHandle = NULL; 12 | typedef struct __IOMobileFramebuffer *IOMobileFramebufferConnection; 13 | typedef kern_return_t IOMobileFramebufferReturn; 14 | 15 | #define IOMFB_PATH "/System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/IOMobileFramebuffer" 16 | 17 | typedef NS_ENUM(int, IOMobileFramebufferColorRemapMode) { 18 | IOMobileFramebufferColorRemapModeError = -1, 19 | IOMobileFramebufferColorRemapModeNormal = 0, 20 | IOMobileFramebufferColorRemapModeInverted = 1, 21 | IOMobileFramebufferColorRemapModeGrayscale = 2, 22 | IOMobileFramebufferColorRemapModeGrayscaleIncreaseContrast = 3, 23 | IOMobileFramebufferColorRemapModeInvertedGrayscale = 4 24 | }; 25 | 26 | typedef struct { 27 | uint32_t values[0xc0c/sizeof(uint32_t)]; 28 | } IOMobileFramebufferGammaTable; 29 | 30 | typedef long s1516; 31 | extern s1516 GamutMatrixValue(double value); 32 | 33 | typedef struct { 34 | union { 35 | s1516 matrix[3][3]; 36 | } content; 37 | } IOMobileFramebufferGamutMatrix; 38 | 39 | typedef NS_ENUM(uint32_t, IOMobileFramebufferBrightnessCorrection) { 40 | IOMobileFramebufferBrightnessCorrectionDefault = 65535 41 | }; 42 | 43 | @interface IOMobileFramebufferClient : NSObject 44 | 45 | @property (nonatomic, readonly) IOMobileFramebufferConnection framebufferConnection; 46 | 47 | + (instancetype)sharedInstance; 48 | 49 | - (IOMobileFramebufferColorRemapMode)colorRemapMode; 50 | - (void)setColorRemapMode:(IOMobileFramebufferColorRemapMode)mode; 51 | 52 | - (void)setWhiteOnBlackMode:(BOOL)enabled; 53 | 54 | - (void)setBrightnessCorrection:(IOMobileFramebufferBrightnessCorrection)correction; 55 | - (void)resetBrightnessCorrection; 56 | 57 | - (void)gamutMatrix:(IOMobileFramebufferGamutMatrix *)matrix; 58 | - (void)setGamutMatrix:(IOMobileFramebufferGamutMatrix *)matrix; 59 | - (void)gammaTable:(IOMobileFramebufferGammaTable *)table; 60 | - (void)setGammaTable:(IOMobileFramebufferGammaTable *)table; 61 | 62 | - (BOOL)gamutMatrixFunctionIsUsable; 63 | - (BOOL)setColorRemapFunctionIsUsable; 64 | 65 | @end 66 | -------------------------------------------------------------------------------- /GoodNight/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleURLTypes 22 | 23 | 24 | CFBundleURLName 25 | $(PRODUCT_BUNDLE_IDENTIFIER) 26 | CFBundleURLSchemes 27 | 28 | goodnight 29 | 30 | 31 | 32 | CFBundleVersion 33 | 1 34 | LSApplicationQueriesSchemes 35 | 36 | twitter 37 | tweetbot 38 | twitterrific 39 | 40 | LSRequiresIPhoneOS 41 | 42 | NSLocationWhenInUseUsageDescription 43 | Your location is required once in order to provide location based screen temperature 44 | UIBackgroundModes 45 | 46 | fetch 47 | remote-notification 48 | voip 49 | 50 | UILaunchStoryboardName 51 | LaunchScreen 52 | UIMainStoryboardFile 53 | Storyboard 54 | UIRequiredDeviceCapabilities 55 | 56 | armv7 57 | 58 | UIRequiresFullScreen 59 | 60 | UISupportedInterfaceOrientations 61 | 62 | UIInterfaceOrientationPortrait 63 | UIInterfaceOrientationPortraitUpsideDown 64 | UIInterfaceOrientationLandscapeRight 65 | UIInterfaceOrientationLandscapeLeft 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /GoodNight/InitialViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // InitialViewController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 10/16/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface InitialViewController : UITableViewController 13 | 14 | @end -------------------------------------------------------------------------------- /GoodNight/InitialViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // InitialViewController.m 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 10/16/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import "InitialViewController.h" 10 | #import "AppDelegate.h" 11 | 12 | @implementation InitialViewController 13 | 14 | - (void)viewDidLoad { 15 | [super viewDidLoad]; 16 | if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0") && self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) { 17 | [self registerForPreviewingWithDelegate:self sourceView:self.view]; 18 | } 19 | } 20 | 21 | - (UIViewController *)previewingContext:(id)previewingContext viewControllerForLocation:(CGPoint)location 22 | { 23 | if ([groupDefaults boolForKey:@"peekPopEnabled"]) { 24 | NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location]; 25 | 26 | if (indexPath) { 27 | UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 28 | NSString *identifier = nil; 29 | 30 | if (indexPath.section == 0) { 31 | if (indexPath.row == 0) { 32 | identifier = @"mainViewController"; 33 | } 34 | if (indexPath.row == 1) { 35 | identifier = @"whitepointController"; 36 | } 37 | if (indexPath.row == 2) { 38 | identifier = @"brightnessViewController"; 39 | } 40 | if (indexPath.row == 3) { 41 | identifier = @"colorViewController"; 42 | } 43 | } 44 | 45 | if (indexPath.section == 1) { 46 | if (indexPath.row == 0) { 47 | identifier = @"settingsViewController"; 48 | } 49 | } 50 | 51 | if (indexPath.section == 2) { 52 | if (indexPath.row == 0) { 53 | identifier = @"creditsViewController"; 54 | } 55 | } 56 | 57 | previewingContext.sourceRect = cell.frame; 58 | UIViewController *viewController = [AppDelegate initWithIdentifier:identifier]; 59 | return viewController; 60 | } 61 | } 62 | return nil; 63 | } 64 | 65 | - (void)previewingContext:(id)previewingContext commitViewController:(UIViewController *)viewControllerToCommit { 66 | [self.navigationController pushViewController:viewControllerToCommit animated:YES]; 67 | } 68 | 69 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 70 | NSString *identifier = nil; 71 | if (indexPath.section == 0) { 72 | if (indexPath.row == 0) { 73 | identifier = @"mainViewController"; 74 | } 75 | if (indexPath.row == 1) { 76 | identifier = @"whitepointController"; 77 | } 78 | if (indexPath.row == 2) { 79 | identifier = @"brightnessViewController"; 80 | } 81 | if (indexPath.row == 3) { 82 | identifier = @"colorViewController"; 83 | } 84 | } 85 | if (indexPath.section == 1) { 86 | if (indexPath.row == 0) { 87 | identifier = @"settingsViewController"; 88 | } 89 | } 90 | if (indexPath.section == 2) { 91 | if (indexPath.row == 0) { 92 | identifier = @"creditsViewController"; 93 | } 94 | } 95 | UIViewController *viewController = [AppDelegate initWithIdentifier:identifier]; 96 | [self.navigationController pushViewController:viewController animated:YES]; 97 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 98 | } 99 | 100 | @end 101 | -------------------------------------------------------------------------------- /GoodNight/MainViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 6/22/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | 13 | @interface MainViewController : UITableViewController 14 | 15 | @property NSDateFormatter *timeFormatter; 16 | @property UIDatePicker *timePicker; 17 | @property UIToolbar *timePickerToolbar; 18 | 19 | @property (weak, nonatomic) IBOutlet UISwitch *enabledSwitch; 20 | @property (weak, nonatomic) IBOutlet UISegmentedControl *timeOfDaySegmentedControl; 21 | @property (weak, nonatomic) IBOutlet UISlider *orangeSlider, *currentOrangeSlider; 22 | @property (weak, nonatomic) IBOutlet UISwitch *colorChangingEnabledSwitch; 23 | @property (weak, nonatomic) IBOutlet UISwitch *colorChangingLocationBasedSwitch; 24 | @property (weak, nonatomic) IBOutlet UISwitch *colorChangingNightModeSwitch; 25 | @property (weak, nonatomic) IBOutlet UITextField *startTimeTextField; 26 | @property (weak, nonatomic) IBOutlet UITextField *endTimeTextField; 27 | @property (weak, nonatomic) IBOutlet UITextField *startTimeNightTextField; 28 | @property (weak, nonatomic) IBOutlet UITextField *endTimeNightTextField; 29 | 30 | @property CLLocationManager * locationManager; 31 | 32 | @end -------------------------------------------------------------------------------- /GoodNight/MobileGestaltClient.h: -------------------------------------------------------------------------------- 1 | // 2 | // MobileGestaltClient.h 3 | // GoodNight 4 | // 5 | // Created by Mario Korte on 11.12.2015. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | static void *MobileGestaltClientHandle = NULL; 12 | static CFStringRef HWModelString = NULL; 13 | 14 | #define LMG_PATH "/usr/lib/libMobileGestalt.dylib" 15 | 16 | @interface MobileGestaltClient : NSObject 17 | 18 | + (instancetype)sharedInstance; 19 | 20 | - (CFStringRef)MGGetHWModelStr; 21 | 22 | @end -------------------------------------------------------------------------------- /GoodNight/MobileGestaltClient.m: -------------------------------------------------------------------------------- 1 | // 2 | // MobileGestaltClient.m 3 | // GoodNight 4 | // 5 | // Created by Mario Korte on 11.12.2015. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "MobileGestaltClient.h" 11 | 12 | @implementation MobileGestaltClient 13 | 14 | + (void)initialize { 15 | [super initialize]; 16 | 17 | MobileGestaltClientHandle = dlopen(LMG_PATH, RTLD_GLOBAL | RTLD_LAZY); 18 | NSParameterAssert(MobileGestaltClientHandle); 19 | } 20 | 21 | + (instancetype)sharedInstance { 22 | static dispatch_once_t onceToken = 0; 23 | static MobileGestaltClient *sharedMobileGestaltClient = nil; 24 | 25 | dispatch_once(&onceToken, ^{ 26 | sharedMobileGestaltClient = [[self alloc] init]; 27 | }); 28 | 29 | return sharedMobileGestaltClient; 30 | } 31 | 32 | - (void)dealloc { 33 | dlclose(MobileGestaltClientHandle); 34 | } 35 | 36 | - (CFStringRef)callMGCopyAnswer:(CFStringRef)input { 37 | CFStringRef (*MGCopyAnswer)(CFStringRef model) = dlsym(MobileGestaltClientHandle, "MGCopyAnswer"); 38 | NSParameterAssert(MGCopyAnswer); 39 | CFStringRef answer = MGCopyAnswer(input); 40 | return answer; 41 | } 42 | 43 | - (CFStringRef)MGGetHWModelStr { 44 | if (!HWModelString) { 45 | HWModelString = [self callMGCopyAnswer:CFSTR("HWModelStr")]; 46 | } 47 | return HWModelString; 48 | } 49 | 50 | @end -------------------------------------------------------------------------------- /GoodNight/PrefixHeader.pch: -------------------------------------------------------------------------------- 1 | // 2 | // PrefixHeader.pch 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 10/15/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #ifndef PrefixHeader_pch 10 | #define PrefixHeader_pch 11 | 12 | #define appGroupID @"group.com.agatiello.GoodNight" 13 | #define userDefaults [NSUserDefaults standardUserDefaults] 14 | #define groupDefaults [[NSUserDefaults alloc] initWithSuiteName:appGroupID] 15 | #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 16 | #define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 17 | #define app [UIApplication sharedApplication] 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /GoodNight/SettingsViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SettingsViewController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 10/16/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface SettingsViewController : UITableViewController 13 | 14 | @property (weak, nonatomic) IBOutlet UISwitch *suspendSwitch; 15 | @property (weak, nonatomic) IBOutlet UISwitch *forceTouchSwitch; 16 | @property (weak, nonatomic) IBOutlet UISwitch *peekPopSwitch; 17 | @property (weak, nonatomic) IBOutlet UISwitch *temperatureForceTouch; 18 | @property (weak, nonatomic) IBOutlet UISwitch *dimForceTouch; 19 | @property (weak, nonatomic) IBOutlet UISwitch *rgbForceTouch; 20 | @property (weak, nonatomic) IBOutlet UISwitch *wpForceTouchSwitch; 21 | 22 | @end -------------------------------------------------------------------------------- /GoodNight/SpringBoardServicesClient.h: -------------------------------------------------------------------------------- 1 | // 2 | // SpringBoardServicesClient.h 3 | // GoodNight 4 | // 5 | // Created by Mario Korte on 11.12.2015. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | static void *SpringBoardServicesHandle = NULL; 12 | typedef kern_return_t SpringBoardServicesReturn; 13 | 14 | @interface SpringBoardServicesClient : NSObject 15 | 16 | @property (nonatomic, readonly) mach_port_t sbsMachPort; 17 | 18 | + (instancetype)sharedInstance; 19 | - (BOOL)SBGetScreenLockStatusIsLocked; 20 | - (BOOL)SBGetScreenLockStatusIsPasscodeEnabled; 21 | - (void)SBSuspend; 22 | - (void)SBSUndimScreen; 23 | 24 | @end -------------------------------------------------------------------------------- /GoodNight/SpringBoardServicesClient.m: -------------------------------------------------------------------------------- 1 | // 2 | // SpringBoardServicesClient.m 3 | // GoodNight 4 | // 5 | // Created by Mario Korte on 11.12.2015. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "SpringBoardServicesClient.h" 11 | 12 | #define SBS_PATH "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices" 13 | 14 | @implementation SpringBoardServicesClient 15 | 16 | + (void)initialize { 17 | [super initialize]; 18 | SpringBoardServicesHandle = dlopen(SBS_PATH, RTLD_LAZY); 19 | NSParameterAssert(SpringBoardServicesHandle); 20 | } 21 | 22 | + (instancetype)sharedInstance { 23 | static dispatch_once_t onceToken = 0; 24 | static SpringBoardServicesClient *sharedSpringBoardServicesClient = nil; 25 | 26 | dispatch_once(&onceToken, ^{ 27 | sharedSpringBoardServicesClient = [[self alloc] init]; 28 | }); 29 | 30 | return sharedSpringBoardServicesClient; 31 | } 32 | 33 | + (mach_port_t)mainSpringBoardServicesMachPort { 34 | mach_port_t (*SBSSpringBoardServerPort)() = dlsym(SpringBoardServicesHandle, "SBSSpringBoardServerPort"); 35 | NSParameterAssert(SBSSpringBoardServerPort); 36 | return SBSSpringBoardServerPort(); 37 | } 38 | 39 | - (instancetype)init { 40 | self = [super init]; 41 | if (self) { 42 | _sbsMachPort = [self.class mainSpringBoardServicesMachPort]; 43 | } 44 | return self; 45 | } 46 | 47 | - (void)dealloc { 48 | dlclose(SpringBoardServicesHandle); 49 | } 50 | 51 | - (void)callSBGetScreenLockStatusWithLocked:(BOOL*)isLocked andPasscodeEnabled:(BOOL*)passcodeEnabled{ 52 | void *(*SBGetScreenLockStatus)(mach_port_t port, BOOL *isLocked, BOOL *passcodeEnabled) = dlsym(SpringBoardServicesHandle, "SBGetScreenLockStatus"); 53 | NSParameterAssert(SBGetScreenLockStatus); 54 | SBGetScreenLockStatus(self.sbsMachPort, isLocked, passcodeEnabled); 55 | } 56 | 57 | - (BOOL)SBGetScreenLockStatusIsLocked{ 58 | BOOL isLocked, passcodeEnabled; 59 | [self callSBGetScreenLockStatusWithLocked:&isLocked andPasscodeEnabled:&passcodeEnabled]; 60 | return isLocked; 61 | } 62 | 63 | - (BOOL)SBGetScreenLockStatusIsPasscodeEnabled{ 64 | BOOL isLocked, passcodeEnabled; 65 | [self callSBGetScreenLockStatusWithLocked:&isLocked andPasscodeEnabled:&passcodeEnabled]; 66 | return passcodeEnabled; 67 | } 68 | 69 | - (void)SBSuspend{ 70 | SpringBoardServicesReturn (*SBSuspend)(mach_port_t port) = dlsym(SpringBoardServicesHandle, "SBSuspend"); 71 | NSParameterAssert(SBSuspend); 72 | SBSuspend(self.sbsMachPort); 73 | } 74 | 75 | - (void)SBSUndimScreen{ 76 | void *(*SBSUndimScreen)() = dlsym(SpringBoardServicesHandle, "SBSUndimScreen"); 77 | NSParameterAssert(SBSUndimScreen); 78 | SBSUndimScreen(); 79 | } 80 | 81 | @end -------------------------------------------------------------------------------- /GoodNight/WhitePointViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // WhitePointViewController.h 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 12/18/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface WhitePointViewController : UITableViewController 12 | 13 | @property (weak, nonatomic) IBOutlet UISlider *whitePointSlider; 14 | @property (weak, nonatomic) IBOutlet UISwitch *whitePointSwitch; 15 | 16 | @end -------------------------------------------------------------------------------- /GoodNight/de.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /GoodNight/de.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/de.lproj/Localizable.strings -------------------------------------------------------------------------------- /GoodNight/fr.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /GoodNight/fr.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/fr.lproj/Localizable.strings -------------------------------------------------------------------------------- /GoodNight/ja.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /GoodNight/ja.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/ja.lproj/Localizable.strings -------------------------------------------------------------------------------- /GoodNight/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // GoodNight 4 | // 5 | // Created by Anthony Agatiello on 6/22/15. 6 | // Copyright © 2015 ADA Tech, LLC. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | int main(int argc, char * argv[]) { 12 | @autoreleasepool { 13 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /GoodNight/nl.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/nl.lproj/LaunchScreen.strings -------------------------------------------------------------------------------- /GoodNight/nl.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/GoodNight/nl.lproj/Localizable.strings -------------------------------------------------------------------------------- /Help/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Help/1.png -------------------------------------------------------------------------------- /Help/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Help/2.png -------------------------------------------------------------------------------- /Help/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Help/3.png -------------------------------------------------------------------------------- /Help/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Help/4.png -------------------------------------------------------------------------------- /Help/README.md: -------------------------------------------------------------------------------- 1 | # Installing GoodNight 2 | 3 | 1. Download the [latest version of Xcode][1]. 4 | 2. Download and unzip the [.zip of GoodNight][2]. 5 | 3. Open `GoodNight.xcodeproj` in Xcode. 6 | 4. Select **GoodNight**, then open the **General** tab. 7 | 5. Change **Bundle Identifier** to `com..goodnight` where 8 | `` is some arbitrary string of characters a-z. 9 | 6. Change **Team** to your own Apple ID. 10 | 7. Click **Fix Issue** below **Team**. 11 | ![1](1.png) 12 | 8. Open **Capabilities** tab and make sure **App Groups** is enabled. 13 | 9. Enter `group.com..goodnight` as group name (click +) and check this group. 14 | 10. Click **Fix Issue** in the App Group section below **Steps**. 15 | ![2](2.png) 16 | 11. Repeat 4-10 for **GoodNight-Widget**. (Make sure the **Bundle Identifier** has 17 | the same arbitrary string as the first one.) 18 | 12. Open `PrefixHeader.pch` and also change the definition of **appGroupID** to `group.com..goodnight`. 19 | ![3](3.png) 20 | 13. Ensure that `GoodNight/GoodNight/Supporting Files/GoodNight.entitlements` and `GoodNight/GoodNight Widget/Supporting Files/GoodNight.entitlements` reference the correct group. 21 | ![4](4.png) 22 | 14. Select your iOS Device in Xcode, then unlock it (type in your passcode if you 23 | have one). 24 | 15. Hit `⌘R` to install. (You may get "Process launch failed: Security." That's 25 | OK.) 26 | 16. On your iOS device, go to **Settings → General → Profile (or Device Management in iOS 8) → 27 | \** and hit **Trust**. Note that **Profile** can also be known as **Profiles** or **Profiles & Device Management**. 28 | 17. If your device was not connected to the Internet when you trusted the app developer above, you now need to connect to the Internet and tap the **Verify App** button. 29 | 18. Launch the GoodNight app on your iOS device from the Home screen. 30 | 31 | Note: If you'd like to test your own version of GoodNight, you must select 32 | "Generic iOS Device", or your own device (if plugged in, of course), to 33 | successfully compile and build GoodNight without errors. Please ensure that you 34 | are not building for the iOS Simulator. 35 | 36 | [1]: https://itunes.apple.com/us/app/xcode/id497799835 37 | [2]: https://github.com/anthonya1999/GoodNight/archive/master.zip 38 | -------------------------------------------------------------------------------- /MASShortcut.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /MASShortcut.framework/MASShortcut: -------------------------------------------------------------------------------- 1 | Versions/Current/MASShortcut -------------------------------------------------------------------------------- /MASShortcut.framework/Modules: -------------------------------------------------------------------------------- 1 | Versions/Current/Modules -------------------------------------------------------------------------------- /MASShortcut.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Headers/MASDictionaryTransformer.h: -------------------------------------------------------------------------------- 1 | extern NSString *const MASDictionaryTransformerName; 2 | 3 | /** 4 | Converts shortcuts for storage in user defaults. 5 | 6 | User defaults can’t stored custom types directly, they have to 7 | be serialized to `NSData` or some other supported type like an 8 | `NSDictionary`. In Cocoa Bindings, the conversion can be done 9 | using value transformers like this one. 10 | 11 | There’s a built-in transformer (`NSKeyedUnarchiveFromDataTransformerName`) 12 | that converts any `NSCoding` types to `NSData`, but with shortcuts 13 | it makes sense to use a dictionary instead – the defaults look better 14 | when inspected with the `defaults` command-line utility and the 15 | format is compatible with an older sortcut library called Shortcut 16 | Recorder. 17 | */ 18 | @interface MASDictionaryTransformer : NSValueTransformer 19 | @end 20 | -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Headers/MASKeyCodes.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "MASKeyMasks.h" 4 | 5 | // These glyphs are missed in Carbon.h 6 | typedef NS_ENUM(unsigned short, kMASShortcutGlyph) { 7 | kMASShortcutGlyphEject = 0x23CF, 8 | kMASShortcutGlyphClear = 0x2715, 9 | kMASShortcutGlyphDeleteLeft = 0x232B, 10 | kMASShortcutGlyphDeleteRight = 0x2326, 11 | kMASShortcutGlyphLeftArrow = 0x2190, 12 | kMASShortcutGlyphRightArrow = 0x2192, 13 | kMASShortcutGlyphUpArrow = 0x2191, 14 | kMASShortcutGlyphDownArrow = 0x2193, 15 | kMASShortcutGlyphEscape = 0x238B, 16 | kMASShortcutGlyphHelp = 0x003F, 17 | kMASShortcutGlyphPageDown = 0x21DF, 18 | kMASShortcutGlyphPageUp = 0x21DE, 19 | kMASShortcutGlyphTabRight = 0x21E5, 20 | kMASShortcutGlyphReturn = 0x2305, 21 | kMASShortcutGlyphReturnR2L = 0x21A9, 22 | kMASShortcutGlyphPadClear = 0x2327, 23 | kMASShortcutGlyphNorthwestArrow = 0x2196, 24 | kMASShortcutGlyphSoutheastArrow = 0x2198, 25 | }; 26 | 27 | NS_INLINE NSString* NSStringFromMASKeyCode(unsigned short ch) 28 | { 29 | return [NSString stringWithFormat:@"%C", ch]; 30 | } 31 | 32 | NS_INLINE NSUInteger MASPickCocoaModifiers(NSUInteger flags) 33 | { 34 | return (flags & (NSEventModifierFlagControl | NSEventModifierFlagShift | NSEventModifierFlagOption | NSEventModifierFlagCommand)); 35 | } 36 | 37 | NS_INLINE UInt32 MASCarbonModifiersFromCocoaModifiers(NSUInteger cocoaFlags) 38 | { 39 | return 40 | (cocoaFlags & NSEventModifierFlagCommand ? cmdKey : 0) 41 | | (cocoaFlags & NSEventModifierFlagOption ? optionKey : 0) 42 | | (cocoaFlags & NSEventModifierFlagControl ? controlKey : 0) 43 | | (cocoaFlags & NSEventModifierFlagShift ? shiftKey : 0); 44 | } 45 | -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Headers/MASKeyMasks.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | // https://github.com/shpakovski/MASShortcut/issues/99 4 | // 5 | // Long story short: NSControlKeyMask and friends were replaced with NSEventModifierFlagControl 6 | // and similar in macOS Sierra. The project builds fine & clean, but including MASShortcut in 7 | // a project with deployment target set to 10.12 results in several deprecation warnings because 8 | // of the control masks. Simply replacing the old symbols with the new ones isn’t an option, 9 | // since it breaks the build on older SDKs – in Travis, for example. 10 | // 11 | // It should be safe to remove this whole thing once the 10.12 SDK is ubiquitous. 12 | 13 | #if __MAC_OS_X_VERSION_MAX_ALLOWED < 101200 14 | #define NSEventModifierFlagCommand NSCommandKeyMask 15 | #define NSEventModifierFlagControl NSControlKeyMask 16 | #define NSEventModifierFlagOption NSAlternateKeyMask 17 | #define NSEventModifierFlagShift NSShiftKeyMask 18 | #endif 19 | -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Headers/MASShortcut.h: -------------------------------------------------------------------------------- 1 | #import "MASKeyCodes.h" 2 | 3 | /** 4 | A model class to hold a key combination. 5 | 6 | This class just represents a combination of keys. It does not care if 7 | the combination is valid or can be used as a hotkey, it doesn’t watch 8 | the input system for the shortcut appearance, nor it does access user 9 | defaults. 10 | */ 11 | @interface MASShortcut : NSObject 12 | 13 | /** 14 | The virtual key code for the keyboard key. 15 | 16 | Hardware independent, same as in `NSEvent`. See `Events.h` in the HIToolbox 17 | framework for a complete list, or Command-click this symbol: `kVK_ANSI_A`. 18 | */ 19 | @property (nonatomic, readonly) NSUInteger keyCode; 20 | 21 | /** 22 | Cocoa keyboard modifier flags. 23 | 24 | Same as in `NSEvent`: `NSCommandKeyMask`, `NSAlternateKeyMask`, etc. 25 | */ 26 | @property (nonatomic, readonly) NSUInteger modifierFlags; 27 | 28 | /** 29 | Same as `keyCode`, just a different type. 30 | */ 31 | @property (nonatomic, readonly) UInt32 carbonKeyCode; 32 | 33 | /** 34 | Carbon modifier flags. 35 | 36 | A bit sum of `cmdKey`, `optionKey`, etc. 37 | */ 38 | @property (nonatomic, readonly) UInt32 carbonFlags; 39 | 40 | /** 41 | A string representing the “key” part of a shortcut, like the `5` in `⌘5`. 42 | 43 | @warning The value may change depending on the active keyboard layout. 44 | For example for the `^2` keyboard shortcut (`kVK_ANSI_2+NSControlKeyMask` 45 | to be precise) the `keyCodeString` is `2` on the US keyboard, but `ě` when 46 | the Czech keyboard layout is active. See the spec for details. 47 | */ 48 | @property (nonatomic, readonly) NSString *keyCodeString; 49 | 50 | /** 51 | A key-code string used in key equivalent matching. 52 | 53 | For precise meaning of “key equivalents” see the `keyEquivalent` 54 | property of `NSMenuItem`. Here the string is used to support shortcut 55 | validation (“is the shortcut already taken in this menu?”) and 56 | for display in `NSMenu`. 57 | 58 | The value of this property may differ from `keyCodeString`. For example 59 | the Russian keyboard has a `Г` (Ge) Cyrillic character in place of the 60 | latin `U` key. This means you can create a `^Г` shortcut, but in menus 61 | that’s always displayed as `^U`. So the `keyCodeString` returns `Г` 62 | and `keyCodeStringForKeyEquivalent` returns `U`. 63 | */ 64 | @property (nonatomic, readonly) NSString *keyCodeStringForKeyEquivalent; 65 | 66 | /** 67 | A string representing the shortcut modifiers, like the `⌘` in `⌘5`. 68 | */ 69 | @property (nonatomic, readonly) NSString *modifierFlagsString; 70 | 71 | - (instancetype)initWithKeyCode:(NSUInteger)code modifierFlags:(NSUInteger)flags; 72 | + (instancetype)shortcutWithKeyCode:(NSUInteger)code modifierFlags:(NSUInteger)flags; 73 | 74 | /** 75 | Creates a new shortcut from an `NSEvent` object. 76 | 77 | This is just a convenience initializer that reads the key code and modifiers from an `NSEvent`. 78 | */ 79 | + (instancetype)shortcutWithEvent:(NSEvent *)anEvent; 80 | 81 | @end 82 | -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Headers/MASShortcutBinder.h: -------------------------------------------------------------------------------- 1 | #import "MASShortcutMonitor.h" 2 | 3 | /** 4 | Binds actions to user defaults keys. 5 | 6 | If you store shortcuts in user defaults (for example by binding 7 | a `MASShortcutView` to user defaults), you can use this class to 8 | connect an action directly to a user defaults key. If the shortcut 9 | stored under the key changes, the action will get automatically 10 | updated to the new one. 11 | 12 | This class is mostly a wrapper around a `MASShortcutMonitor`. It 13 | watches the changes in user defaults and updates the shortcut monitor 14 | accordingly with the new shortcuts. 15 | */ 16 | @interface MASShortcutBinder : NSObject 17 | 18 | /** 19 | A convenience shared instance. 20 | 21 | You may use it so that you don’t have to manage an instance by hand, 22 | but it’s perfectly fine to allocate and use a separate instance instead. 23 | */ 24 | + (instancetype) sharedBinder; 25 | 26 | /** 27 | The underlying shortcut monitor. 28 | */ 29 | @property(strong) MASShortcutMonitor *shortcutMonitor; 30 | 31 | /** 32 | Binding options customizing the access to user defaults. 33 | 34 | As an example, you can use `NSValueTransformerNameBindingOption` to customize 35 | the storage format used for the shortcuts. By default the shortcuts are converted 36 | from `NSData` (`NSKeyedUnarchiveFromDataTransformerName`). Note that if the 37 | binder is to work with `MASShortcutView`, both object have to use the same storage 38 | format. 39 | */ 40 | @property(copy) NSDictionary *bindingOptions; 41 | 42 | /** 43 | Binds given action to a shortcut stored under the given defaults key. 44 | 45 | In other words, no matter what shortcut you store under the given key, 46 | pressing it will always trigger the given action. 47 | */ 48 | - (void) bindShortcutWithDefaultsKey: (NSString*) defaultsKeyName toAction: (dispatch_block_t) action; 49 | 50 | /** 51 | Disconnect the binding between user defaults and action. 52 | 53 | In other words, the shortcut stored under the given key will no longer trigger an action. 54 | */ 55 | - (void) breakBindingWithDefaultsKey: (NSString*) defaultsKeyName; 56 | 57 | /** 58 | Register default shortcuts in user defaults. 59 | 60 | This is a convenience frontent to `[NSUserDefaults registerDefaults]`. 61 | The dictionary should contain a map of user defaults’ keys to appropriate 62 | keyboard shortcuts. The shortcuts will be transformed according to 63 | `bindingOptions` and registered using `registerDefaults`. 64 | */ 65 | - (void) registerDefaultShortcuts: (NSDictionary*) defaultShortcuts; 66 | 67 | @end 68 | -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Headers/MASShortcutMonitor.h: -------------------------------------------------------------------------------- 1 | #import "MASShortcut.h" 2 | 3 | /** 4 | Executes action when a shortcut is pressed. 5 | 6 | There can only be one instance of this class, otherwise things 7 | will probably not work. (There’s a Carbon event handler inside 8 | and there can only be one Carbon event handler of a given type.) 9 | */ 10 | @interface MASShortcutMonitor : NSObject 11 | 12 | - (instancetype) init __unavailable; 13 | + (instancetype) sharedMonitor; 14 | 15 | /** 16 | Register a shortcut along with an action. 17 | 18 | Attempting to insert an already registered shortcut probably won’t work. 19 | It may burn your house or cut your fingers. You have been warned. 20 | */ 21 | - (BOOL) registerShortcut: (MASShortcut*) shortcut withAction: (dispatch_block_t) action; 22 | - (BOOL) isShortcutRegistered: (MASShortcut*) shortcut; 23 | 24 | - (void) unregisterShortcut: (MASShortcut*) shortcut; 25 | - (void) unregisterAllShortcuts; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Headers/MASShortcutValidator.h: -------------------------------------------------------------------------------- 1 | #import "MASShortcut.h" 2 | 3 | /** 4 | This class is used by the recording control to tell which shortcuts are acceptable. 5 | 6 | There are two kinds of shortcuts that are not considered acceptable: shortcuts that 7 | are too simple (like single letter keys) and shortcuts that are already used by the 8 | operating system. 9 | */ 10 | @interface MASShortcutValidator : NSObject 11 | 12 | /** 13 | Set to `YES` if you want to accept Option-something shortcuts. 14 | 15 | `NO` by default, since Option-something shortcuts are often used by system, 16 | for example Option-G will type the © sign. This also applies to Option-Shift 17 | shortcuts – in other words, shortcut recorder will not accept shortcuts like 18 | Option-Shift-K by default. (Again, since Option-Shift-K inserts the Apple 19 | logo sign by default.) 20 | */ 21 | @property(assign) BOOL allowAnyShortcutWithOptionModifier; 22 | 23 | + (instancetype) sharedValidator; 24 | 25 | - (BOOL) isShortcutValid: (MASShortcut*) shortcut; 26 | - (BOOL) isShortcut: (MASShortcut*) shortcut alreadyTakenInMenu: (NSMenu*) menu explanation: (NSString**) explanation; 27 | - (BOOL) isShortcutAlreadyTakenBySystem: (MASShortcut*) shortcut explanation: (NSString**) explanation; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Headers/MASShortcutView+Bindings.h: -------------------------------------------------------------------------------- 1 | #import "MASShortcutView.h" 2 | 3 | /** 4 | A simplified interface to bind the recorder value to user defaults. 5 | 6 | You can bind the `shortcutValue` to user defaults using the standard 7 | `bind:toObject:withKeyPath:options:` call, but since that’s a lot to type 8 | and read, here’s a simpler option. 9 | 10 | Setting the `associatedUserDefaultsKey` binds the view’s shortcut value 11 | to the given user defaults key. You can supply a value transformer to convert 12 | values between user defaults and `MASShortcut`. If you don’t supply 13 | a transformer, the `NSUnarchiveFromDataTransformerName` will be used 14 | automatically. 15 | 16 | Set `associatedUserDefaultsKey` to `nil` to disconnect the binding. 17 | */ 18 | @interface MASShortcutView (Bindings) 19 | 20 | @property(copy) NSString *associatedUserDefaultsKey; 21 | 22 | - (void) setAssociatedUserDefaultsKey: (NSString*) newKey withTransformer: (NSValueTransformer*) transformer; 23 | - (void) setAssociatedUserDefaultsKey: (NSString*) newKey withTransformerName: (NSString*) transformerName; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Headers/MASShortcutView.h: -------------------------------------------------------------------------------- 1 | @class MASShortcut, MASShortcutValidator; 2 | 3 | extern NSString *const MASShortcutBinding; 4 | 5 | typedef NS_ENUM(NSInteger, MASShortcutViewStyle) { 6 | MASShortcutViewStyleDefault = 0, // Height = 19 px 7 | MASShortcutViewStyleTexturedRect, // Height = 25 px 8 | MASShortcutViewStyleRounded, // Height = 43 px 9 | MASShortcutViewStyleFlat 10 | }; 11 | 12 | @interface MASShortcutView : NSView 13 | 14 | @property (nonatomic, strong) MASShortcut *shortcutValue; 15 | @property (nonatomic, strong) MASShortcutValidator *shortcutValidator; 16 | @property (nonatomic, getter = isRecording) BOOL recording; 17 | @property (nonatomic, getter = isEnabled) BOOL enabled; 18 | @property (nonatomic, copy) void (^shortcutValueChange)(MASShortcutView *sender); 19 | @property (nonatomic, assign) MASShortcutViewStyle style; 20 | 21 | /// Returns custom class for drawing control. 22 | + (Class)shortcutCellClass; 23 | 24 | - (void)setAcceptsFirstResponder:(BOOL)value; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Headers/Shortcut.h: -------------------------------------------------------------------------------- 1 | #import "MASKeyMasks.h" 2 | #import "MASShortcut.h" 3 | #import "MASShortcutValidator.h" 4 | #import "MASShortcutMonitor.h" 5 | #import "MASShortcutBinder.h" 6 | #import "MASDictionaryTransformer.h" 7 | #import "MASShortcutView.h" 8 | #import "MASShortcutView+Bindings.h" 9 | -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/MASShortcut: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/MASShortcut.framework/Versions/A/MASShortcut -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module MASShortcut { 2 | umbrella header "Shortcut.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 16D12b 7 | CFBundleDevelopmentRegion 8 | English 9 | CFBundleExecutable 10 | MASShortcut 11 | CFBundleIdentifier 12 | com.github.shpakovski.MASShortcut 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | MASShortcut 17 | CFBundlePackageType 18 | FMWK 19 | CFBundleShortVersionString 20 | 2.3.6 21 | CFBundleSupportedPlatforms 22 | 23 | MacOSX 24 | 25 | CFBundleVersion 26 | 2.3.6 27 | DTCompiler 28 | com.apple.compilers.llvm.clang.1_0 29 | DTPlatformBuild 30 | 8C38 31 | DTPlatformVersion 32 | GM 33 | DTSDKBuild 34 | 16C58 35 | DTSDKName 36 | macosx10.12 37 | DTXcode 38 | 0820 39 | DTXcodeBuild 40 | 8C38 41 | NSHumanReadableCopyright 42 | Copyright © Vadim Shpakovski. All rights reserved. 43 | 44 | 45 | -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Resources/cs.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/MASShortcut.framework/Versions/A/Resources/cs.lproj/Localizable.strings -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Resources/de.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/MASShortcut.framework/Versions/A/Resources/de.lproj/Localizable.strings -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Resources/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/MASShortcut.framework/Versions/A/Resources/en.lproj/Localizable.strings -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Resources/es.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/MASShortcut.framework/Versions/A/Resources/es.lproj/Localizable.strings -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Resources/fr.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/MASShortcut.framework/Versions/A/Resources/fr.lproj/Localizable.strings -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Resources/it.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/MASShortcut.framework/Versions/A/Resources/it.lproj/Localizable.strings -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Resources/ja.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/MASShortcut.framework/Versions/A/Resources/ja.lproj/Localizable.strings -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Resources/ko.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/MASShortcut.framework/Versions/A/Resources/ko.lproj/Localizable.strings -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Resources/nl.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/MASShortcut.framework/Versions/A/Resources/nl.lproj/Localizable.strings -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Resources/pl.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/MASShortcut.framework/Versions/A/Resources/pl.lproj/Localizable.strings -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Resources/ru.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/MASShortcut.framework/Versions/A/Resources/ru.lproj/Localizable.strings -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Resources/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/MASShortcut.framework/Versions/A/Resources/zh-Hans.lproj/Localizable.strings -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/A/Resources/zh-Hant.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/MASShortcut.framework/Versions/A/Resources/zh-Hant.lproj/Localizable.strings -------------------------------------------------------------------------------- /MASShortcut.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GoodNight 2 | Project name thanks to @Emu4iOS. 3 | 4 | Based off of Thomas Finch's [GammaThingy][1]. 5 | 6 | GoodNight is an app that allows you to directly access the screen's gamma 7 | levels, and modify it using `IOMobileFramebuffer`. With this you can do any of 8 | the following: 9 | 10 | * Change the screen temperature 11 | * Put the brightness lower than iOS would normally allow you to 12 | * Adjust the RGB values of the framebuffer 13 | 14 | This application uses `dlsym`, which loads in the private symbols at runtime, 15 | rather than using headers, so no additional setup is needed once you download 16 | the source. 17 | 18 | ### Installing 19 | 20 | See [here] (Help/README.md) for written instructions. 21 | Click on [this link] (https://www.youtube.com/watch?v=Yu62IlaqPQM) to see the official install video. 22 | 23 | ### Compatibility 24 | 25 | I am certain that this app will run on any iOS device running iOS 7 or higher. 26 | 27 | ### Widget 28 | 29 | The widget's **gamma toggle button** just toggles between night gamma and gamma off (like the enable button in the temperature part of the app). It overrides the auto updates until the next cycle: 30 | 31 | * So if you enable gamma with the widget while auto is in day mode it will keep gamma enabled until auto will turn to day the next morning. 32 | * If you enable gamma and after that disable gamma with the widget, both during daytime, it will keep gamma deactivated until the next day sunset. 33 | * If you disable gamma with the widget while auto is in night mode it will keep gamma disables until auto will turn to day the next evening. 34 | * If you disable gamma and after that enable gamma with the widget, both during night time, it will keep gamma activated the complete next day until it reaches sunrise again. 35 | 36 | Bedtime mode will only be activated if at that time the screen has active gamma. Else the bedtime mode will be skipped. 37 | 38 | The **darkroom button** turns on darkroom mode and on deactivation of darkroom mode resumes to automatic mode immediately. 39 | 40 | ### macOS Version 41 | The macOS version of GoodNight is out! You can currently enter RGB values between 0 and 255 for red, green, and blue values, enable a darkroom mode, and adjust the color temperature of the display. It also has Touch Bar support! More features will be coming soon. You can download the always up-to-date binary distribution release from [here][2]. 42 | 43 | ### Installing 44 | It is crucial that you copy the application to the applications folder on your Mac. If you get an error while attempting to open the app, open up terminal, and type in this command: 45 | `sudo spctl --master-disable` 46 | Press return after you enter your password and try again. It should open successfully. 47 | 48 | [1]: https://github.com/thomasfinch/GammaThingy 49 | [2]: https://private.adatechri.com/GoodNight_Dist.zip 50 | -------------------------------------------------------------------------------- /Sparkle.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /Sparkle.framework/Modules: -------------------------------------------------------------------------------- 1 | Versions/Current/Modules -------------------------------------------------------------------------------- /Sparkle.framework/PrivateHeaders: -------------------------------------------------------------------------------- 1 | Versions/Current/PrivateHeaders -------------------------------------------------------------------------------- /Sparkle.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /Sparkle.framework/Sparkle: -------------------------------------------------------------------------------- 1 | Versions/Current/Sparkle -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Headers/SUAppcast.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUAppcast.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/12/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUAPPCAST_H 10 | #define SUAPPCAST_H 11 | 12 | #if __has_feature(modules) 13 | @import Foundation; 14 | #else 15 | #import 16 | #endif 17 | #import "SUExport.h" 18 | 19 | @class SUAppcastItem; 20 | SU_EXPORT @interface SUAppcast : NSObject 21 | 22 | @property (copy) NSString *userAgentString; 23 | @property (copy) NSDictionary *httpHeaders; 24 | 25 | - (void)fetchAppcastFromURL:(NSURL *)url completionBlock:(void (^)(NSError *))err; 26 | - (SUAppcast *)copyWithoutDeltaUpdates; 27 | 28 | @property (readonly, copy) NSArray *items; 29 | @end 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Headers/SUAppcastItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUAppcastItem.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/12/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUAPPCASTITEM_H 10 | #define SUAPPCASTITEM_H 11 | 12 | #if __has_feature(modules) 13 | @import Foundation; 14 | #else 15 | #import 16 | #endif 17 | #import "SUExport.h" 18 | 19 | SU_EXPORT @interface SUAppcastItem : NSObject 20 | @property (copy, readonly) NSString *title; 21 | @property (copy, readonly) NSString *dateString; 22 | @property (copy, readonly) NSString *itemDescription; 23 | @property (strong, readonly) NSURL *releaseNotesURL; 24 | @property (copy, readonly) NSString *DSASignature; 25 | @property (copy, readonly) NSString *minimumSystemVersion; 26 | @property (copy, readonly) NSString *maximumSystemVersion; 27 | @property (strong, readonly) NSURL *fileURL; 28 | @property (copy, readonly) NSString *versionString; 29 | @property (copy, readonly) NSString *displayVersionString; 30 | @property (copy, readonly) NSDictionary *deltaUpdates; 31 | @property (strong, readonly) NSURL *infoURL; 32 | 33 | // Initializes with data from a dictionary provided by the RSS class. 34 | - (instancetype)initWithDictionary:(NSDictionary *)dict; 35 | - (instancetype)initWithDictionary:(NSDictionary *)dict failureReason:(NSString **)error; 36 | 37 | @property (getter=isDeltaUpdate, readonly) BOOL deltaUpdate; 38 | @property (getter=isCriticalUpdate, readonly) BOOL criticalUpdate; 39 | @property (getter=isInformationOnlyUpdate, readonly) BOOL informationOnlyUpdate; 40 | 41 | // Returns the dictionary provided in initWithDictionary; this might be useful later for extensions. 42 | @property (readonly, copy) NSDictionary *propertiesDictionary; 43 | 44 | - (NSURL *)infoURL; 45 | 46 | @end 47 | 48 | #endif 49 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Headers/SUErrors.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUErrors.h 3 | // Sparkle 4 | // 5 | // Created by C.W. Betts on 10/13/14. 6 | // Copyright (c) 2014 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #ifndef SUERRORS_H 10 | #define SUERRORS_H 11 | 12 | #if __has_feature(modules) 13 | @import Foundation; 14 | #else 15 | #import 16 | #endif 17 | #import "SUExport.h" 18 | 19 | /** 20 | * Error domain used by Sparkle 21 | */ 22 | SU_EXPORT extern NSString *const SUSparkleErrorDomain; 23 | 24 | typedef NS_ENUM(OSStatus, SUError) { 25 | // Appcast phase errors. 26 | SUAppcastParseError = 1000, 27 | SUNoUpdateError = 1001, 28 | SUAppcastError = 1002, 29 | SURunningFromDiskImageError = 1003, 30 | 31 | // Download phase errors. 32 | SUTemporaryDirectoryError = 2000, 33 | SUDownloadError = 2001, 34 | 35 | // Extraction phase errors. 36 | SUUnarchivingError = 3000, 37 | SUSignatureError = 3001, 38 | 39 | // Installation phase errors. 40 | SUFileCopyFailure = 4000, 41 | SUAuthenticationFailure = 4001, 42 | SUMissingUpdateError = 4002, 43 | SUMissingInstallerToolError = 4003, 44 | SURelaunchError = 4004, 45 | SUInstallationError = 4005, 46 | SUDowngradeError = 4006, 47 | SUInstallationCancelledError = 4007, 48 | 49 | // System phase errors 50 | SUSystemPowerOffError = 5000 51 | }; 52 | 53 | #endif 54 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Headers/SUExport.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUExport.h 3 | // Sparkle 4 | // 5 | // Created by Jake Petroules on 2014-08-23. 6 | // Copyright (c) 2014 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #ifndef SUEXPORT_H 10 | #define SUEXPORT_H 11 | 12 | #ifdef BUILDING_SPARKLE 13 | #define SU_EXPORT __attribute__((visibility("default"))) 14 | #else 15 | #define SU_EXPORT 16 | #endif 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUStandardVersionComparator.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 12/21/07. 6 | // Copyright 2007 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUSTANDARDVERSIONCOMPARATOR_H 10 | #define SUSTANDARDVERSIONCOMPARATOR_H 11 | 12 | #if __has_feature(modules) 13 | @import Foundation; 14 | #else 15 | #import 16 | #endif 17 | #import "SUExport.h" 18 | #import "SUVersionComparisonProtocol.h" 19 | 20 | /*! 21 | Sparkle's default version comparator. 22 | 23 | This comparator is adapted from MacPAD, by Kevin Ballard. 24 | It's "dumb" in that it does essentially string comparison, 25 | in components split by character type. 26 | */ 27 | SU_EXPORT @interface SUStandardVersionComparator : NSObject 28 | 29 | /*! 30 | Returns a singleton instance of the comparator. 31 | */ 32 | + (SUStandardVersionComparator *)defaultComparator; 33 | 34 | /*! 35 | Compares version strings through textual analysis. 36 | 37 | See the implementation for more details. 38 | */ 39 | - (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; 40 | @end 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUVersionComparisonProtocol.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 12/21/07. 6 | // Copyright 2007 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUVERSIONCOMPARISONPROTOCOL_H 10 | #define SUVERSIONCOMPARISONPROTOCOL_H 11 | 12 | #if __has_feature(modules) 13 | @import Cocoa; 14 | #else 15 | #import 16 | #endif 17 | #import "SUExport.h" 18 | 19 | /*! 20 | Provides version comparison facilities for Sparkle. 21 | */ 22 | @protocol SUVersionComparison 23 | 24 | /*! 25 | An abstract method to compare two version strings. 26 | 27 | Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, 28 | and NSOrderedSame if they are equivalent. 29 | */ 30 | - (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; // *** MAY BE CALLED ON NON-MAIN THREAD! 31 | 32 | @end 33 | 34 | #endif 35 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUVersionDisplayProtocol.h 3 | // EyeTV 4 | // 5 | // Created by Uli Kusterer on 08.12.09. 6 | // Copyright 2009 Elgato Systems GmbH. All rights reserved. 7 | // 8 | 9 | #if __has_feature(modules) 10 | @import Cocoa; 11 | #else 12 | #import 13 | #endif 14 | #import "SUExport.h" 15 | 16 | /*! 17 | Applies special display formatting to version numbers. 18 | */ 19 | @protocol SUVersionDisplay 20 | 21 | /*! 22 | Formats two version strings. 23 | 24 | Both versions are provided so that important distinguishing information 25 | can be displayed while also leaving out unnecessary/confusing parts. 26 | */ 27 | - (void)formatVersion:(NSString **)inOutVersionA andVersion:(NSString **)inOutVersionB; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Headers/Sparkle.h: -------------------------------------------------------------------------------- 1 | // 2 | // Sparkle.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/16/06. (Modified by CDHW on 23/12/07) 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SPARKLE_H 10 | #define SPARKLE_H 11 | 12 | #if __has_feature(modules) 13 | @import Cocoa; 14 | #else 15 | #import 16 | #endif 17 | 18 | // This list should include the shared headers. It doesn't matter if some of them aren't shared (unless 19 | // there are name-space collisions) so we can list all of them to start with: 20 | 21 | #import "SUAppcast.h" 22 | #import "SUAppcastItem.h" 23 | #import "SUStandardVersionComparator.h" 24 | #import "SUUpdater.h" 25 | #import "SUVersionComparisonProtocol.h" 26 | #import "SUVersionDisplayProtocol.h" 27 | #import "SUErrors.h" 28 | 29 | #endif 30 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module Sparkle { 2 | umbrella header "Sparkle.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/PrivateHeaders/SUUnarchiver.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUUnarchiver.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/16/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUUNARCHIVER_H 10 | #define SUUNARCHIVER_H 11 | 12 | #import 13 | 14 | @class SUHost; 15 | @protocol SUUnarchiverDelegate; 16 | 17 | @interface SUUnarchiver : NSObject 18 | 19 | @property (copy, readonly) NSString *archivePath; 20 | @property (copy, readonly) NSString *updateHostBundlePath; 21 | @property (copy, readonly) NSString *decryptionPassword; 22 | @property (weak) id delegate; 23 | 24 | + (SUUnarchiver *)unarchiverForPath:(NSString *)path updatingHostBundlePath:(NSString *)host withPassword:(NSString *)decryptionPassword; 25 | 26 | - (void)start; 27 | @end 28 | 29 | @protocol SUUnarchiverDelegate 30 | - (void)unarchiverDidFinish:(SUUnarchiver *)unarchiver; 31 | - (void)unarchiverDidFail:(SUUnarchiver *)unarchiver; 32 | @optional 33 | - (void)unarchiver:(SUUnarchiver *)unarchiver extractedProgress:(double)progress; 34 | @end 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 15G1208 7 | CFBundleDevelopmentRegion 8 | English 9 | CFBundleExecutable 10 | Autoupdate 11 | CFBundleIconFile 12 | AppIcon.icns 13 | CFBundleIdentifier 14 | org.sparkle-project.Sparkle.Autoupdate 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.15.1 4-gf47115d 21 | CFBundleSignature 22 | ???? 23 | CFBundleSupportedPlatforms 24 | 25 | MacOSX 26 | 27 | CFBundleVersion 28 | 1.15.1 29 | DTCompiler 30 | com.apple.compilers.llvm.clang.1_0 31 | DTPlatformBuild 32 | 8A218a 33 | DTPlatformVersion 34 | GM 35 | DTSDKBuild 36 | 16A300 37 | DTSDKName 38 | macosx10.12 39 | DTXcode 40 | 0800 41 | DTXcodeBuild 42 | 8A218a 43 | LSBackgroundOnly 44 | 1 45 | LSMinimumSystemVersion 46 | 10.7 47 | LSUIElement 48 | 1 49 | NSMainNibFile 50 | MainMenu 51 | NSPrincipalClass 52 | NSApplication 53 | 54 | 55 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/fileop: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/fileop -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/PkgInfo: -------------------------------------------------------------------------------- 1 | APPL???? -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ca.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ca.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/en.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/en.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fi.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fi.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/he.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/he.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 15G1208 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | Sparkle 11 | CFBundleIdentifier 12 | org.sparkle-project.Sparkle 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | Sparkle 17 | CFBundlePackageType 18 | FMWK 19 | CFBundleShortVersionString 20 | 1.15.1 4-gf47115d 21 | CFBundleSignature 22 | ???? 23 | CFBundleSupportedPlatforms 24 | 25 | MacOSX 26 | 27 | CFBundleVersion 28 | 1.15.1 29 | DTCompiler 30 | com.apple.compilers.llvm.clang.1_0 31 | DTPlatformBuild 32 | 8A218a 33 | DTPlatformVersion 34 | GM 35 | DTSDKBuild 36 | 16A300 37 | DTSDKName 38 | macosx10.12 39 | DTXcode 40 | 0800 41 | DTXcodeBuild 42 | 8A218a 43 | 44 | 45 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/SUStatus.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/SUStatus.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/el.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/el.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/el.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/el.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr_CA.lproj: -------------------------------------------------------------------------------- 1 | fr.lproj -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nb.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/nb.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nb.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/nb.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/pt.lproj: -------------------------------------------------------------------------------- 1 | pt_BR.lproj -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/uk.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/uk.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Sparkle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anthonya1999/GoodNight/d66bcef17d2dd2aab31effe6273ea1f441e6d933/Sparkle.framework/Versions/A/Sparkle -------------------------------------------------------------------------------- /Sparkle.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A --------------------------------------------------------------------------------