Commit 204f6110 authored by Kourser's avatar Kourser
Browse files

chore(app-store): add localized metadata and screenshots (22 languages)



App Store submission folder in fastlane deliver format for the 0.5.0
release: metadata (name, subtitle, promo, description, ASO keywords,
release notes) plus screenshots (iPhone 6.9" + iPad 13", 5 screens each)
for the 22 App Store Connect locales. Slovenian and Bulgarian are omitted
(not supported as App Store listing languages).

Co-Authored-By: default avatarClaude Opus 4.8 <noreply@anthropic.com>
parent e56234ea
Loading
Loading
Loading
Loading

fastlane/Deliverfile

0 → 100644
+17 −0
Original line number Diff line number Diff line
# Config fastlane deliver — Skingomz
# Usage :  fastlane deliver           (aperçu / upload interactif)
#          fastlane deliver --skip_binary_upload true --submit_for_review false
#
# Authentification recommandée : clé API App Store Connect
#   (ASC_KEY_ID / ASC_ISSUER_ID / .p8 — mêmes identifiants que scripts/release.env)
#   export APP_STORE_CONNECT_API_KEY_PATH / _KEY_ID / _ISSUER_ID
#   ou :  api_key_path("fastlane/asc_key.json")

app_identifier("eu.cythin.skingomz")

# metadata/ et screenshots/ sont lus depuis fastlane/ par défaut.
skip_binary_upload(true)      # la build 0.5.0 est déjà envoyée via release.sh
submit_for_review(false)      # on relit avant de soumettre
automatic_release(false)
precheck_include_in_app_purchases(false)
force(false)                  # afficher l'aperçu HTML avant d'envoyer

fastlane/README.md

0 → 100644
+120 −0
Original line number Diff line number Diff line
# Dossier de soumission App Store — Skingomz

Tout le nécessaire pour la fiche App Store, dans **22 langues**, au format
[fastlane deliver](https://docs.fastlane.tools/actions/deliver/). Prêt à
téléverser sur App Store Connect (via `fastlane deliver` ou copier-coller manuel).

Ces éléments accompagnent la build **0.5.0 (build 5)** déjà envoyée à
App Store Connect.

## Contenu

```
fastlane/
├── Deliverfile                  # config fastlane (bundle id + options)
├── metadata/
│   ├── copyright.txt            # © 2026 Cythin
│   ├── primary_category.txt     # ENTERTAINMENT (= fiche actuelle)
│   ├── secondary_category.txt   # NEWS
│   ├── review_information/
│   │   ├── notes.txt            # notes pour la review Apple (EN)
│   │   └── email_address.txt
│   └── <locale>/                # 22 dossiers (voir liste plus bas)
│       ├── name.txt             # « Skingomz » (≤30)
│       ├── subtitle.txt         # sous-titre (≤30)
│       ├── promotional_text.txt # texte promo, modifiable sans nouvelle version (≤170)
│       ├── description.txt      # description complète (≤4000)
│       ├── keywords.txt         # mots-clés ASO localisés (≤100, sans espace)
│       ├── release_notes.txt    # « Nouveautés » 0.5.0 (≤4000)
│       ├── support_url.txt
│       ├── marketing_url.txt
│       └── privacy_url.txt
└── screenshots/
    └── <locale>/                # iphone69-*.png (1320×2868) + ipad13-*.png (2064×2752)
```

Toutes les limites de caractères Apple ont été **validées** automatiquement
(subtitle ≤30, promo ≤170, keywords ≤100 sans espace, description ≤4000).

## Les 22 langues

`fr-FR` `en-US` `de-DE` `es-ES` `it` `pt-PT` `pt-BR` `nl-NL` `pl` `sv` `da`
`fi` `el` `hu` `ro` `sk` `cs` `hr` `zh-Hans` `ja` `ko` `ru`

### ⚠️ Slovène (sl) et bulgare (bg) : pas de fiche possible

L'app est traduite en 24 langues, mais **App Store Connect ne propose pas le
slovène ni le bulgare** comme langues de fiche (ils ne figurent pas dans la
liste Apple des localisations de fiche). Pour ces deux marchés, l'App Store
affichera automatiquement la fiche **par défaut (fr-FR)** — l'interface de
l'app, elle, reste bien en slovène / bulgare. Rien à faire, c'est une limite
d'Apple.

## Comment téléverser

### Option A — fastlane deliver (recommandé)

Depuis la racine du dépôt :

```bash
# Aperçu sans rien publier (génère un HTML de contrôle)
fastlane deliver --app_identifier eu.cythin.skingomz

# Téléverser métadonnées + captures, sans soumettre à la review
fastlane deliver --skip_binary_upload true --submit_for_review false
```

`deliver` prend `fastlane/metadata` et `fastlane/screenshots` par défaut.
Authentification conseillée par **clé API App Store Connect** (mêmes
identifiants ASC que `scripts/release.env`).

### Option B — manuel

Dans App Store Connect → l'app → version **0.5.0** → pour chaque langue :
coller `name/subtitle/promotional_text/description/keywords/release_notes` et
glisser les captures `screenshots/<locale>/`. Ajouter les URLs (support,
marketing, confidentialité) et les notes de review.

## Fiche — valeurs globales

| Champ | Valeur |
|---|---|
| Nom | Skingomz |
| Catégorie principale | Divertissement (Entertainment) |
| Catégorie secondaire | Actualités (News) |
| Prix | Gratuit |
| Classification d'âge | conforme à la fiche actuelle (**4+**) |
| Copyright | © 2026 Cythin |
| URL d'assistance | https://git.cythin.eu/Kourser/skingomz-app |
| URL marketing | https://kourser.pages.git.cythin.eu/skingomz-app/ |
| Confidentialité | https://kourser.pages.git.cythin.eu/skingomz-app/Confidentialite/ |
| Confidentialité (App Privacy) | Aucune donnée collectée · aucun suivi |

## Captures d'écran

Générées depuis le simulateur (build Debug, harnais `-uiSeed -uiScreen`,
langue forcée via `AppleLanguages`, barre d'état figée à 9:41, canal alpha
retiré). 5 écrans par appareil :

1. `01-library` — bibliothèque / abonnements
2. `02-inbox` — nouveautés
3. `03-detail` — détail d'un podcast + épisodes
4. `04-queue` — file d'attente
5. `05-settings` — réglages (sync Nextcloud/GPodder, égaliseur, langue)

Tailles : **iPhone 6,9"** (1320×2868) et **iPad 13"** (2064×2752) — les deux
créneaux requis pour une app universelle. Régénérer : `./fastlane/generate_shots.sh`
(reconstruit, recrée les simulateurs et reboucle sur les 22 langues).

> Note : le créneau « lecteur plein écran » n'est pas inclus — le harnais de
> démo (`.sheet` du PlayerView) ne se présente plus de façon fiable sous
> iOS 26. À ajouter manuellement si souhaité (ancienne capture FR dispo dans
> `docs/app-store/screenshots/iphone-6.9-player.png`).

## Rappels

- **Ne pas oublier** : mettre à jour `docs/appcast.json` en 0.5.0 **seulement
  une fois la build réellement en ligne** sur l'App Store (sinon le pop-up
  « Mettre à jour » pointe dans le vide).
