Replay 0.9.7
Download
Replay-0.9.7.zip — unzip it and drag Replay.app to Applications.
Running 0.9.3 or newer already? Settings ▸ About ▸ Check for updates will offer this one and
install it for you, checking it against the SHA-256 published beside the zip. A Homebrew copy
is left to brew upgrade, as it should be.
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:
- Try to open Replay once and dismiss the warning.
- Go to System Settings ▸ Privacy & Security, scroll down, click Open Anyway.
- 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.appRight-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 readerA 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
- Replay can be read in another language, and there is now a way to translate it.
Settings ▸ General ▸ Language, listing only the languages this build actually carries —
and the switch takes effect immediately rather than at the next launch. - A translation kit, because the two things that translate text — a person and a service —
both want a table, and neither wants a.stringsfile.node tools/translate.mjs new fr
writestranslations/fr.csv, a service or a translator fills the second column,build fr
turns it into the catalogue that ships. Re-runningnewkeeps what is already translated
and adds rows for anything the app has gained since.statussays how far each language is.
Instructions, including what a translator needs to know about%@, are in
docs/TRANSLATING.md. - A language ships only when it is complete.
buildrefuses below 100% unless--partial
is passed: an.lprojtells macOS "Replay speaks this", and a Mac set to it would then show
translated and English lines mixed with no way to tell which is which. - Uzbek, complete — all 423 strings, so it ships without
--partial. It is machine-made
and wants a native reader: corrections belong intranslations/uz.csv, and rebuilding is one
command. Twelve more languages are scaffolded and empty, ready for a service or a person.
Fixed
- Swift unicode escapes were being carried into the table as text. Three of the longest
strings in the app contain\u{2019}in the source; the extractor took them literally, so
those keys could never have matched the string the app actually looks up. Found by
translating them — nothing else would have. - The sidebar was never translatable, and no audit could have said so: its names arrive as
Navigation.Surface.rawValue, andtools/strings-audit.mjslooks for literals. The most
visible column in the app was English in every language while the audit read clean. It goes
throughLocnow, and the extractor knows about the helpers that take copy as an argument.