Skip to content

Replay 0.9.8

Choose a tag to compare

@github-actions github-actions released this 29 Jul 19:20
· 25 commits to main since this release

Download

Replay-0.9.8.zip — unzip it and drag Replay.app to Applications.

macOS will refuse to open it the first time. Here is why, and what to do.

Replay has no Apple Developer ID yet, so macOS marks it as unverified and shows
"Apple could not verify Replay is free of malware" — offering only Move to
Trash
or Cancel. That message is about a missing certificate, not about
anything found in the app
. Every unsigned app gets it.

To open it:

  1. Try to open Replay once and dismiss the warning.
  2. Go to System Settings ▸ Privacy & Security, scroll down, click Open Anyway.
  3. Confirm. It opens normally from then on.

Or one line in a terminal, which does the same thing:

xattr -dr com.apple.quarantine /Applications/Replay.app

Right-click ▸ Open does not work. That bypass existed for years and Apple
removed it in macOS 15. It is still the advice in most projects' READMEs.

Or skip all of that

Homebrew compiles it on your machine, so it is never downloaded, never quarantined,
and opens with no warning at all:

brew tap nurkamol/tap
brew install nurkamol/tap/replay-app    # the application
brew install nurkamol/tap/replay        # the command-line reader

A signed, notarised disk image — no warnings, nothing to click through — appears
here the day there is a certificate. The workflow that builds it is already written.


Added

  • Reinstall, in Settings ▸ About. Downloads the published build of the version you are
    already on and replaces this copy.

    • A version number stops being the whole truth when a release is rebuilt under it. Two
      builds then share a number, "check for updates" correctly answers "you are up to date", and
      a copy of the earlier one has no way forward. That happened to this very release, twice.
    • Also the repair for a bundle that is merely damaged — right version, wrong contents.
    • Never automatic and never suggested. The same download, checksum and swap as an ordinary
      update, with only the "is it newer?" test skipped. Your record is untouched.
    • It says so afterwards. A reinstall comes back at the version it left, so the note that
      normally follows an update — decided by comparing versions — had nothing to compare and
      said nothing at all. Pressing a button and getting silence is the one outcome that leaves
      you no better off, so the banner now reads Reinstalled Replay 0.9.8.
  • The permissions Replay does not use now have rows, in Settings ▸ Privacy and on the welcome
    screen.
    Each says where it stands and what it is for; Reset takes back anything granted
    earlier, which was previously impossible from inside the app.

    • Accessibility's button asks macOS to prompt, which puts Replay in the list — so all
      that is left is the switch. The two buttons here before opened System Settings and stopped,
      leaving somebody to press + and find Replay in /Applications by hand.
    • App Management has no button of that kind, because macOS offers none. No app can read
      or request it, so the row says so rather than showing a tick that would be a guess.
    • Every row offers a way in and, where there is something to undo, a way out — so a
      permission can be granted, taken back and granted again without leaving Settings. App
      Management always offers Reset, precisely because macOS will not say whether it is on:
      hiding the button until a permission "looks" granted would have made the one thing nobody
      can check also the one thing nobody could undo.
    • Nothing here is required and the rows never imply otherwise: no red, no warnings, no
      "action needed". Every row off is the state Replay is built for.
    • No password is ever asked for. macOS collects authorisation in its own window; an app that
      put up a password field to approve a toggle would be collecting a credential it has no
      business seeing, and it would not work anyway.
  • Replay runs on macOS 14 Sonoma. It required macOS 26 before, which is a version most
    Macs are not on. Exactly two calls in the interface needed something newer — the system's
    glass material (26) and a colour blend (15) — found by building the app against each floor
    in turn rather than by reading the code. Both are guarded, so three OS generations gained
    the app and nothing about it changed on a current Mac.

    • Below macOS 26 the Surfaces setting offers Solid and Frosted, and not Glass. A
      setting that silently did nothing would be worse than one that is not there.
    • A Glass preference carried over from a newer Mac — in a backup, or across an account —
      draws as Frosted rather than as nothing.
    • macOS 13 is not reachable the same way: the models are built on Observation, which begins
      at 14. That is a rewrite rather than a guard, and it is not planned.
  • A report on a schedule. Settings ▸ Data writes a report of the period that has just
    finished — yesterday, or the week just gone — into a folder you choose, as Markdown or
    HTML, keeping the eight most recent and removing only its own. The sibling of the scheduled
    backup and deliberately the same shape, with one difference worth stating: a backup is
    insurance you hope never to open, and this is the one file in the app meant to be read.

    • Past tense on purpose. A report of a day at two in the afternoon is wrong by six.
    • A period with nothing in it writes no file. A folder that fills with "nothing happened"
      is a folder somebody stops opening.
    • Not PDF: that is one page with a pointer to HTML, which is right for a document somebody
      asked for and wrong for a file that arrives on its own and might cover a busy week.

Changed

  • The parts of the app you read most are now translated. A session is called "Late night
    in Terminal" and a gap "8m not recorded" — sentences the app assembles at runtime, which had
    no whole string for a translator to be given and so stayed English in every language. Each
    is now a format string whose pieces a translation can reorder, which matters: in Uzbek the
    application's name comes first and the time of day after it. Session titles, the gaps
    between them, the day's headline figures, the sidebar sections, the resume card, the
    reflection prompt and the relative day and time labels all follow the chosen language.
    Uzbek is complete at 519 strings.
    • Still English everywhere: Story, the autobiography, Memories, the morning briefing,
      Collections and Projects. Those are the same kind of work and are listed as undone in
      docs/TRANSLATING.md rather than left to be discovered.

Fixed

  • The schedules section reported one schedule as if it were both. Its footer was the
    backup's, so "Nothing has been written yet" sat directly under a line saying a report had
    just been written.

  • A VoiceOver label was built from a malformed format string. One argument was handed to
    a two-placeholder format on the Chapters screen, mixing positional and non-positional
    specifiers — both undefined behaviour, and the label is read aloud.