- Relecture native conseillée pour les 5 langues ajoutées (zh-Hans, ja, ko,
  ru, pt-BR) et les mots-clés ASO avant publication.
+83 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
#
# Régénère les captures App Store localisées pour les 22 locales de fiche,
# iPhone 6,9" (1320×2868) et iPad 13" (2064×2752), 5 écrans chacun.
#
#   ./fastlane/generate_shots.sh
#
# Prérequis : Xcode complet. Le harnais de démo (#if DEBUG, -uiSeed / -uiScreen)
# amorce un podcast de démonstration et ouvre l'écran demandé. La langue de l'UI
# est forcée via -AppleLanguages. Le canal alpha est retiré à la fin (App Store
# refuse l'alpha). Ne PAS utiliser set -e : un échec ponctuel ne doit pas tout arrêter.
set -uo pipefail
cd "$(dirname "$0")/.."
export DEVELOPER_DIR="${DEVELOPER_DIR:-/Applications/Xcode.app/Contents/Developer}"

BUNDLE=eu.cythin.skingomz
OUT="fastlane/screenshots"
DD="build/dd-sim"
RT="com.apple.CoreSimulator.SimRuntime.iOS-26-5"
IPHONE_TYPE="com.apple.CoreSimulator.SimDeviceType.iPhone-16-Pro-Max"       # 1320×2868
IPAD_TYPE="com.apple.CoreSimulator.SimDeviceType.iPad-Pro-13-inch-M4-8GB"   # 2064×2752
STRIP="build/appstore-screenshots/strip_alpha.swift"

LOCALES=(
  "fr-FR:fr-FR:fr_FR" "en-US:en-US:en_US" "de-DE:de-DE:de_DE" "es-ES:es-ES:es_ES"
  "it:it:it_IT" "pt-PT:pt-PT:pt_PT" "pt-BR:pt-BR:pt_BR" "nl-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" "05-settings:settings" )

echo "▶︎ Build Debug (simulateur)…"
xcodebuild -project Skingomz.xcodeproj -scheme Skingomz -configuration Debug \
  -destination 'generic/platform=iOS Simulator' -derivedDataPath "$DD" build >/dev/null
APP=$(find "$DD/Build/Products/Debug-iphonesimulator" -maxdepth 1 -name 'Skingomz.app' -type d | head -1)
[ -n "$APP" ] || { echo "✗ Skingomz.app introuvable" >&2; exit 1; }

