You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
release.yml: it must not upload a DMG under the updater's name.
Reference implementation
This is the same setup as OpenLens, OpenDefendrWatchr, OpenZombr and OpenConnct, all released on 2026-09-16:
The app:
An UpdateManager wraps mxcl/AppUpdater 4.1.2, pinned with exact: and with Package.resolved committed. See trsdn/OpenLens Sources/OpenLens/Update/UpdateManager.swift or trsdn/OpenDefendrWatchr Sources/OpenDefendrWatchr/Update/UpdateManager.swift.
It checks once a day (waking hourly), downloads and validates the update in the background, and offers Install and Restart.
The menu has Check for Updates… and a Check for Updates Automatically toggle, which is on by default.
The app stops its own work cleanly before the bundle is swapped.
Goal
Ptions+ should update itself from GitHub Releases.
Specific to this repository
ptionsplus(Xcode). The artifacts today arePtions+.dmg/Ptions+.zip, with no version.PtionsPlus-<semver>.dmg(the repository name), so addPtionsPlus-{version}.dmgas acopy_ofPtions+.dmg.Ptions+.app). Check that AppUpdater handles the+in the bundle name.AppUpdater_AppUpdater.bundle, and add a broker lock with-onlyUsePackageVersionsFromResolvedFile(see feat: AppUpdater support for openlens, with release publishing macos-notarization-broker#43).release.yml: it must not upload a DMG under the updater's name.Reference implementation
This is the same setup as OpenLens, OpenDefendrWatchr, OpenZombr and OpenConnct, all released on 2026-09-16:
UpdateManagerwraps mxcl/AppUpdater 4.1.2, pinned withexact:and withPackage.resolvedcommitted. See trsdn/OpenLensSources/OpenLens/Update/UpdateManager.swiftor trsdn/OpenDefendrWatchrSources/OpenDefendrWatchr/Update/UpdateManager.swift.GitHubAttestationPolicy:swift buildproducts, AppUpdater'sBundle.modulelookup never looks inContents/Resources, so verifying an attestation ends infatalError(In-app update verification will reject tag-triggered releases (attested ref is refs/tags/…, policy expects refs/heads/main) OpenWritr#31).<repository>-<semver>.dmg, containing one app with the installed app's file name. On the broker, add it as acopy_ofthe notarized DMG (feat: AppUpdater support for openlens, with release publishing macos-notarization-broker#43).scripts/request.sh <profile> vX.Y.Z --publishthen uploads it.dependency_lockequal to the app'sPackage.resolved.AppUpdater_AppUpdater.bundle, list it undernested_resource_bundles(examples: feat: AppUpdater releases for opendefendrwatchr, onboard openzombr macos-notarization-broker#46 for SwiftPM apps, feat(openconnct): pin AppUpdater and publish the updater DMG macos-notarization-broker#48 for a Makefile build).To do
Package.resolved.UpdateManagerand menu items, and stop the app's work before installing.PtionsPlus-{version}.dmgcopy_ofartifact.scripts/request.sh ptionsplus vX.Y.Z --publish.🤖 Generated with Claude Code