Files
vnidrop/packaging/apple/studio/generate.sh
cdricms 4bac61e505 feat(studio): native SwiftUI + SceneKit App Store screenshot pipeline
Replace the Typst/ImageMagick studio with a SwiftPM executable that composes
each marketing screen as a SwiftUI view and renders it headlessly via
ImageRenderer to exact 1284x2778 PNGs.

- Devices are a real iPhone 17 Pro Max .usdz textured + posed in SceneKit
  (graphite body, studio IBL); screen curvature/bezel are the model's geometry.
- Per-screen layouts (pose, globe, route arc, encryption flow) in ScreenSpec.
- send-anywhere: globe + Paris->LA route arc; uses the app's share screen.
- stay-private: converging beams -> glowing padlock -> binary protection stream,
  with localized CHIFFREMENT/PROTECTION banners and an auto-sizing header panel.
- Captions auto-shrink per locale (ViewThatFits) so long translations never clip.
- Screenshots are transient (generated/shots, git-ignored), captured per locale;
  generate.sh does capture + composite in one shot.
- Commit the .usdz model (CC BY 4.0, see assets/ATTRIBUTION.md) and globe asset.
- Remove the superseded Typst pipeline (screens.typ, build.sh, frame.sh, warp.sh).
2026-08-09 18:20:52 +02:00

17 lines
699 B
Bash
Executable File

#!/usr/bin/env bash
# One-shot: capture fresh per-locale screenshots from the app, then composite every
# marketing screen. Screenshots are transient (generated/shots, git-ignored) and are
# regenerated each run — never committed.
#
# ./generate.sh # capture + composite -> generated/<Language>/
# ./generate.sh --publish # capture + composite -> ../<Language>/ (ships)
# LOCALES="en fr" ./generate.sh # subset of locales
#
# During layout iteration you don't need to re-capture every time: run `./capture.sh`
# once, then `swift run studio` on its own (it reads the existing generated/shots).
set -euo pipefail
cd "$(dirname "$0")"
./capture.sh
swift run studio "$@"