Add Fastlane Play Store integration with automated screenshots
Fastlane supply config (android/fastlane) with de-DE metadata structure, integration_test-driven screenshot automation (screenshot_test.dart, test_driver, tool/screenshots.sh) using stable keys on the login form, refreshed materials/screenshots (phone + 7-inch) and app banner/symbol. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Executable
+116
@@ -0,0 +1,116 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Store-Screenshots über den Demo-Login aufnehmen.
|
||||
#
|
||||
# Fährt den integration_test-Screenshot-Lauf (integration_test/screenshot_test.dart)
|
||||
# über flutter drive für die drei von Google Play verlangten Formfaktoren durch
|
||||
# (Phone + 7″ + 10″ Tablet sind inzwischen Pflicht). Statt drei AVDs zu verwalten,
|
||||
# wird EIN laufendes Gerät/Emulator pro Durchlauf per `adb shell wm size/density`
|
||||
# auf die Zielauflösung gebracht; takeScreenshot liefert dann Frames in genau
|
||||
# dieser Pixelgröße.
|
||||
#
|
||||
# Ablage:
|
||||
# - kanonisch (versioniert): materials/screenshots/android/<formfaktor>/
|
||||
# - Kopie für den Upload: android/fastlane/metadata/android/de-DE/images/<...>Screenshots/
|
||||
# Danach: `cd android && fastlane upload_screenshots`.
|
||||
#
|
||||
# Voraussetzungen:
|
||||
# - genau ein per `adb devices` sichtbares Gerät/Emulator (>= Android 8)
|
||||
# - flutter, adb im PATH
|
||||
#
|
||||
# Aufruf (vom Client-Projektwurzelverzeichnis):
|
||||
# tool/screenshots.sh # debug-Build (schnell)
|
||||
# BUILD_MODE=profile tool/screenshots.sh
|
||||
# PROFILES="phone" tool/screenshots.sh # nur eine Größe
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
BUILD_MODE="${BUILD_MODE:-debug}"
|
||||
MATERIALS_BASE="materials/screenshots/android"
|
||||
FASTLANE_BASE="android/fastlane/metadata/android/de-DE/images"
|
||||
APP_ID="eu.mhsl.marianum.mobile.client"
|
||||
|
||||
# name | breite x höhe (px) | dichte (dpi) | materials-Ordner | fastlane-Ordner
|
||||
# Phone nutzt die NATIVE Displayauflösung des Geräts (voller Hochformat, nicht
|
||||
# auf 16:9 gestaucht). Tablets im QUERFORMAT (Breite > Höhe); bei den
|
||||
# Landscape-Breiten (>1000dp) zeigt Talk zudem die Master-Detail-Splitview.
|
||||
# Dichten so gewählt, dass die adaptive Bottom-Bar die passende Tab-Anzahl zeigt.
|
||||
declare -A PROFILE_SIZE=(
|
||||
[phone]="native" [seven]="1920x1200" [ten]="2560x1600"
|
||||
)
|
||||
declare -A PROFILE_DENSITY=(
|
||||
[phone]="native" [seven]="240" [ten]="280"
|
||||
)
|
||||
declare -A PROFILE_MATERIALS=(
|
||||
[phone]="phone" [seven]="7-inch" [ten]="10-inch"
|
||||
)
|
||||
declare -A PROFILE_FASTLANE=(
|
||||
[phone]="phoneScreenshots"
|
||||
[seven]="sevenInchScreenshots"
|
||||
[ten]="tenInchScreenshots"
|
||||
)
|
||||
|
||||
PROFILES="${PROFILES:-phone seven ten}"
|
||||
|
||||
# App-APK einmal vorab bauen, damit sie vor jedem `flutter drive` installiert
|
||||
# und die Notification-Permission gegrantet werden kann (drive deinstalliert die
|
||||
# App nach jedem Lauf, sonst wäre der Grant weg und ein Systemdialog könnte die
|
||||
# Screenshots verdecken). Der eigentliche drive-Lauf reinstalliert sie per -r.
|
||||
APK="build/app/outputs/flutter-apk/app-${BUILD_MODE}.apk"
|
||||
echo "Baue App-APK ($BUILD_MODE) vorab…"
|
||||
flutter build apk "--$BUILD_MODE"
|
||||
|
||||
reset_display() {
|
||||
echo "Setze Displaygröße/-dichte zurück…"
|
||||
adb shell wm size reset || true
|
||||
adb shell wm density reset || true
|
||||
}
|
||||
trap reset_display EXIT
|
||||
|
||||
for profile in $PROFILES; do
|
||||
size="${PROFILE_SIZE[$profile]}"
|
||||
density="${PROFILE_DENSITY[$profile]}"
|
||||
materials_dir="$MATERIALS_BASE/${PROFILE_MATERIALS[$profile]}"
|
||||
fastlane_dir="$FASTLANE_BASE/${PROFILE_FASTLANE[$profile]}"
|
||||
|
||||
echo ""
|
||||
echo "=== Profil '$profile' ($size @ ${density}dpi) -> $materials_dir ==="
|
||||
mkdir -p "$materials_dir" "$fastlane_dir"
|
||||
rm -f "$materials_dir"/*.png "$fastlane_dir"/*.png
|
||||
|
||||
# "native" -> Geräteauflösung/-dichte verwenden (für Phone), sonst erzwingen.
|
||||
if [ "$size" = "native" ]; then
|
||||
adb shell wm size reset
|
||||
adb shell wm density reset
|
||||
else
|
||||
adb shell wm size "$size"
|
||||
adb shell wm density "$density"
|
||||
fi
|
||||
|
||||
# App sicherstellen, frische (ausgeloggte) Session erzwingen und
|
||||
# Notification-Permission erteilen, bevor drive läuft. pm clear setzt auch die
|
||||
# Runtime-Permissions zurück, daher der Grant DANACH.
|
||||
[ -f "$APK" ] && adb install -r "$APK" >/dev/null 2>&1 || true
|
||||
adb shell pm clear "$APP_ID" >/dev/null 2>&1 || true
|
||||
adb shell pm grant "$APP_ID" android.permission.POST_NOTIFICATIONS 2>/dev/null || true
|
||||
sleep 2
|
||||
|
||||
SCREENSHOT_OUT_DIR="$materials_dir" flutter drive \
|
||||
--driver=test_driver/integration_test.dart \
|
||||
--target=integration_test/screenshot_test.dart \
|
||||
--"$BUILD_MODE" \
|
||||
--no-dds
|
||||
|
||||
# Kanonische Bilder in den Fastlane-Upload-Ordner spiegeln.
|
||||
cp "$materials_dir"/*.png "$fastlane_dir"/
|
||||
echo "Profil '$profile' fertig: $(ls -1 "$materials_dir"/*.png 2>/dev/null | wc -l) Screenshots"
|
||||
done
|
||||
|
||||
reset_display
|
||||
trap - EXIT
|
||||
|
||||
echo ""
|
||||
echo "Kanonische Screenshots: $MATERIALS_BASE/{phone,7-inch,10-inch}/"
|
||||
echo "Upload: cd android && fastlane upload_screenshots"
|
||||
Reference in New Issue
Block a user