Skip to content

Commit 03ed284

Browse files
committed
Finished Adding #44
1 parent 37c1ad5 commit 03ed284

File tree

9 files changed

+178
-126
lines changed

9 files changed

+178
-126
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,5 @@ At this time it seems like gSwitch will not work on macbooks older than 2011. It
7878
## Notes
7979

8080
Requires macOS >= 10.12
81+
82+
gSwitch provided “as is” without warranty of any kind, either expressed or implied and such software is to be used at your own risk.

gSwitch.xcodeproj/project.pbxproj

Lines changed: 8 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,6 @@
2020
82233ED820844ADF006C57E7 /* ProcessManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82233ED120844ADF006C57E7 /* ProcessManager.swift */; };
2121
82360C722088361700ADD0CE /* PreferencesWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82360C702088361700ADD0CE /* PreferencesWindow.swift */; };
2222
823960BE228949BC0014D7CD /* LaunchAtLogin.framework.dSYM in Resources */ = {isa = PBXBuildFile; fileRef = 823960BD228949BC0014D7CD /* LaunchAtLogin.framework.dSYM */; };
23-
823960C422894B000014D7CD /* org.sparkle-project.Downloader.xpc in Resources */ = {isa = PBXBuildFile; fileRef = 823960C322894B000014D7CD /* org.sparkle-project.Downloader.xpc */; };
24-
823960C622894B0A0014D7CD /* org.sparkle-project.InstallerConnection.xpc in Resources */ = {isa = PBXBuildFile; fileRef = 823960C522894B0A0014D7CD /* org.sparkle-project.InstallerConnection.xpc */; };
25-
823960C822894B120014D7CD /* org.sparkle-project.InstallerLauncher.xpc in Resources */ = {isa = PBXBuildFile; fileRef = 823960C722894B120014D7CD /* org.sparkle-project.InstallerLauncher.xpc */; };
26-
823960CA22894B180014D7CD /* org.sparkle-project.InstallerStatus.xpc in Resources */ = {isa = PBXBuildFile; fileRef = 823960C922894B180014D7CD /* org.sparkle-project.InstallerStatus.xpc */; };
27-
823960CB22894B240014D7CD /* org.sparkle-project.InstallerStatus.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 823960C922894B180014D7CD /* org.sparkle-project.InstallerStatus.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
28-
823960CC22894B2D0014D7CD /* org.sparkle-project.InstallerLauncher.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 823960C722894B120014D7CD /* org.sparkle-project.InstallerLauncher.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
29-
823960CD22894B310014D7CD /* org.sparkle-project.InstallerConnection.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 823960C522894B0A0014D7CD /* org.sparkle-project.InstallerConnection.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
30-
823960CE22894B350014D7CD /* org.sparkle-project.Downloader.xpc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 823960C322894B000014D7CD /* org.sparkle-project.Downloader.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
3123
823960D122894B820014D7CD /* LaunchAtLogin.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 823960D022894B820014D7CD /* LaunchAtLogin.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3224
823B274E208C0A2900A7DFB6 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 823B274D208C0A2900A7DFB6 /* dsa_pub.pem */; };
3325
82556518208C505900A6807F /* UpdaterDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82556517208C505900A6807F /* UpdaterDelegate.swift */; };
@@ -76,10 +68,6 @@
7668
dstPath = "$(CONTENTS_FOLDER_PATH)/XPCServices";
7769
dstSubfolderSpec = 16;
7870
files = (
79-
823960CE22894B350014D7CD /* org.sparkle-project.Downloader.xpc in CopyFiles */,
80-
823960CD22894B310014D7CD /* org.sparkle-project.InstallerConnection.xpc in CopyFiles */,
81-
823960CC22894B2D0014D7CD /* org.sparkle-project.InstallerLauncher.xpc in CopyFiles */,
82-
823960CB22894B240014D7CD /* org.sparkle-project.InstallerStatus.xpc in CopyFiles */,
8371
);
8472
runOnlyForDeploymentPostprocessing = 0;
8573
};
@@ -141,10 +129,6 @@
141129
82233ED120844ADF006C57E7 /* ProcessManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProcessManager.swift; sourceTree = "<group>"; };
142130
82360C702088361700ADD0CE /* PreferencesWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesWindow.swift; sourceTree = "<group>"; };
143131
823960BD228949BC0014D7CD /* LaunchAtLogin.framework.dSYM */ = {isa = PBXFileReference; lastKnownFileType = wrapper.dsym; name = LaunchAtLogin.framework.dSYM; path = Carthage/Build/Mac/LaunchAtLogin.framework.dSYM; sourceTree = "<group>"; };
144-
823960C322894B000014D7CD /* org.sparkle-project.Downloader.xpc */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.xpc-service"; path = "org.sparkle-project.Downloader.xpc"; sourceTree = "<group>"; };
145-
823960C522894B0A0014D7CD /* org.sparkle-project.InstallerConnection.xpc */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.xpc-service"; path = "org.sparkle-project.InstallerConnection.xpc"; sourceTree = "<group>"; };
146-
823960C722894B120014D7CD /* org.sparkle-project.InstallerLauncher.xpc */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.xpc-service"; path = "org.sparkle-project.InstallerLauncher.xpc"; sourceTree = "<group>"; };
147-
823960C922894B180014D7CD /* org.sparkle-project.InstallerStatus.xpc */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.xpc-service"; path = "org.sparkle-project.InstallerStatus.xpc"; sourceTree = "<group>"; };
148132
823960D022894B820014D7CD /* LaunchAtLogin.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LaunchAtLogin.framework; path = Carthage/Build/Mac/LaunchAtLogin.framework; sourceTree = "<group>"; };
149133
823B274D208C0A2900A7DFB6 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = "<group>"; };
150134
82556517208C505900A6807F /* UpdaterDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdaterDelegate.swift; sourceTree = "<group>"; };
@@ -207,7 +191,6 @@
207191
82233E9420844AC9006C57E7 = {
208192
isa = PBXGroup;
209193
children = (
210-
823960BA228949140014D7CD /* XPC */,
211194
82233E9F20844AC9006C57E7 /* gSwitch */,
212195
82233EB020844ACA006C57E7 /* gSwitchTests */,
213196
82233EBB20844ACA006C57E7 /* gSwitchUITests */,
@@ -355,17 +338,6 @@
355338
name = Frameworks;
356339
sourceTree = "<group>";
357340
};
358-
823960BA228949140014D7CD /* XPC */ = {
359-
isa = PBXGroup;
360-
children = (
361-
823960C922894B180014D7CD /* org.sparkle-project.InstallerStatus.xpc */,
362-
823960C722894B120014D7CD /* org.sparkle-project.InstallerLauncher.xpc */,
363-
823960C522894B0A0014D7CD /* org.sparkle-project.InstallerConnection.xpc */,
364-
823960C322894B000014D7CD /* org.sparkle-project.Downloader.xpc */,
365-
);
366-
path = XPC;
367-
sourceTree = "<group>";
368-
};
369341
/* End PBXGroup section */
370342

