├── .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 | 
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 | 
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 | 
20 | 13. Ensure that `GoodNight/GoodNight/Supporting Files/GoodNight.entitlements` and `GoodNight/GoodNight Widget/Supporting Files/GoodNight.entitlements` reference the correct group.
21 | 
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
--------------------------------------------------------------------------------