Device compatibility (regression fix): - The CAMERA permission (from zxing_barcode_scanner / image_picker) implicitly required android.hardware.camera, excluding camera-less devices — Play showed Automotive -96%, Chromebook -86%, TV -25%. Declare camera & location uses-feature required="false" to keep those devices supported. - Detect a real camera at runtime (PackageManager.FEATURE_CAMERA_ANY via the existing MethodChannel), cache it at bootstrap, and hide the QR scan button and the camera photo-source option when absent, so no broken actions are offered. Play "app optimization" recommendations: - Enable R8 (isMinifyEnabled + isShrinkResources) with keep rules for the OCR (tesseract4android), SQLCipher and notifications JNI/reflection code. - Bitmap downscaling: cacheWidth/cacheHeight (and ResizeImage for avatars) on list thumbnails and avatars so photos decode to on-screen size, not full res. - Edge-to-edge: opt in with transparent system bars in main(). Release flow: - Tagged builds now publish to the production track at 100% (was internal); add a manual deploy_internal lane as a QA safety net. - Document country/region availability as a Play Console setting (not in-repo).
66 lines
2.3 KiB
Ruby
66 lines
2.3 KiB
Ruby
# Fastlane lanes for Tane (org.comunes.tane).
|
|
#
|
|
# Publishing is automated and password-free: a git tag triggers CI, which builds
|
|
# a signed AAB and runs `deploy_play`. Credentials come from CI secrets, never
|
|
# typed by hand:
|
|
# SUPPLY_JSON_KEY_DATA Google Play service-account JSON (raw contents)
|
|
#
|
|
# The store listing (titles, descriptions, changelogs, screenshots) is read
|
|
# straight from fastlane/metadata/android/<locale>/ — the tree that already
|
|
# feeds the landing site and F-Droid. See docs/release.md and .gitlab-ci.yml.
|
|
|
|
default_platform(:android)
|
|
|
|
# Release bundle produced by `flutter build appbundle --release`, relative to
|
|
# the app dir (apps/app_seeds), which is where fastlane runs.
|
|
AAB_PATH = "build/app/outputs/bundle/release/app-release.aab".freeze
|
|
|
|
platform :android do
|
|
desc "Upload the signed AAB + store listing to Google Play (production, 100%)"
|
|
lane :deploy_play do
|
|
supply(
|
|
track: "production",
|
|
aab: AAB_PATH,
|
|
release_status: "completed", # publish to 100% of users (subject to review)
|
|
skip_upload_apk: true, # we ship the AAB, not a raw APK
|
|
skip_upload_changelogs: false,
|
|
)
|
|
end
|
|
|
|
desc "Upload the signed AAB to the internal test track (manual QA safety net)"
|
|
lane :deploy_internal do
|
|
supply(
|
|
track: "internal",
|
|
aab: AAB_PATH,
|
|
release_status: "completed", # internal testing has no review delay
|
|
skip_upload_apk: true,
|
|
skip_upload_changelogs: false,
|
|
)
|
|
end
|
|
|
|
desc "Push only the store listing (text + images), no binary"
|
|
lane :deploy_metadata do
|
|
supply(
|
|
skip_upload_aab: true,
|
|
skip_upload_apk: true,
|
|
)
|
|
end
|
|
|
|
# Promote the release currently on the internal track to production, reusing
|
|
# the SAME already-reviewed AAB (no rebuild, no new versionCode). Requires the
|
|
# service account to have "Release to production" permission in Play Console.
|
|
# Usage: bundle exec fastlane promote_production
|
|
desc "Promote the internal-track release to production (no rebuild)"
|
|
lane :promote_production do
|
|
supply(
|
|
track: "internal",
|
|
track_promote_to: "production",
|
|
skip_upload_aab: true,
|
|
skip_upload_apk: true,
|
|
skip_upload_metadata: true,
|
|
skip_upload_changelogs: true,
|
|
skip_upload_images: true,
|
|
skip_upload_screenshots: true,
|
|
)
|
|
end
|
|
end
|