- content/ + scripts/build-content.py produce content.json for every app
- stable lesson IDs with one-time progress migration (Swift, Kotlin)
- shared answer-check tests (tests/answers.json) for Kotlin and Swift
- android/desktop: Compose app with updater, speech and GTK progress import
- CI packages AppImage and Windows zip with ProGuard, runs the tests
Co-authored-by: Cursor <cursoragent@cursor.com>
Maturita.xcworkspace points at ios/Maturita.xcodeproj; opening the
project from the repository root otherwise resolves Maturita/ to the
compiled desktop binary on a case-insensitive disk.
Co-authored-by: Cursor <cursoragent@cursor.com>
The build script now extracts content.json into derived data and copies
it into the app bundle, so no generated file is referenced from the
project or written into the repository. Signing is explicit: ad hoc for
the simulator, automatic with your own team for a device.
Co-authored-by: Cursor <cursoragent@cursor.com>
Each installer carries no application of its own and resolves
/releases/latest/download/ at the moment it runs, so the file never goes
stale and the same download keeps working across future releases.
macOS installs into /Applications, falling back to the user's own folder
when that is not writable, and clears the quarantine flag the unsigned
build would otherwise trip over. Windows extracts over any existing
install rather than replacing the folder, so the progress files kept
inside it survive, and adds a Start menu entry. Linux drops the AppImage
in ~/Applications with a desktop entry and its icon.
Publish the macOS one zipped, because a release asset loses its
executable bit and a .command needs one to be double-clicked.
The .cmd also had to be excluded from the *.cmd ignore rule, which comes
from the kernel section of the template and targets build artifacts.
Co-authored-by: Cursor <cursoragent@cursor.com>