Release builds were signed with the debug key, which Play rejects. Load
an upload keystore from android/key.properties (gitignored) and use it
for the release signing config, falling back to the debug key when the
file is absent so `flutter run --release` still works without a keystore.
Add key.properties.example documenting the keytool setup and a
build_android_release.sh helper that builds the signed AAB and refuses
to run when key.properties is missing.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Rename Android package com.example.frontend -> net.oottsecurity.app
(namespace, applicationId, MainActivity), and enable core library
desugaring required by flutter_local_notifications
- Configure Firebase from a committed lib/firebase_options.dart (client
identifiers, not secrets) instead of native config files; initialize the
push service with explicit options
- iOS: add Runner.entitlements (aps-environment) wired via CODE_SIGN_ENTITLEMENTS
for the Runner target, and UIBackgroundModes remote-notification in Info.plist
- gitignore the unused native Firebase config files defensively
dart analyze clean; 145 frontend tests pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>