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
md2loop should update itself from GitHub Releases.
Specific to this repository
Broker profile:md2loop (Xcode, already uses a broker dependency_lock). The DMG is md2loop-{version}-macos.dmg.
Add md2loop-{version}.dmg as a copy_of it.
The DMG must contain one app named like the installed one.
Lock: add AppUpdater to the Xcode project (project.yml) and update the broker's locks/md2loop-Package.resolved in the same broker PR, because the adapter overwrites the workspace lock with it.
Resource bundle: declare AppUpdater_AppUpdater.bundle under nested_resource_bundles, because Xcode embeds it.
release.yml: it signs releases itself. Make sure it doesn't also publish a DMG under the updater's name, which would race the broker.
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
md2loop should update itself from GitHub Releases.
Specific to this repository
md2loop(Xcode, already uses a brokerdependency_lock). The DMG ismd2loop-{version}-macos.dmg.md2loop-{version}.dmgas acopy_ofit.project.yml) and update the broker'slocks/md2loop-Package.resolvedin the same broker PR, because the adapter overwrites the workspace lock with it.AppUpdater_AppUpdater.bundleundernested_resource_bundles, because Xcode embeds it.release.yml: it signs releases itself. Make sure it doesn't also publish a DMG under the updater's name, which would race the broker.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.md2loop-{version}.dmgcopy_ofartifact.scripts/request.sh md2loop vX.Y.Z --publish.🤖 Generated with Claude Code