From 937be585913e553f00f1d22b5826508a32c24b21 Mon Sep 17 00:00:00 2001 From: Brandon Pickering Date: Wed, 29 Jan 2025 17:45:09 -0800 Subject: [PATCH] Add Sparkle and enabled hardened runtime --- ScreenShader.xcodeproj/project.pbxproj | 29 +++++++++++++++++++ .../xcshareddata/swiftpm/Package.resolved | 14 +++++++++ ScreenShader/ScreenShader.entitlements | 2 ++ ScreenShader/main.swift | 11 +++++++ 4 files changed, 56 insertions(+) create mode 100644 ScreenShader.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/ScreenShader.xcodeproj/project.pbxproj b/ScreenShader.xcodeproj/project.pbxproj index 4ccd9ff..b6a725d 100644 --- a/ScreenShader.xcodeproj/project.pbxproj +++ b/ScreenShader.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 416975FD2D497E21004C8E93 /* error_message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 416975F32D497E21004C8E93 /* error_message.swift */; }; 416975FE2D497E21004C8E93 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 416975F42D497E21004C8E93 /* main.swift */; }; 416975FF2D497E21004C8E93 /* effect_view.swift in Sources */ = {isa = PBXBuildFile; fileRef = 416975F52D497E21004C8E93 /* effect_view.swift */; }; + 41C290E42D4B04A100675317 /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = 41C290E32D4B04A100675317 /* Sparkle */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -47,6 +48,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 41C290E42D4B04A100675317 /* Sparkle in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -130,6 +132,9 @@ dependencies = ( ); name = ScreenShader; + packageProductDependencies = ( + 41C290E32D4B04A100675317 /* Sparkle */, + ); productName = ScreenShader; productReference = 4159FE5C2D497D4400B79670 /* ScreenShader.app */; productType = "com.apple.product-type.application"; @@ -158,6 +163,9 @@ Base, ); mainGroup = 4159FE532D497D4400B79670; + packageReferences = ( + 41C290E22D4B04A100675317 /* XCRemoteSwiftPackageReference "Sparkle" */, + ); productRefGroup = 4159FE5D2D497D4400B79670 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -325,6 +333,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; + ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ScreenShader/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = ScreenShader; @@ -352,6 +361,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; + ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ScreenShader/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = ScreenShader; @@ -392,6 +402,25 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 41C290E22D4B04A100675317 /* XCRemoteSwiftPackageReference "Sparkle" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sparkle-project/Sparkle"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.6.4; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 41C290E32D4B04A100675317 /* Sparkle */ = { + isa = XCSwiftPackageProductDependency; + package = 41C290E22D4B04A100675317 /* XCRemoteSwiftPackageReference "Sparkle" */; + productName = Sparkle; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 4159FE542D497D4400B79670 /* Project object */; } diff --git a/ScreenShader.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ScreenShader.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..0f4f31c --- /dev/null +++ b/ScreenShader.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,14 @@ +{ + "pins" : [ + { + "identity" : "sparkle", + "kind" : "remoteSourceControl", + "location" : "https://github.com/sparkle-project/Sparkle", + "state" : { + "revision" : "0ef1ee0220239b3776f433314515fd849025673f", + "version" : "2.6.4" + } + } + ], + "version" : 2 +} diff --git a/ScreenShader/ScreenShader.entitlements b/ScreenShader/ScreenShader.entitlements index 18aff0c..782cf2d 100644 --- a/ScreenShader/ScreenShader.entitlements +++ b/ScreenShader/ScreenShader.entitlements @@ -4,6 +4,8 @@ com.apple.security.app-sandbox + com.apple.security.cs.disable-library-validation + com.apple.security.files.user-selected.read-only diff --git a/ScreenShader/main.swift b/ScreenShader/main.swift index e5918be..449bb3b 100644 --- a/ScreenShader/main.swift +++ b/ScreenShader/main.swift @@ -1,7 +1,9 @@ import AppKit import CoreGraphics +import Sparkle class AppDelegate: NSObject, NSApplicationDelegate { + private var updaterController: SPUStandardUpdaterController! private var config: Config! private var configChanged: Bool = false private var metrics: Metrics = Metrics() @@ -11,6 +13,8 @@ class AppDelegate: NSObject, NSApplicationDelegate { private var configWindowController: ConfigWindowController? func applicationDidFinishLaunching(_ notification: Notification) { + self.updaterController = SPUStandardUpdaterController(startingUpdater: true, updaterDelegate: nil, userDriverDelegate: nil) + if CGRequestScreenCaptureAccess() { print("Screen capture access granted.") } else { @@ -71,6 +75,13 @@ class AppDelegate: NSObject, NSApplicationDelegate { title: "Settings", action: #selector(self.openConfigWindow), keyEquivalent: ",") settingsItem.target = self appSubMenu.addItem(settingsItem) + + let updatesItem = NSMenuItem( + title: "Check for updates", + action: #selector(SPUStandardUpdaterController.checkForUpdates(_:)), + keyEquivalent: "") + updatesItem.target = self.updaterController + appSubMenu.addItem(updatesItem) appSubMenu.addItem(NSMenuItem.separator()) appSubMenu.addItem( -- 2.51.2