371343
/* Begin PBXNativeTarget section */
@@ -493,15 +465,11 @@
493465
823B274E208C0A2900A7DFB6 /* dsa_pub.pem in Resources */,
494466
828D681320C897D200A41DD9 /* AdvancedWindow.xib in Resources */,
495467
828D681920C8BCFF00A41DD9 /* HelpWindow.xib in Resources */,
496-
823960C822894B120014D7CD /* org.sparkle-project.InstallerLauncher.xpc in Resources */,
497-
823960C622894B0A0014D7CD /* org.sparkle-project.InstallerConnection.xpc in Resources */,
498-
823960C422894B000014D7CD /* org.sparkle-project.Downloader.xpc in Resources */,
499468
82233EA320844ACA006C57E7 /* Assets.xcassets in Resources */,
500469
AA20D30820EC2D6B009862FB /* PreferencesWindow.xib in Resources */,
501470
82233EA620844ACA006C57E7 /* MainMenu.xib in Resources */,
502471
AAC7195520E2D04E009862FB /* AboutWindow.xib in Resources */,
503472
82556532208C5B9300A6807F /* Sparkle.framework.dSYM in Resources */,
504-
823960CA22894B180014D7CD /* org.sparkle-project.InstallerStatus.xpc in Resources */,
505473
829553CB20884F4700A29C49 /* SwiftyBeaver.framework.dSYM in Resources */,
506474
);
507475
runOnlyForDeploymentPostprocessing = 0;
@@ -641,6 +609,7 @@
641609
isa = XCBuildConfiguration;
642610
buildSettings = {
643611
ALWAYS_SEARCH_USER_PATHS = NO;
612+
BUILD_LIBRARY_FOR_DISTRIBUTION = NO;
644613
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
645614
CLANG_ANALYZER_NONNULL = YES;
646615
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -702,6 +671,7 @@
702671
isa = XCBuildConfiguration;
703672
buildSettings = {
704673
ALWAYS_SEARCH_USER_PATHS = NO;
674+
BUILD_LIBRARY_FOR_DISTRIBUTION = NO;
705675
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
706676
CLANG_ANALYZER_NONNULL = YES;
707677
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -758,9 +728,10 @@
758728
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
759729
CLANG_ENABLE_MODULES = YES;
760730
CODE_SIGN_ENTITLEMENTS = gSwitch/gSwitch.entitlements;
761-
CODE_SIGN_IDENTITY = "-";
731+
CODE_SIGN_IDENTITY = "Apple Development";
762732
CODE_SIGN_STYLE = Automatic;
763733
COMBINE_HIDPI_IMAGES = YES;
734+
CURRENT_PROJECT_VERSION = 1.9.6;
764735
DEVELOPMENT_TEAM = Z26D67C784;
765736
ENABLE_HARDENED_RUNTIME = YES;
766737
FRAMEWORK_SEARCH_PATHS = (
@@ -774,6 +745,7 @@
774745
"@executable_path/../Frameworks",
775746
);
776747
MACOSX_DEPLOYMENT_TARGET = 10.12;
748+
MARKETING_VERSION = 1.9.6;
777749
PRODUCT_BUNDLE_IDENTIFIER = com.CodySchrank.gSwitch;
778750
PRODUCT_NAME = "$(TARGET_NAME)";
779751
SWIFT_OBJC_BRIDGING_HEADER = "gSwitch/gSwitch-Bridging-Header.h";
@@ -788,9 +760,10 @@
788760
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
789761
CLANG_ENABLE_MODULES = YES;
790762
CODE_SIGN_ENTITLEMENTS = gSwitch/gSwitch.entitlements;
791-
CODE_SIGN_IDENTITY = "-";
763+
CODE_SIGN_IDENTITY = "Apple Development";
792764
CODE_SIGN_STYLE = Automatic;
793765
COMBINE_HIDPI_IMAGES = YES;
766+
CURRENT_PROJECT_VERSION = 1.9.6;
794767
DEVELOPMENT_TEAM = Z26D67C784;
795768
ENABLE_HARDENED_RUNTIME = YES;
796769
FRAMEWORK_SEARCH_PATHS = (
@@ -804,6 +777,7 @@
804777
"@executable_path/../Frameworks",
805778
);
806779
MACOSX_DEPLOYMENT_TARGET = 10.12;
780+
MARKETING_VERSION = 1.9.6;
807781
PRODUCT_BUNDLE_IDENTIFIER = com.CodySchrank.gSwitch;
808782
PRODUCT_NAME = "$(TARGET_NAME)";
809783
SWIFT_OBJC_BRIDGING_HEADER = "gSwitch/gSwitch-Bridging-Header.h";

gSwitch/AppDelegate.swift

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
4747
}
4848

4949
/** Default prefs so shit works */
50-
UserDefaults.standard.register(defaults: [Constants.GPU_CHANGE_NOTIFICATIONS : false])
51-
UserDefaults.standard.register(defaults: [Constants.LAUNCH_AT_LOGIN : true])
52-
UserDefaults.standard.register(defaults: [Constants.USE_LAST_STATE: true])
53-
UserDefaults.standard.register(defaults: [Constants.SAVED_GPU_STATE: SwitcherMode.SetDynamic.rawValue])
50+
setupDefaultPreferences()
5451

5552
/** Startup AutoLauncher */
5653
LaunchAtLogin.isEnabled = (UserDefaults.standard.integer(forKey: Constants.LAUNCH_AT_LOGIN) == 1)
@@ -184,22 +181,27 @@ class AppDelegate: NSObject, NSApplicationDelegate {
184181
Check for hungry processes because it could cause a crash
185182
*/
186183
let hungryProcesses = processer.getHungryProcesses()
187-
if(hungryProcesses.count > 0) {
184+
if(hungryProcesses.count > 0 && UserDefaults.standard.integer(forKey: Constants.IGNORE_IGPU_CHANGE_WARNING) == 0) {
188185
log.warning("SHOW: Can't switch to integrated only, because of \(String(describing: hungryProcesses))")
189186

190187
let alert = NSAlert.init()
191188

192189
alert.messageText = "Warning! Are you sure you want to change to integrated only?"
193190
alert.informativeText = "You currently have GPU dependencies. Changing the mode now could cause these processes to crash. If there is currently an external display plugged in you cannot change to integrated only."
194-
195-
alert.addButton(withTitle: "Do it anyway").setAccessibilityFocused(true)
191+
192+
alert.addButton(withTitle: "Override Once").setAccessibilityFocused(true)
193+
alert.addButton(withTitle: "Always Override")
196194
alert.addButton(withTitle: "Never mind")
197195

198196
let modalResult = alert.runModal()
199197

200198
switch modalResult {
201199
case .alertFirstButtonReturn:
202-
log.info("Override clicked!")
200+
log.info("Override once clicked!")
201+
unsafeIntegratedOnly();
202+
case .alertSecondButtonReturn:
203+
log.info("Override always clicked!")
204+
UserDefaults.standard.set(1, forKey: Constants.IGNORE_IGPU_CHANGE_WARNING)
203205
unsafeIntegratedOnly();
204206
default:
205207
break;
@@ -226,6 +228,14 @@ class AppDelegate: NSObject, NSApplicationDelegate {
226228

227229
unsafeDynamicSwitching()
228230
}
231+
232+
public func setupDefaultPreferences() {
233+
UserDefaults.standard.register(defaults: [Constants.LAUNCH_AT_LOGIN : true])
234+
UserDefaults.standard.register(defaults: [Constants.USE_LAST_STATE: true])
235+
UserDefaults.standard.register(defaults: [Constants.IGNORE_IGPU_CHANGE_WARNING: false])
236+
UserDefaults.standard.register(defaults: [Constants.GPU_CHANGE_NOTIFICATIONS : false])
237+
UserDefaults.standard.register(defaults: [Constants.SAVED_GPU_STATE: SwitcherMode.SetDynamic.rawValue])
238+
}
229239

230240
public func checkForUpdates() {
231241
updater?.checkForUpdates()
@@ -262,6 +272,8 @@ class AppDelegate: NSObject, NSApplicationDelegate {
262272

263273
log.verbose("Use Last State set as \(UserDefaults.standard.integer(forKey: Constants.USE_LAST_STATE) == 1)")
264274

275+
log.verbose("Ignore IGPU Warning set as \(UserDefaults.standard.integer(forKey: Constants.IGNORE_IGPU_CHANGE_WARNING) == 1)")
276+
265277
log.verbose("Saved GPU State set as \(UserDefaults.standard.integer(forKey: Constants.SAVED_GPU_STATE)) (\(SwitcherMode(rawValue: UserDefaults.standard.integer(forKey: Constants.SAVED_GPU_STATE))!))")
266278
}
267279

gSwitch/Core/GPUListener.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,7 @@ class GPUListener {
7676

7777
if Int(flags.rawValue) & Constants.kCGDisplayRemoveFlag > 0 {
7878
/**
79-
usually gets called when switched. If I could get a flag that only triggered
80-
when the display was disconnected I could save the last desired state that
81-
the user selected and put them back on it.
82-
(because dynamic is forced when a display is connected)
79+
usually gets called when switched.
8380
*/
8481
}
8582
}

gSwitch/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
<key>CFBundlePackageType</key>
1818
<string>APPL</string>
1919
<key>CFBundleShortVersionString</key>
20-
<string>1.9.5</string>
20+
<string>$(MARKETING_VERSION)</string>
2121
<key>CFBundleVersion</key>
22-
<string>1.9.5</string>
22+
<string>$(CURRENT_PROJECT_VERSION)</string>
2323
<key>LSApplicationCategoryType</key>
2424
<string>public.app-category.utilities</string>
2525
<key>LSMinimumSystemVersion</key>

gSwitch/Util/Constants.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ struct Constants {
113113
static let LAUNCH_AT_LOGIN = "appLoginStart"
114114
static let USE_LAST_STATE = "useLastState"
115115
static let SAVED_GPU_STATE = "savedGPUState"
116+
static let IGNORE_IGPU_CHANGE_WARNING = "ignoreIGPUChangeWarning"
116117
static let STATUS_MENU_DEPENDENCY_APPEND_INDEX = 5
117118
static let STATUS_MENU_DEPENDENCY_TAG = 10
118119
static let HELP_URL = "https://codyschrank.github.io/gSwitch/#faq"

0 commit comments

Comments
 (0)