macOS app: in-app update checks, release notes, and one-click install - #310
Open
tekgnosis-net wants to merge 2 commits into
Open
tekgnosis-net wants to merge 2 commits into
tekgnosis-net wants to merge 2 commits into
Conversation
…dates menu item Add an `update-check` helper operation that combines the existing version.json check with GitHub Releases metadata (release notes, release page, app zip asset and its SHA256 digest). The app runs it on launch and on a configurable interval, shows a release-notes sheet with Download / Remind Me Later / Skip This Version, and adds "Check for Updates…" under the application menu. Required updates cannot be skipped. New helper env knobs and app settings are documented in DETAIL.md.
…eeper checks The update sheet gains Install Update. The app downloads TimeCapsuleSMB.app.zip from the GitHub release, verifies the SHA256 digest, expands it with ditto, checks bundle identifier and version, requires a valid Developer ID signature with the same Team ID as the running app and a passing spctl assessment, then moves the old bundle to the Trash, moves the new one into place and relaunches. Quarantine is never modified. Install is unavailable from source checkouts, read-only locations, ad-hoc builds, or while device operations run; the sheet falls back to Download in those cases.
tekgnosis-net
force-pushed
the
feature/app-updater
branch
from
September 22, 2026 15:05
f5dac8f to
4f2fda7
Compare
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
First, thank you for TimeCapsuleSMB. Getting modern Samba onto these old Time Capsules with a proper macOS app is a genuinely impressive piece of work, and it revived my own device. This PR is a small contribution back.
What this adds
min_supported_version) cannot be skipped.TimeCapsuleSMB.app.zip, verify the SHA256 against the release asset digest, expand withditto, check bundle identifier and version,codesign --verify --strict, require the same Team ID as the running app,spctlacceptance, then swap the bundle and relaunch. Quarantine is never modified, so this relies on your releases staying notarized (they are).Design notes
version.jsonremains the authority for "update available / required"; GitHub only supplies notes and the asset. Implemented as a newupdate-checkhelper operation;version-checkis untouched.TCAPSULE_RELEASE_API_URL,TCAPSULE_RELEASE_TIMEOUT_SECONDS,TCAPSULE_RELEASE_CACHE_SECONDS) or app settings; documented in DETAIL.md and RELEASE.md.Testing
make lint, full pytest (1825 passed). Swift:swift test(572 passed) on macOS 26 / Xcode 26.version.jsonand a GitHub-shapedlatest.json: launch prompt, menu item, Remind Me Later, Skip This Version, required-update variant, and Install Update through download, digest, expansion, bundle and signature checks up to the Team ID gate, where an unsigned local build is correctly refused. The final swap and relaunch could only be exercised with a Developer ID signed build, so I would appreciate a check on your side.