Commit ea53e60c authored by Kourser's avatar Kourser
Browse files

fix(app-store): macOS shots — launch binary directly to force language



`open --args -AppleLanguages` is not honored by the app (captures came out
in the base language). Launching the executable directly puts -AppleLanguages
in NSUserDefaults' argument domain, which the app respects (verified: ja/ko
captures render localized). Also raises the seed wait.

Co-Authored-By: default avatarClaude Opus 4.8 <noreply@anthropic.com>
parent 8a706b79
Loading
Loading
Loading
Loading
+19 −16
Original line number Diff line number Diff line
@@ -7,28 +7,29 @@
#   ./fastlane/generate_shots_macos.sh
#
# ⚠️ À LANCER DANS TA SESSION GRAPHIQUE INTERACTIVE (pas via SSH / agent headless) :
# l'app doit pouvoir créer sa fenêtre et rendre son contenu. Vérifie la première
# capture produite avant de laisser tourner les 22 langues.
# l'app doit pouvoir créer sa fenêtre et rendre son contenu.
#
# Recette (apprise à la dure) :
#   - le seed (-uiSeed) BLOQUE le flux de capture s'il est combiné → on sème UNE
#     fois d'abord, puis on capture sans -uiSeed (les données persistent) ;
#   - l'argument -AppleLanguages n'est pas honoré par l'app macOS → on force la
#     langue via `defaults write <bundle> AppleLanguages` avant chaque lancement.
#   - IMPORTANT : `open --args -AppleLanguages` N'EST PAS honoré → on lance le
#     BINAIRE DIRECTEMENT ("$APP/Contents/MacOS/Skingomz") avec -AppleLanguages,
#     ce qui place bien la langue dans le domaine argument de NSUserDefaults.
set -uo pipefail
cd "$(dirname "$0")/.."
export DEVELOPER_DIR="${DEVELOPER_DIR:-/Applications/Xcode.app/Contents/Developer}"

BUNDLE=eu.cythin.skingomz
OUT="fastlane/screenshots_macos"
DD="build/dd-macos-shots"
HERE="build/appstore-screenshots"     # compose.swift
RAW="$(mktemp -d)/raw.png"

# asc : code AppleLanguages : AppleLocale
LOCALES=(
  "fr-FR:fr" "en-US:en" "de-DE:de" "es-ES:es" "it:it" "pt-PT:pt" "pt-BR:pt-BR"
  "nl-NL:nl" "pl:pl" "sv:sv" "da:da" "fi:fi" "el:el" "hu:hu" "ro:ro" "sk:sk"
  "cs:cs" "hr:hr" "zh-Hans:zh-Hans" "ja:ja" "ko:ko" "ru:ru"
  "fr-FR:fr:fr_FR" "en-US:en:en_US" "de-DE:de:de_DE" "es-ES:es:es_ES" "it:it:it_IT"
  "pt-PT:pt:pt_PT" "pt-BR:pt-BR:pt_BR" "nl-NL:nl:nl_NL" "pl:pl:pl_PL" "sv:sv:sv_SE"
  "da:da:da_DK" "fi:fi:fi_FI" "el:el:el_GR" "hu:hu:hu_HU" "ro:ro:ro_RO" "sk:sk:sk_SK"
  "cs:cs:cs_CZ" "hr:hr:hr_HR" "zh-Hans:zh-Hans:zh_CN" "ja:ja:ja_JP" "ko:ko:ko_KR" "ru:ru:ru_RU"
)
SCREENS=( "01-library:" "02-inbox:inbox" "03-detail:detail" "04-queue:queue" )

@@ -40,24 +41,27 @@ if [ -z "$APP" ]; then
  APP=$(find "$DD/Build/Products" -name 'Skingomz.app' -type d | head -1)
fi
[ -n "$APP" ] || { echo "✗ Skingomz.app introuvable"; exit 1; }
BIN="$APP/Contents/MacOS/Skingomz"

quit() { pkill -f "Skingomz.app/Contents/MacOS/Skingomz" 2>/dev/null || true; sleep 1; }
quit() { pkill -9 -f "Skingomz.app/Contents/MacOS/Skingomz" 2>/dev/null || true; sleep 1; }

echo "▶︎ Seed unique (données démo persistées)…"
quit
open "$APP" --args -uiSeed
sleep 12
"$BIN" -uiSeed >/dev/null 2>&1 &
sleep 14
quit

for entry in "${LOCALES[@]}"; do
  IFS=":" read -r asc code <<< "$entry"
  defaults write "$BUNDLE" AppleLanguages -array "$code"
  IFS=":" read -r asc code loc <<< "$entry"
  mkdir -p "$OUT/$asc"
  for sc in "${SCREENS[@]}"; do
    IFS=":" read -r fname arg <<< "$sc"
    quit; rm -f "$RAW"
    if [ -z "$arg" ]; then open "$APP" --args -uiCapture "$RAW"
    else open "$APP" --args -uiScreen "$arg" -uiCapture "$RAW"; fi
    if [ -z "$arg" ]; then
      "$BIN" -uiCapture "$RAW" -AppleLanguages "($code)" -AppleLocale "$loc" >/dev/null 2>&1 &
    else
      "$BIN" -uiScreen "$arg" -uiCapture "$RAW" -AppleLanguages "($code)" -AppleLocale "$loc" >/dev/null 2>&1 &
    fi
    i=0; until [ -s "$RAW" ] || [ "$i" -ge 20 ]; do sleep 1; i=$((i+1)); done
    if [ ! -s "$RAW" ]; then echo "  ✗ $asc/$fname"; continue; fi
    W=$(sips -g pixelWidth "$RAW" | awk '/pixelWidth/{print $2}')
@@ -68,5 +72,4 @@ for entry in "${LOCALES[@]}"; do
  echo "[$asc] ✓"
done
quit
defaults delete "$BUNDLE" AppleLanguages 2>/dev/null || true
echo "✓ Terminé -> $OUT"