Build
Run ./build.sh to build the app.
On GitHub Actions, a pull request that changes code runs ./test.sh. A push to main also builds the app and renders the screens. Changes to Markdown and docs/ skip the run.
Test
Run ./test.sh to run the checks in Tests/. The checks use private pasteboards and temporary files. They never touch your clipboard or your library.
Releasing
To publish a release, push a tag such as vX.Y.Z:
git tag vX.Y.Z
git push origin vX.Y.ZOr run the Release workflow by hand and enter a version. Either way, GitHub Actions builds and checks the app, then publishes Library-X.Y.Z.zip. The zip holds only the source needed to build the app. Tests, workflows, docs, scripts, test.sh, and update.sh are left out.
If publishing fails with a server error, the workflow makes up to four attempts. Running it again is safe. It skips a release that already exists.
Languages
Library is in English. The text lives in Sources/Library/Resources/en.lproj/Localizable.strings.
Write each user-facing string as Text("…", bundle: L10n.bundle), or as String(localized: "…", bundle: L10n.bundle) where a String is needed. To add a string, add a line such as "key" = "value"; with a /* comment */ above it.
Dynamic text, such as file names, counts, and clipboard contents, isn't localized.