1114291313
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>
117 lines
4.4 KiB
Bash
Executable File
117 lines
4.4 KiB
Bash
Executable File
#!/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"
|