Skip to content

In-app updates via AppUpdater (needs a signed release path first) #7

Description

@trsdn

Goal

OpenPromptr should update itself from GitHub Releases.

Specific to this repository

  • The broker profile is stale.
    • The broker's teleprompter profile already points at this repository: repository_id 1339874326, still named trsdn/teleprompter-mirror-macos.
    • It describes the old identity: Teleprompter Mirror.app, com.github.trsdn.TeleprompterMirror, executable TeleprompterMirror, ZIP only.
    • The app is now OpenPromptr with com.github.trsdn.OpenPromptr, so the profile has to be updated before any release. Rename it to openpromptr, and add a DMG plus the OpenPromptr-{version}.dmg copy_of, the lock and the resource bundle, like feat: AppUpdater releases for opendefendrwatchr, onboard openzombr macos-notarization-broker#46.
  • 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:

To do

  • Broker: update the stale teleprompter profile to the OpenPromptr identity (name, bundle ID, executable, artifacts, lock, resource bundle).
  • Add AppUpdater 4.1.2 (exact version), commit Package.resolved, and add an UpdateManager with menu items. Block installing while a display is mirrored.
  • Document the release process.
  • First release, then test an update with the second one.

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions