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
No release yet: AppUpdater only installs Developer ID-signed updates from the same team, so the first signed release has to come from the broker.
Identity change: because the bundle identifier changed, existing Teleprompter Mirror installs will never update to OpenPromptr. Users install it fresh.
Screen Recording permission: it is tied to the code signature. Keep the signing identity stable across updates, and expect one re-grant after moving from ad-hoc to Developer ID signing.
Never install mid-session: a teleprompter must not restart during a talk. Only offer the install while nothing is being mirrored, and never install automatically.
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
OpenPromptr should update itself from GitHub Releases.
Specific to this repository
teleprompterprofile already points at this repository:repository_id1339874326, still namedtrsdn/teleprompter-mirror-macos.Teleprompter Mirror.app,com.github.trsdn.TeleprompterMirror, executableTeleprompterMirror, ZIP only.OpenPromptrwithcom.github.trsdn.OpenPromptr, so the profile has to be updated before any release. Rename it toopenpromptr, and add a DMG plus theOpenPromptr-{version}.dmgcopy_of, the lock and the resource bundle, like feat: AppUpdater releases for opendefendrwatchr, onboard openzombr macos-notarization-broker#46.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
teleprompterprofile to the OpenPromptr identity (name, bundle ID, executable, artifacts, lock, resource bundle).Package.resolved, and add anUpdateManagerwith menu items. Block installing while a display is mirrored.🤖 Generated with Claude Code