ce39ab8be1
App Store Connect requires screenshots at 1290x2796 (6.7") and
1179x2556 (6.1") for the iPhone 17 Pro Max / 17 / Pro lineup,
with at least 3 and at most 10 images per size. The repository
previously had no screenshots in docs/.
This commit adds:
- scripts/generate_screenshot_placeholders.py - PIL-based
generator that produces 5x 6.7" + 5x 6.1" placeholders with
status bar, mock device frame, keyboard mock, and headline /
subtitle text.
- docs/screenshots/6.7/ and 6.1/ with 5 placeholder PNGs each
(10 total, all at the correct Apple-mandated dimensions).
- docs/screenshots/README.md explaining the dimensions,
generation script, and how to capture real Simulator
screenshots via `xcrun simctl io booted screenshot`.
- docs/APPSTORE_METADATA.md - a single source of truth for
every field in App Store Connect: name, subtitle, URLs,
pricing, description (<=4000 chars), promotional text
(<=170 chars), keywords (<=100 chars), release notes
(<=4000 chars), what's new, App Privacy answers
(Data Not Collected), encryption declaration, and reviewer
notes.
- AUDIT_APPSTORE.md - the v0.1.2 pre-launch audit report
with 6 P0 items, 5 P1 items, 4 P2 items, and a 9-item
"cross-cutting observations" section addressing the items
in the original brief that turned out to be non-issues
(CFBundleURLTypes in keyboard ext, NSSupportsLiveText,
AppGroup fatalError inconsistency, AudioCaptureService
interaction with AVAudioSession, ASRService SFSpeechRecognizer
references). Includes an Appendix A with the local
xcodebuild build + test results.
Important: the placeholder PNGs are intentionally bland - they
exist so App Store Connect accepts the dimensions. They MUST
be replaced with real Simulator screenshots before the actual
upload, see docs/screenshots/README.md for the workflow.
Refs: AUDIT_APPSTORE.md P0-5
2.9 KiB
2.9 KiB
App Store Screenshots
⚠️ PLACEHOLDERS. The 10 PNGs in this directory are automatically generated blanks produced by
scripts/generate_screenshot_placeholders.pyand must be replaced with real Simulator screenshots before App Store submission. They use the correct dimensions (1290×2796 for 6.7", 1179×2556 for 6.1") so the upload validator will accept them, but they contain no real UI.
Required dimensions (2026)
| Size | Devices | Dimensions | Apple requirement |
|---|---|---|---|
| 6.7" | iPhone 17 Pro Max, 17, 16 Pro Max, 16 Plus, 15 Pro Max, 15 Plus | 1290 × 2796 px | Required (3-10 images) |
| 6.1" | iPhone 17 Pro, 17, 16 Pro, 16, 15 Pro, 15, 14 Pro, 14 | 1179 × 2556 px | Required (3-10 images) |
| 5.5" | iPhone 8 Plus (legacy) | 1242 × 2208 px | Optional since 2024 |
iPad screenshots are not required because OSGKeyboard is iPhone-only
(TARGETED_DEVICE_FAMILY = 1).
Layout
docs/screenshots/
├── 6.7/ ← 1290×2796 (iPhone 17 Pro Max / 17)
│ ├── 01-keyboard-default.png
│ ├── 02-flow-session.png
│ ├── 03-on-device-asr.png
│ ├── 04-llm-polish.png
│ └── 05-providers.png
└── 6.1/ ← 1179×2556 (iPhone 17 Pro / 17)
├── 01-keyboard-default.png
├── 02-flow-session.png
├── 03-on-device-asr.png
├── 04-llm-polish.png
└── 05-providers.png
How to capture real screenshots
- Open
OSGKeyboard.xcodeprojin Xcode 26+ - Run on iPhone 17 Pro simulator (6.1" set) and iPhone 17 Pro Max simulator (6.7" set)
- For each scene:
# Take a screenshot of the simulator window xcrun simctl io booted screenshot ~/Desktop/shot.png - Process for App Store (Apple rejects frames containing the device bezel — full-screen content only):
# The simulator screenshot already has a thin device frame. # Open in Preview, crop to full screen (⌘+K with ⌥ for precision), # export as PNG at 1290×2796 or 1179×2556. sips -z 2796 1290 shot.png --out final-6.7.png sips -z 2556 1179 shot.png --out final-6.1.png - Replace the placeholders with the real captures, keeping the same filenames so the App Store Connect → Version → Uploads UI auto-pairs by file.
Scenes to capture
The 5 placeholders are intentional scene placeholders. Capture these exact screens, in this order:
- Keyboard at rest — the iOS keyboard, OSGKeyboard mode, no recording
- Flow session active — keyboard with the green/orange recording ring, partial transcript visible in the host text field
- On-device ASR — Settings view with the locale list, the on-device indicator (iPhone icon) visible next to ≥ 3 supported locales
- LLM polish — Settings view with the API provider card, a sample "polish" transformation shown in the inline preview
- Providers — API Settings card scrolled to show all 6 provider logos