├── .gitignore ├── Hot Corners Toggler ├── Assets.xcassets │ ├── Contents.json │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Icon Status Badge.iconbadgeset │ │ └── Contents.json ├── Preview Content │ └── Preview Assets.xcassets │ │ └── Contents.json ├── Hot_Corners_Toggler.entitlements ├── Utilities │ ├── CommandsFunctions.swift │ ├── CornersFunctions.swift │ └── FileFunctions.swift └── Hot_Corners_TogglerApp.swift ├── Hot Corners Toggler.xcodeproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ ├── WorkspaceSettings.xcsettings │ │ ├── IDEWorkspaceChecks.plist │ │ └── swiftpm │ │ │ └── Package.resolved │ └── xcuserdata │ │ └── niallmurphy.xcuserdatad │ │ └── WorkspaceSettings.xcsettings ├── xcuserdata │ └── niallmurphy.xcuserdatad │ │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes │ │ └── xcschememanagement.plist └── project.pbxproj └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea 3 | build 4 | cmake-build-debug 5 | -------------------------------------------------------------------------------- /Hot Corners Toggler/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Hot Corners Toggler/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Hot Corners Toggler.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Hot Corners Toggler/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Hot Corners Toggler.xcodeproj/xcuserdata/niallmurphy.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /Hot Corners Toggler.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Hot Corners Toggler.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Hot Corners Toggler/Hot_Corners_Toggler.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Hot Corners Toggler.xcodeproj/xcuserdata/niallmurphy.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Hot Corners Toggler.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Hot Corners Toggler.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "originHash" : "aae61040c30e63b9cf0f5455365680cfeabef0aac829c0941d4d6f6180010fc9", 3 | "pins" : [ 4 | { 5 | "identity" : "launchatlogin-modern", 6 | "kind" : "remoteSourceControl", 7 | "location" : "https://github.com/sindresorhus/LaunchAtLogin-Modern", 8 | "state" : { 9 | "revision" : "a04ec1c363be3627734f6dad757d82f5d4fa8fcc", 10 | "version" : "1.1.0" 11 | } 12 | } 13 | ], 14 | "version" : 3 15 | } 16 | -------------------------------------------------------------------------------- /Hot Corners Toggler.xcodeproj/project.xcworkspace/xcuserdata/niallmurphy.xcuserdatad/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildLocationStyle 6 | UseAppPreferences 7 | CustomBuildLocationType 8 | RelativeToDerivedData 9 | DerivedDataLocationStyle 10 | Default 11 | ShowSharedSchemesAutomaticallyEnabled 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Hot Corners Toggler/Utilities/CommandsFunctions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CommandsFunctions.swift 3 | // Hot Corners Toggler 4 | // 5 | // Created by Niall Murphy on 22/03/2024. 6 | // 7 | 8 | import Foundation 9 | 10 | func runCommand(_ command: String) -> Void { 11 | 12 | let task = Process() 13 | task.launchPath = "/bin/zsh" 14 | task.arguments = ["-c", command] 15 | task.launch() 16 | 17 | } 18 | 19 | func runCommandReturnOutput(_ command: String) -> String { 20 | 21 | let task = Process() 22 | let pipe = Pipe() 23 | 24 | task.standardOutput = pipe 25 | task.standardError = pipe 26 | task.arguments = ["-cl", command] 27 | task.launchPath = "/bin/zsh" 28 | task.launch() 29 | 30 | let data = pipe.fileHandleForReading.readDataToEndOfFile() 31 | let output = String(data: data, encoding: .utf8)! 32 | return output.trimmingCharacters(in: .whitespacesAndNewlines) 33 | 34 | } 35 | -------------------------------------------------------------------------------- /Hot Corners Toggler/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "mac", 5 | "scale" : "1x", 6 | "size" : "16x16" 7 | }, 8 | { 9 | "idiom" : "mac", 10 | "scale" : "2x", 11 | "size" : "16x16" 12 | }, 13 | { 14 | "idiom" : "mac", 15 | "scale" : "1x", 16 | "size" : "32x32" 17 | }, 18 | { 19 | "idiom" : "mac", 20 | "scale" : "2x", 21 | "size" : "32x32" 22 | }, 23 | { 24 | "idiom" : "mac", 25 | "scale" : "1x", 26 | "size" : "128x128" 27 | }, 28 | { 29 | "idiom" : "mac", 30 | "scale" : "2x", 31 | "size" : "128x128" 32 | }, 33 | { 34 | "idiom" : "mac", 35 | "scale" : "1x", 36 | "size" : "256x256" 37 | }, 38 | { 39 | "idiom" : "mac", 40 | "scale" : "2x", 41 | "size" : "256x256" 42 | }, 43 | { 44 | "idiom" : "mac", 45 | "scale" : "1x", 46 | "size" : "512x512" 47 | }, 48 | { 49 | "idiom" : "mac", 50 | "scale" : "2x", 51 | "size" : "512x512" 52 | } 53 | ], 54 | "info" : { 55 | "author" : "xcode", 56 | "version" : 1 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Hot Corners Toggler/Assets.xcassets/Icon Status Badge.iconbadgeset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "mac", 5 | "scale" : "1x", 6 | "size" : "7x7" 7 | }, 8 | { 9 | "idiom" : "mac", 10 | "scale" : "2x", 11 | "size" : "7x7" 12 | }, 13 | { 14 | "idiom" : "mac", 15 | "scale" : "1x", 16 | "size" : "11x11" 17 | }, 18 | { 19 | "idiom" : "mac", 20 | "scale" : "2x", 21 | "size" : "11x11" 22 | }, 23 | { 24 | "idiom" : "mac", 25 | "scale" : "1x", 26 | "size" : "24x24" 27 | }, 28 | { 29 | "idiom" : "mac", 30 | "scale" : "2x", 31 | "size" : "24x24" 32 | }, 33 | { 34 | "idiom" : "mac", 35 | "scale" : "1x", 36 | "size" : "50x50" 37 | }, 38 | { 39 | "idiom" : "mac", 40 | "scale" : "2x", 41 | "size" : "50x50" 42 | }, 43 | { 44 | "idiom" : "mac", 45 | "scale" : "1x", 46 | "size" : "100x100" 47 | }, 48 | { 49 | "idiom" : "mac", 50 | "scale" : "2x", 51 | "size" : "100x100" 52 | } 53 | ], 54 | "info" : { 55 | "author" : "xcode", 56 | "version" : 1 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Hot Corners Toggler for OSX 3 | 4 | ##### Disable and enable hot corners from the menu bar. 5 | 6 | ## How does it work? 7 | 8 | This small application uses shell commands to get and set hot corners. To apply changes, the OSX Dock application must be restarted, which is why the bar flashes when changes are applied. 9 | 10 | ## Note 11 | 12 | I don't work with OSX and only built this because Hot Corners activating during games were stopping me from playing. I won't be paying $99/year to Apple to sign this app. I'd be happy for someone to collaborate and sign releases of this. 13 | 14 | ## How to use 15 | 16 | 1. Download the latest zip file from the [Releases](https://github.com/niallmurphy-ie/Hot-Corners-Toggler/releases) page 17 | 2. Unzip the file and drag the app to your Applications folder. 18 | 3. Right click the app and click open. 19 | 4. Click the icon in the menu bar and select to Disable or Enable hot corners. 20 | 5. Add the app as a login item to have it start on boot. 21 | 22 | Or build it yourself from the source here. 23 | 24 | ![Context Menu to run](https://i.imgur.com/7lX9XdU.png) 25 | 26 | ![Application in menu bar](https://i.imgur.com/KZqDOZ0.png) 27 | 28 | Enjoy! 29 | 30 | License: MIT -------------------------------------------------------------------------------- /Hot Corners Toggler/Utilities/CornersFunctions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CornersFunctions.swift 3 | // Hot Corners Toggler 4 | // 5 | // Created by Niall Murphy on 22/03/2024. 6 | // 7 | 8 | func shellSetHotCorners(_ corners: String) -> Void { 9 | 10 | let cornersArray = corners.components(separatedBy: " ") 11 | runCommand("defaults write com.apple.dock wvous-tl-corner -int \(cornersArray[0])") 12 | runCommand("defaults write com.apple.dock wvous-tr-corner -int \(cornersArray[1])") 13 | runCommand("defaults write com.apple.dock wvous-bl-corner -int \(cornersArray[2])") 14 | runCommand("defaults write com.apple.dock wvous-br-corner -int \(cornersArray[3])") 15 | runCommand("killall Dock") 16 | 17 | } 18 | 19 | // Function to get current hot corners 20 | func shellGetHotCorners() -> String { 21 | 22 | let tl = runCommandReturnOutput("defaults read com.apple.dock wvous-tl-corner") 23 | let tr = runCommandReturnOutput("defaults read com.apple.dock wvous-tr-corner") 24 | let bl = runCommandReturnOutput("defaults read com.apple.dock wvous-bl-corner") 25 | let br = runCommandReturnOutput("defaults read com.apple.dock wvous-br-corner") 26 | return "\(tl) \(tr) \(bl) \(br)" 27 | 28 | } 29 | -------------------------------------------------------------------------------- /Hot Corners Toggler/Hot_Corners_TogglerApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Hot_Corners_TogglerApp.swift 3 | // Hot Corners Toggler 4 | // 5 | // Created by Niall Murphy on 20/03/2024. 6 | // 7 | 8 | import SwiftUI 9 | import LaunchAtLogin 10 | 11 | @main struct Hot_Corners_TogglerApp: App { 12 | 13 | @State private var enabled: Bool 14 | 15 | var body: some Scene { 16 | 17 | MenuBarExtra("Hot Corners Toggler", systemImage: enabled ? "camera.metering.center.weighted.average": "rectangle") { 18 | 19 | if enabled { 20 | Button("Disable Hot Corners") { 21 | disable() 22 | } 23 | } else { 24 | Button("Enable Hot Corners") { 25 | enable() 26 | } 27 | } 28 | 29 | Divider() 30 | 31 | LaunchAtLogin.Toggle("Launch at login") 32 | 33 | Divider() 34 | 35 | Button("Exit") { NSApplication.shared.terminate(nil) } 36 | 37 | } 38 | 39 | } 40 | 41 | func enable() { 42 | saveIsEnabledToFile(true) 43 | enabled = true 44 | shellSetHotCorners(readCornersFromFile() ?? "0 0 0 0") 45 | } 46 | 47 | func disable() { 48 | saveCornersToFile(shellGetHotCorners()) 49 | saveIsEnabledToFile(false) 50 | enabled = false 51 | shellSetHotCorners("0 0 0 0") 52 | } 53 | 54 | init() { 55 | createDefaultFiles() 56 | enabled = readEnabledFromFile() ?? true 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /Hot Corners Toggler/Utilities/FileFunctions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FileFunctions.swift 3 | // Hot Corners Toggler 4 | // 5 | // Created by Niall Murphy on 22/03/2024. 6 | // 7 | 8 | import Foundation 9 | import SwiftData 10 | 11 | func createDefaultFiles() { 12 | 13 | if !FileManager.default.fileExists(atPath: Bundle.main.resourceURL!.appendingPathComponent("enabled.txt").path) { 14 | saveIsEnabledToFile(true) 15 | } 16 | 17 | if !FileManager.default.fileExists(atPath: Bundle.main.resourceURL!.appendingPathComponent("data.txt").path) { 18 | saveCornersToFile("0 0 0 0") 19 | } 20 | 21 | } 22 | 23 | func saveIsEnabledToFile(_ enabled: Bool) { 24 | 25 | guard let resourcesDirectory = Bundle.main.resourceURL else { 26 | print("Error: Couldn't find the app's Resources directory.") 27 | return 28 | } 29 | 30 | let fileURL = resourcesDirectory.appendingPathComponent("enabled.txt") 31 | 32 | do { 33 | try String(enabled).write(to: fileURL, atomically: true, encoding: .utf8) 34 | } catch { 35 | print("Error saving enabled to file: \(error)") 36 | } 37 | 38 | } 39 | 40 | func readEnabledFromFile() -> Bool? { 41 | 42 | guard let resourcesDirectory = Bundle.main.resourceURL else { 43 | print("Error: Couldn't find the app's Resources directory.") 44 | return nil 45 | } 46 | 47 | let fileURL = resourcesDirectory.appendingPathComponent("enabled.txt") 48 | 49 | do { 50 | let fileContents = try String(contentsOf: fileURL) 51 | return Bool(fileContents) 52 | } catch { 53 | print("Error reading enabled from file: \(error)") 54 | return nil 55 | } 56 | 57 | } 58 | 59 | func saveCornersToFile(_ string: String) { 60 | 61 | guard let resourcesDirectory = Bundle.main.resourceURL else { 62 | print("Error: Couldn't find the app's Resources directory.") 63 | return 64 | } 65 | 66 | let fileURL = resourcesDirectory.appendingPathComponent("corners.txt") 67 | 68 | do { 69 | try string.write(to: fileURL, atomically: true, encoding: .utf8) 70 | } catch { 71 | print("Error saving string to file: \(error)") 72 | } 73 | 74 | } 75 | 76 | func readCornersFromFile() -> String? { 77 | 78 | guard let resourcesDirectory = Bundle.main.resourceURL else { 79 | print("Error: Couldn't find the app's Resources directory.") 80 | return "Error: Couldn't find the app's Resources directory." 81 | } 82 | 83 | let fileURL = resourcesDirectory.appendingPathComponent("corners.txt") 84 | 85 | do { 86 | let fileContents = try String(contentsOf: fileURL) 87 | print(fileContents) 88 | return fileContents 89 | } catch { 90 | print("Error reading string from file: \(error)") 91 | return nil 92 | } 93 | 94 | } 95 | -------------------------------------------------------------------------------- /Hot Corners Toggler.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 56; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 235F1E732BAD9074003A8FE8 /* FileFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 235F1E722BAD9074003A8FE8 /* FileFunctions.swift */; }; 11 | 235F1E752BAD919B003A8FE8 /* CornersFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 235F1E742BAD919B003A8FE8 /* CornersFunctions.swift */; }; 12 | 235F1E772BAD91BE003A8FE8 /* CommandsFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 235F1E762BAD91BE003A8FE8 /* CommandsFunctions.swift */; }; 13 | 235F1E7C2BADC6F0003A8FE8 /* icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 235F1E7B2BADC6EF003A8FE8 /* icon.png */; }; 14 | 235F1E7F2BADD1ED003A8FE8 /* LaunchAtLogin in Frameworks */ = {isa = PBXBuildFile; productRef = 235F1E7E2BADD1ED003A8FE8 /* LaunchAtLogin */; }; 15 | 23D324362BAAF44500B5F2C0 /* Hot_Corners_TogglerApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23D324352BAAF44500B5F2C0 /* Hot_Corners_TogglerApp.swift */; }; 16 | 23D3243C2BAAF44700B5F2C0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 23D3243B2BAAF44700B5F2C0 /* Assets.xcassets */; }; 17 | 23D3243F2BAAF44700B5F2C0 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 23D3243E2BAAF44700B5F2C0 /* Preview Assets.xcassets */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXFileReference section */ 21 | 235F1E722BAD9074003A8FE8 /* FileFunctions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileFunctions.swift; sourceTree = ""; }; 22 | 235F1E742BAD919B003A8FE8 /* CornersFunctions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CornersFunctions.swift; sourceTree = ""; }; 23 | 235F1E762BAD91BE003A8FE8 /* CommandsFunctions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandsFunctions.swift; sourceTree = ""; }; 24 | 235F1E7B2BADC6EF003A8FE8 /* icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon.png; path = ../../../Downloads/icon.png; sourceTree = ""; }; 25 | 23D324322BAAF44500B5F2C0 /* Hot Corners Toggler.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Hot Corners Toggler.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 26 | 23D324352BAAF44500B5F2C0 /* Hot_Corners_TogglerApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hot_Corners_TogglerApp.swift; sourceTree = ""; }; 27 | 23D3243B2BAAF44700B5F2C0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 28 | 23D3243E2BAAF44700B5F2C0 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 29 | 23D324402BAAF44700B5F2C0 /* Hot_Corners_Toggler.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Hot_Corners_Toggler.entitlements; sourceTree = ""; }; 30 | /* End PBXFileReference section */ 31 | 32 | /* Begin PBXFrameworksBuildPhase section */ 33 | 23D3242F2BAAF44500B5F2C0 /* Frameworks */ = { 34 | isa = PBXFrameworksBuildPhase; 35 | buildActionMask = 2147483647; 36 | files = ( 37 | 235F1E7F2BADD1ED003A8FE8 /* LaunchAtLogin in Frameworks */, 38 | ); 39 | runOnlyForDeploymentPostprocessing = 0; 40 | }; 41 | /* End PBXFrameworksBuildPhase section */ 42 | 43 | /* Begin PBXGroup section */ 44 | 235F1E782BAD9299003A8FE8 /* Utilities */ = { 45 | isa = PBXGroup; 46 | children = ( 47 | 235F1E762BAD91BE003A8FE8 /* CommandsFunctions.swift */, 48 | 235F1E722BAD9074003A8FE8 /* FileFunctions.swift */, 49 | 235F1E742BAD919B003A8FE8 /* CornersFunctions.swift */, 50 | ); 51 | path = Utilities; 52 | sourceTree = ""; 53 | }; 54 | 23D324292BAAF44500B5F2C0 = { 55 | isa = PBXGroup; 56 | children = ( 57 | 23D324342BAAF44500B5F2C0 /* Hot Corners Toggler */, 58 | 23D324332BAAF44500B5F2C0 /* Products */, 59 | ); 60 | sourceTree = ""; 61 | }; 62 | 23D324332BAAF44500B5F2C0 /* Products */ = { 63 | isa = PBXGroup; 64 | children = ( 65 | 23D324322BAAF44500B5F2C0 /* Hot Corners Toggler.app */, 66 | ); 67 | name = Products; 68 | sourceTree = ""; 69 | }; 70 | 23D324342BAAF44500B5F2C0 /* Hot Corners Toggler */ = { 71 | isa = PBXGroup; 72 | children = ( 73 | 235F1E782BAD9299003A8FE8 /* Utilities */, 74 | 23D324352BAAF44500B5F2C0 /* Hot_Corners_TogglerApp.swift */, 75 | 235F1E7B2BADC6EF003A8FE8 /* icon.png */, 76 | 23D3243B2BAAF44700B5F2C0 /* Assets.xcassets */, 77 | 23D324402BAAF44700B5F2C0 /* Hot_Corners_Toggler.entitlements */, 78 | 23D3243D2BAAF44700B5F2C0 /* Preview Content */, 79 | ); 80 | path = "Hot Corners Toggler"; 81 | sourceTree = ""; 82 | }; 83 | 23D3243D2BAAF44700B5F2C0 /* Preview Content */ = { 84 | isa = PBXGroup; 85 | children = ( 86 | 23D3243E2BAAF44700B5F2C0 /* Preview Assets.xcassets */, 87 | ); 88 | path = "Preview Content"; 89 | sourceTree = ""; 90 | }; 91 | /* End PBXGroup section */ 92 | 93 | /* Begin PBXNativeTarget section */ 94 | 23D324312BAAF44500B5F2C0 /* Hot Corners Toggler */ = { 95 | isa = PBXNativeTarget; 96 | buildConfigurationList = 23D324432BAAF44700B5F2C0 /* Build configuration list for PBXNativeTarget "Hot Corners Toggler" */; 97 | buildPhases = ( 98 | 23D3242E2BAAF44500B5F2C0 /* Sources */, 99 | 23D3242F2BAAF44500B5F2C0 /* Frameworks */, 100 | 23D324302BAAF44500B5F2C0 /* Resources */, 101 | ); 102 | buildRules = ( 103 | ); 104 | dependencies = ( 105 | ); 106 | name = "Hot Corners Toggler"; 107 | packageProductDependencies = ( 108 | 235F1E7E2BADD1ED003A8FE8 /* LaunchAtLogin */, 109 | ); 110 | productName = "Hot Corners Toggler"; 111 | productReference = 23D324322BAAF44500B5F2C0 /* Hot Corners Toggler.app */; 112 | productType = "com.apple.product-type.application"; 113 | }; 114 | /* End PBXNativeTarget section */ 115 | 116 | /* Begin PBXProject section */ 117 | 23D3242A2BAAF44500B5F2C0 /* Project object */ = { 118 | isa = PBXProject; 119 | attributes = { 120 | BuildIndependentTargetsInParallel = 1; 121 | LastSwiftUpdateCheck = 1520; 122 | LastUpgradeCheck = 1530; 123 | TargetAttributes = { 124 | 23D324312BAAF44500B5F2C0 = { 125 | CreatedOnToolsVersion = 15.2; 126 | }; 127 | }; 128 | }; 129 | buildConfigurationList = 23D3242D2BAAF44500B5F2C0 /* Build configuration list for PBXProject "Hot Corners Toggler" */; 130 | compatibilityVersion = "Xcode 14.0"; 131 | developmentRegion = en; 132 | hasScannedForEncodings = 0; 133 | knownRegions = ( 134 | en, 135 | Base, 136 | ); 137 | mainGroup = 23D324292BAAF44500B5F2C0; 138 | packageReferences = ( 139 | 235F1E7D2BADD1ED003A8FE8 /* XCRemoteSwiftPackageReference "LaunchAtLogin-Modern" */, 140 | ); 141 | productRefGroup = 23D324332BAAF44500B5F2C0 /* Products */; 142 | projectDirPath = ""; 143 | projectRoot = ""; 144 | targets = ( 145 | 23D324312BAAF44500B5F2C0 /* Hot Corners Toggler */, 146 | ); 147 | }; 148 | /* End PBXProject section */ 149 | 150 | /* Begin PBXResourcesBuildPhase section */ 151 | 23D324302BAAF44500B5F2C0 /* Resources */ = { 152 | isa = PBXResourcesBuildPhase; 153 | buildActionMask = 2147483647; 154 | files = ( 155 | 23D3243F2BAAF44700B5F2C0 /* Preview Assets.xcassets in Resources */, 156 | 23D3243C2BAAF44700B5F2C0 /* Assets.xcassets in Resources */, 157 | 235F1E7C2BADC6F0003A8FE8 /* icon.png in Resources */, 158 | ); 159 | runOnlyForDeploymentPostprocessing = 0; 160 | }; 161 | /* End PBXResourcesBuildPhase section */ 162 | 163 | /* Begin PBXSourcesBuildPhase section */ 164 | 23D3242E2BAAF44500B5F2C0 /* Sources */ = { 165 | isa = PBXSourcesBuildPhase; 166 | buildActionMask = 2147483647; 167 | files = ( 168 | 23D324362BAAF44500B5F2C0 /* Hot_Corners_TogglerApp.swift in Sources */, 169 | 235F1E772BAD91BE003A8FE8 /* CommandsFunctions.swift in Sources */, 170 | 235F1E752BAD919B003A8FE8 /* CornersFunctions.swift in Sources */, 171 | 235F1E732BAD9074003A8FE8 /* FileFunctions.swift in Sources */, 172 | ); 173 | runOnlyForDeploymentPostprocessing = 0; 174 | }; 175 | /* End PBXSourcesBuildPhase section */ 176 | 177 | /* Begin XCBuildConfiguration section */ 178 | 23D324412BAAF44700B5F2C0 /* Debug */ = { 179 | isa = XCBuildConfiguration; 180 | buildSettings = { 181 | ALWAYS_SEARCH_USER_PATHS = NO; 182 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 183 | CLANG_ANALYZER_NONNULL = YES; 184 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 185 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 186 | CLANG_ENABLE_MODULES = YES; 187 | CLANG_ENABLE_OBJC_ARC = YES; 188 | CLANG_ENABLE_OBJC_WEAK = YES; 189 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 190 | CLANG_WARN_BOOL_CONVERSION = YES; 191 | CLANG_WARN_COMMA = YES; 192 | CLANG_WARN_CONSTANT_CONVERSION = YES; 193 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 194 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 195 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 196 | CLANG_WARN_EMPTY_BODY = YES; 197 | CLANG_WARN_ENUM_CONVERSION = YES; 198 | CLANG_WARN_INFINITE_RECURSION = YES; 199 | CLANG_WARN_INT_CONVERSION = YES; 200 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 201 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 202 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 203 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 204 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 205 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 206 | CLANG_WARN_STRICT_PROTOTYPES = YES; 207 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 208 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 209 | CLANG_WARN_UNREACHABLE_CODE = YES; 210 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 211 | COPY_PHASE_STRIP = NO; 212 | DEAD_CODE_STRIPPING = YES; 213 | DEBUG_INFORMATION_FORMAT = dwarf; 214 | ENABLE_STRICT_OBJC_MSGSEND = YES; 215 | ENABLE_TESTABILITY = YES; 216 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 217 | GCC_C_LANGUAGE_STANDARD = gnu17; 218 | GCC_DYNAMIC_NO_PIC = NO; 219 | GCC_NO_COMMON_BLOCKS = YES; 220 | GCC_OPTIMIZATION_LEVEL = 0; 221 | GCC_PREPROCESSOR_DEFINITIONS = ( 222 | "DEBUG=1", 223 | "$(inherited)", 224 | ); 225 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 226 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 227 | GCC_WARN_UNDECLARED_SELECTOR = YES; 228 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 229 | GCC_WARN_UNUSED_FUNCTION = YES; 230 | GCC_WARN_UNUSED_VARIABLE = YES; 231 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 232 | MACOSX_DEPLOYMENT_TARGET = 14.2; 233 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 234 | MTL_FAST_MATH = YES; 235 | ONLY_ACTIVE_ARCH = YES; 236 | SDKROOT = macosx; 237 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; 238 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 239 | }; 240 | name = Debug; 241 | }; 242 | 23D324422BAAF44700B5F2C0 /* Release */ = { 243 | isa = XCBuildConfiguration; 244 | buildSettings = { 245 | ALWAYS_SEARCH_USER_PATHS = NO; 246 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 247 | CLANG_ANALYZER_NONNULL = YES; 248 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 249 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 250 | CLANG_ENABLE_MODULES = YES; 251 | CLANG_ENABLE_OBJC_ARC = YES; 252 | CLANG_ENABLE_OBJC_WEAK = YES; 253 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 254 | CLANG_WARN_BOOL_CONVERSION = YES; 255 | CLANG_WARN_COMMA = YES; 256 | CLANG_WARN_CONSTANT_CONVERSION = YES; 257 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 258 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 259 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 260 | CLANG_WARN_EMPTY_BODY = YES; 261 | CLANG_WARN_ENUM_CONVERSION = YES; 262 | CLANG_WARN_INFINITE_RECURSION = YES; 263 | CLANG_WARN_INT_CONVERSION = YES; 264 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 265 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 266 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 267 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 268 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 269 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 270 | CLANG_WARN_STRICT_PROTOTYPES = YES; 271 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 272 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 273 | CLANG_WARN_UNREACHABLE_CODE = YES; 274 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 275 | COPY_PHASE_STRIP = NO; 276 | DEAD_CODE_STRIPPING = YES; 277 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 278 | ENABLE_NS_ASSERTIONS = NO; 279 | ENABLE_STRICT_OBJC_MSGSEND = YES; 280 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 281 | GCC_C_LANGUAGE_STANDARD = gnu17; 282 | GCC_NO_COMMON_BLOCKS = YES; 283 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 284 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 285 | GCC_WARN_UNDECLARED_SELECTOR = YES; 286 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 287 | GCC_WARN_UNUSED_FUNCTION = YES; 288 | GCC_WARN_UNUSED_VARIABLE = YES; 289 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 290 | MACOSX_DEPLOYMENT_TARGET = 14.2; 291 | MTL_ENABLE_DEBUG_INFO = NO; 292 | MTL_FAST_MATH = YES; 293 | SDKROOT = macosx; 294 | SWIFT_COMPILATION_MODE = wholemodule; 295 | }; 296 | name = Release; 297 | }; 298 | 23D324442BAAF44700B5F2C0 /* Debug */ = { 299 | isa = XCBuildConfiguration; 300 | buildSettings = { 301 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 302 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 303 | CODE_SIGN_ENTITLEMENTS = "Hot Corners Toggler/Hot_Corners_Toggler.entitlements"; 304 | CODE_SIGN_IDENTITY = "Apple Development"; 305 | "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; 306 | CODE_SIGN_STYLE = Manual; 307 | COMBINE_HIDPI_IMAGES = YES; 308 | CURRENT_PROJECT_VERSION = 1; 309 | DEAD_CODE_STRIPPING = YES; 310 | DEVELOPMENT_ASSET_PATHS = "\"Hot Corners Toggler/Preview Content\""; 311 | DEVELOPMENT_TEAM = ""; 312 | "DEVELOPMENT_TEAM[sdk=macosx*]" = G33QK4QPWC; 313 | ENABLE_HARDENED_RUNTIME = YES; 314 | ENABLE_PREVIEWS = YES; 315 | GENERATE_INFOPLIST_FILE = YES; 316 | INFOPLIST_KEY_LSUIElement = YES; 317 | INFOPLIST_KEY_NSHumanReadableCopyright = ""; 318 | LD_RUNPATH_SEARCH_PATHS = ( 319 | "$(inherited)", 320 | "@executable_path/../Frameworks", 321 | ); 322 | MACOSX_DEPLOYMENT_TARGET = 14.0; 323 | MARKETING_VERSION = 1.0; 324 | PRODUCT_BUNDLE_IDENTIFIER = "com.Hot-Corners-Toggler"; 325 | PRODUCT_NAME = "$(TARGET_NAME)"; 326 | PROVISIONING_PROFILE_SPECIFIER = ""; 327 | "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; 328 | SWIFT_EMIT_LOC_STRINGS = YES; 329 | SWIFT_VERSION = 5.0; 330 | }; 331 | name = Debug; 332 | }; 333 | 23D324452BAAF44700B5F2C0 /* Release */ = { 334 | isa = XCBuildConfiguration; 335 | buildSettings = { 336 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 337 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 338 | CODE_SIGN_ENTITLEMENTS = "Hot Corners Toggler/Hot_Corners_Toggler.entitlements"; 339 | CODE_SIGN_IDENTITY = "Apple Development"; 340 | "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; 341 | CODE_SIGN_STYLE = Manual; 342 | COMBINE_HIDPI_IMAGES = YES; 343 | CURRENT_PROJECT_VERSION = 1; 344 | DEAD_CODE_STRIPPING = YES; 345 | DEVELOPMENT_ASSET_PATHS = "\"Hot Corners Toggler/Preview Content\""; 346 | DEVELOPMENT_TEAM = ""; 347 | "DEVELOPMENT_TEAM[sdk=macosx*]" = G33QK4QPWC; 348 | ENABLE_HARDENED_RUNTIME = YES; 349 | ENABLE_PREVIEWS = YES; 350 | GENERATE_INFOPLIST_FILE = YES; 351 | INFOPLIST_KEY_LSUIElement = YES; 352 | INFOPLIST_KEY_NSHumanReadableCopyright = ""; 353 | LD_RUNPATH_SEARCH_PATHS = ( 354 | "$(inherited)", 355 | "@executable_path/../Frameworks", 356 | ); 357 | MACOSX_DEPLOYMENT_TARGET = 14.0; 358 | MARKETING_VERSION = 1.0; 359 | PRODUCT_BUNDLE_IDENTIFIER = "com.Hot-Corners-Toggler"; 360 | PRODUCT_NAME = "$(TARGET_NAME)"; 361 | PROVISIONING_PROFILE_SPECIFIER = ""; 362 | "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; 363 | SWIFT_EMIT_LOC_STRINGS = YES; 364 | SWIFT_VERSION = 5.0; 365 | }; 366 | name = Release; 367 | }; 368 | /* End XCBuildConfiguration section */ 369 | 370 | /* Begin XCConfigurationList section */ 371 | 23D3242D2BAAF44500B5F2C0 /* Build configuration list for PBXProject "Hot Corners Toggler" */ = { 372 | isa = XCConfigurationList; 373 | buildConfigurations = ( 374 | 23D324412BAAF44700B5F2C0 /* Debug */, 375 | 23D324422BAAF44700B5F2C0 /* Release */, 376 | ); 377 | defaultConfigurationIsVisible = 0; 378 | defaultConfigurationName = Release; 379 | }; 380 | 23D324432BAAF44700B5F2C0 /* Build configuration list for PBXNativeTarget "Hot Corners Toggler" */ = { 381 | isa = XCConfigurationList; 382 | buildConfigurations = ( 383 | 23D324442BAAF44700B5F2C0 /* Debug */, 384 | 23D324452BAAF44700B5F2C0 /* Release */, 385 | ); 386 | defaultConfigurationIsVisible = 0; 387 | defaultConfigurationName = Release; 388 | }; 389 | /* End XCConfigurationList section */ 390 | 391 | /* Begin XCRemoteSwiftPackageReference section */ 392 | 235F1E7D2BADD1ED003A8FE8 /* XCRemoteSwiftPackageReference "LaunchAtLogin-Modern" */ = { 393 | isa = XCRemoteSwiftPackageReference; 394 | repositoryURL = "https://github.com/sindresorhus/LaunchAtLogin-Modern"; 395 | requirement = { 396 | kind = exactVersion; 397 | version = 1.1.0; 398 | }; 399 | }; 400 | /* End XCRemoteSwiftPackageReference section */ 401 | 402 | /* Begin XCSwiftPackageProductDependency section */ 403 | 235F1E7E2BADD1ED003A8FE8 /* LaunchAtLogin */ = { 404 | isa = XCSwiftPackageProductDependency; 405 | package = 235F1E7D2BADD1ED003A8FE8 /* XCRemoteSwiftPackageReference "LaunchAtLogin-Modern" */; 406 | productName = LaunchAtLogin; 407 | }; 408 | /* End XCSwiftPackageProductDependency section */ 409 | }; 410 | rootObject = 23D3242A2BAAF44500B5F2C0 /* Project object */; 411 | } 412 | --------------------------------------------------------------------------------