From 1f292fb9c6ca16bcc539cd68f9fd95617a73dc75 Mon Sep 17 00:00:00 2001 From: dlev <49005290+dlev02@users.noreply.github.com> Date: Thu, 5 Nov 2026 18:53:20 -0600 Subject: [PATCH 1/5] Check for and install updates with Sparkle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds Sparkle 2 with its standard update window, a Check for Updates… command, and a Settings window to turn automatic checks off. Updates and the feed must be signed. While a cleaning session runs, no check starts, update windows stay hidden, and a relaunch waits until input is back. --- NOTICE | 3 + Package.resolved | 15 ++++ Package.swift | 3 +- Resources/Credits.html | 2 +- Resources/Info.plist | 11 ++- Resources/Sparkle-LICENSE.txt | 134 +++++++++++++++++++++++++++++ Sources/Keydoze/AboutView.swift | 4 +- Sources/Keydoze/App.swift | 8 ++ Sources/Keydoze/SessionModel.swift | 8 +- Sources/Keydoze/Updates.swift | 128 +++++++++++++++++++++++++++ script/build_and_run.sh | 14 ++- script/sign_app.sh | 11 +++ 12 files changed, 333 insertions(+), 8 deletions(-) create mode 100644 Package.resolved create mode 100644 Resources/Sparkle-LICENSE.txt create mode 100644 Sources/Keydoze/Updates.swift create mode 100755 script/sign_app.sh diff --git a/NOTICE b/NOTICE index 254381b..1db0c67 100644 --- a/NOTICE +++ b/NOTICE @@ -4,3 +4,6 @@ Copyright 2026 Drew Levinson Original project: https://github.com/dlev02/Keydoze Licensed under the Apache License, Version 2.0. See LICENSE. + +This product includes Sparkle (https://sparkle-project.org), under the MIT-style +license and third-party notices in Sparkle-LICENSE.txt. diff --git a/Package.resolved b/Package.resolved new file mode 100644 index 0000000..30628fa --- /dev/null +++ b/Package.resolved @@ -0,0 +1,15 @@ +{ + "originHash" : "c74feedec077414596b38c9cde0de68d42677dc4e7eae7e9f52f106592a75021", + "pins" : [ + { + "identity" : "sparkle", + "kind" : "remoteSourceControl", + "location" : "https://github.com/sparkle-project/Sparkle", + "state" : { + "revision" : "ab7d71291238df6e0492143b120c9b696a35f603", + "version" : "2.10.1" + } + } + ], + "version" : 3 +} diff --git a/Package.swift b/Package.swift index 4745644..5526c5d 100644 --- a/Package.swift +++ b/Package.swift @@ -4,9 +4,10 @@ let package = Package( name: "Keydoze", platforms: [.macOS("26.0")], products: [.executable(name: "Keydoze", targets: ["Keydoze"])], + dependencies: [.package(url: "https://github.com/sparkle-project/Sparkle", from: "2.0.0")], targets: [ .target(name: "KeydozeCore"), - .executableTarget(name: "Keydoze", dependencies: ["KeydozeCore"]), + .executableTarget(name: "Keydoze", dependencies: ["KeydozeCore", .product(name: "Sparkle", package: "Sparkle")]), .testTarget(name: "KeydozeCoreTests", dependencies: ["KeydozeCore"]), .testTarget(name: "KeydozeAdapterTests", dependencies: ["Keydoze", "KeydozeCore"]) ] diff --git a/Resources/Credits.html b/Resources/Credits.html index 918088a..d63c3af 100644 --- a/Resources/Credits.html +++ b/Resources/Credits.html @@ -5,5 +5,5 @@
A quiet moment for your Mac.
Created by Drew Levinson.
Open source under the Apache License 2.0.
License and attribution are included in this app.
Works offline. No accounts, analytics, or input recordings.
+No accounts, analytics, or input recordings. Only update checks use the network.