make_sim() { # name type -> udid (réutilise si déjà présent)
  local name="$1" type="$2" udid
  udid=$(xcrun simctl list devices | grep -m1 "$name (" | grep -oE '[0-9A-F-]{36}' | head -1)
  [ -z "$udid" ] && udid=$(xcrun simctl create "$name" "$type" "$RT")
  xcrun simctl boot "$udid" >/dev/null 2>&1 || true
  xcrun simctl status_bar "$udid" override --time "9:41" --batteryState charged \
    --batteryLevel 100 --wifiBars 3 --cellularBars 4 --dataNetwork wifi >/dev/null 2>&1 || true
  echo "$udid"
}

shot() { # udid devlabel
  local udid="$1" devlabel="$2" entry asc applang aploc sc fname arg dest
  xcrun simctl uninstall "$udid" "$BUNDLE" >/dev/null 2>&1
  xcrun simctl install "$udid" "$APP" >/dev/null 2>&1
  xcrun simctl launch "$udid" "$BUNDLE" -uiSeed -AppleLanguages "(en)" -AppleLocale en_US >/dev/null 2>&1
  sleep 8
  for entry in "${LOCALES[@]}"; do
    IFS=":" read -r asc applang aploc <<< "$entry"
    mkdir -p "$OUT/$asc"
    for sc in "${SCREENS[@]}"; do
      IFS=":" read -r fname arg <<< "$sc"
      xcrun simctl terminate "$udid" "$BUNDLE" >/dev/null 2>&1
      if [ -z "$arg" ]; then
        xcrun simctl launch "$udid" "$BUNDLE" -uiSeed -AppleLanguages "($applang)" -AppleLocale "$aploc" >/dev/null 2>&1
      else
        xcrun simctl launch "$udid" "$BUNDLE" -uiSeed -uiScreen "$arg" -AppleLanguages "($applang)" -AppleLocale "$aploc" >/dev/null 2>&1
      fi
      sleep 5
      dest="$OUT/$asc/${devlabel}-${fname}.png"
      perl -e 'alarm 40; exec @ARGV' xcrun simctl io "$udid" screenshot "$dest" >/dev/null 2>&1 \
        || echo "  ✗ ÉCHEC $asc/${devlabel}-${fname}"
    done
    echo "[$devlabel] $asc ✓"
  done
}

IPH=$(make_sim "Shots-iPhone69" "$IPHONE_TYPE")
IPAD=$(make_sim "Shots-iPad13" "$IPAD_TYPE")
echo "iPhone=$IPH  iPad=$IPAD"
echo "▶︎ iPhone 6,9\"…"; shot "$IPH" "iphone69"
echo "▶︎ iPad 13\"…";    shot "$IPAD" "ipad13"

echo "▶︎ Strip alpha…"
find "$OUT" -name '*.png' -print0 | xargs -0 swift "$STRIP" >/dev/null 2>&1 || true
echo "✓ Terminé."
+1 −0
Original line number Diff line number Diff line
© 2026 Cythin
 No newline at end of file
+28 −0
Original line number Diff line number Diff line
Skingomz je nativní, svobodný a jednoduchý přehrávač podcastů pro iPhone, iPad a Mac. Dělá jednu věc dobře: přehrává tvoje podcasty — bez reklam, bez účtu a bez sběru dat.

POSLECH
• Odebírej jakýkoli podcast přes jeho RSS kanál nebo ho najdi přes vyhledávání.
• Přehrávání na pozadí, ovládání na uzamčené obrazovce a přes AirPods.
• Nastavitelná rychlost (0,8×–2×), ekvalizér a časovač spánku s postupným ztišením.
• Kapitoly (Podcasting 2.0) a přepisy, když je podcast poskytuje.

ORGANIZACE
• Přeuspořádatelná fronta s automatickým přehráváním.
• Oblíbené, filtry (nepřehrané, oblíbené, stažené), řazení a štítky.
• Vyhledávání v knihovně a uvnitř epizod.

ŽIVÉ RÁDIO
• Přidej stanici přes URL jejího vysílání (MP3, AAC, HLS…) a poslouchej živě.

VEZMI S SEBOU & POKRAČUJ
• Stahuj epizody pro offline poslech.
• Pokračuj v každé epizodě tam, kde jsi skončil; automatické sledování přehráno / nepřehráno.

SYNCHRONIZACE (volitelné)
• Synchronizuj odběry a průběh s vlastním serverem Nextcloud (GPodder Sync) nebo s gpodder.net.
• Importuj a exportuj své odběry ve formátu OPML.

RESPEKTUJE TVÉ SOUKROMÍ
Skingomz nesbírá žádná data: vše zůstává ve tvém zařízení. Synchronizace, pokud ji zapneš, probíhá přímo se serverem dle tvého výběru; tvé přihlašovací údaje zůstávají ve Svazku klíčů.

„Skingomz“ znamená v bretonštině „vysílání“.
Loading