2.1 KiB
2.1 KiB
Expo HAS CHANGED
Read the exact versioned docs at https://docs.expo.dev/versions/v56.0.0/ before writing any code.
Versioning & Build Rules
Whenever a new build is triggered, the version MUST be updated in BOTH app.json and package.json.
versionformat:23.01.XversionCode:X(just the last number) Examples:- version
23.01.1-> versionCode1 - version
23.01.3-> versionCode3 - version
23.01.123-> versionCode123
IMPORTANT: After bumping the version in app.json, you MUST run npx expo prebuild -p android --no-install BEFORE running Gradle (.\gradlew assembleRelease). Otherwise, android/app/build.gradle will retain the old version code and the Play Store will reject the upload!
Apps must always be built as BOTH .apk and .aab.
The exact naming syntax for compiled files is:
Schnappix_v23.01.X.apk
Schnappix_v23.01.X.aab
IMPORTANT: All compiled files must be placed in the apks/ directory (e.g. apks/Schnappix_v23.01.X.apk). Do NOT place them in the root directory.
Architectural Decisions & Project Rules
- Kiosk Mode (Device Owner)
- The app uses Custom Native Modules (Kotlin) for LockTask mode. It does NOT use external MDM software.
- For LockTask to work, the app MUST be set as Device Owner via ADB (
adb shell dpm set-device-owner de.orfel.schnappix/de.orfel.schnappix.KioskDeviceAdminReceiver).
- Photo Saving (Permissions)
- Uses modern Android MediaStore API (
writeOnly = truevia expo-media-library) to save photos directly toSchnappix - <EventName> - CollagenandSchnappix - <EventName> - Originale. - Do NOT attempt to force legacy
WRITE_EXTERNAL_STORAGEorREAD_EXTERNAL_STORAGEon Android 13+, as it will fail.
- Uses modern Android MediaStore API (
- Package Name
- Must strictly remain
de.orfel.schnappix.
- Must strictly remain
Git & Workflow Rules
- Always Commit and Push: At the end of every interaction or when tasks are completed, ALL changes must be automatically committed and pushed to Git (
git add .,git commit,git push). - Push Retry Bug: If
git pushfails with an authentication error, ALWAYS try running it a second time, as it usually succeeds on the retry.