Re-shoot the iPhone App Store screenshots (the Swarm tab was two releases stale) - #555
Merged
Conversation
…le to fail
The listing's ten iPhone screenshots (five en-US, five zh-Hans) all showed a
"Swarm" tab in the bottom bar. That tab was deleted in v1.52.1. The 1.52.1
review notes apologised for it and asked Apple to overlook it; 1.53.0 was about
to do the same thing a second time, which is how a temporary disclosure becomes
the permanent state of a product page.
Re-shot from the actual 1.53.0 build in the Simulator, through the app's own
shipped Demo mode ("Try Demo" on the sign-in screen, DemoDataProvider.swift:180)
— so every screen in these screenshots is one any user or reviewer can reach
without an account, rather than a mock. The bar now reads what the app renders:
Overview, Providers, Sessions, Alerts, Settings. Note that is FIVE tabs, not the
"four plus More" the AppState.Tab enum's seven cases suggest — iPhoneTabView
curates a subset, which I only learned by looking at the running app.
The first screenshot now leads with the Nearby Macs / Remote Control row, so the
listing finally shows the feature this release exists for.
Dropped the subscription screenshot rather than re-shooting it. Prices are
per-storefront (ASC has pro.yearly at 9.99 in some territories and 30.00 in
others), so any price baked into a single image is wrong for most of the world,
and this app has already been corrected once for quoting stale prices. The app
shows live per-storefront pricing in-app, which is the right place for it.
## The compositor
Two failures it could not previously report, both of which produce a listing
you would never knowingly ship:
- Captions longer than the canvas were drawn at a fixed 100/44pt and simply ran
off both edges. Titles now shrink to fit and subtitles wrap to two lines, and
if something STILL does not fit the script says so per file instead of exiting
0 with a cropped sentence.
- SFNS.ttf has no CJK glyphs, so the zh captions would have rendered as tofu.
It now picks a font by glyph coverage. ⚠️ My first version of that check was
`getbbox(ch)[2] > 0`, which is a TAUTOLOGY — a missing character still
measures a positive width, because what gets measured is the substituted
.notdef box. Handed a latin-only font it happily returned SFNS. The check now
compares the rendered character against that font's own .notdef, and the
negative control passes: SFNS reports has('额')=False and a latin-only font
list is refused outright.
PingFang is not a file on macOS 26, so zh resolves to STHeiti Medium.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
All ten iPhone screenshots on the listing — five en-US, five zh-Hans — showed a Swarm tab in the bottom bar. That tab was deleted in v1.52.1. The 1.52.1 review notes apologised for it and asked Apple to look past it, and 1.53.0 was about to do the same thing again, which is how a temporary disclosure quietly becomes the permanent state of a product page.
What replaced them
Re-shot from the real 1.53.0 build in the Simulator, through the app's own shipped Demo mode (
Try Demoon the sign-in screen →DemoDataProvider.swift:180). Every screen in these images is one any user or reviewer can reach without an account — not a mock, not fabricated data.The bar now reads what the app actually renders:
Overview · Providers · Sessions · Alerts · Settings. That is five tabs, not the "four plus More" the seven-caseAppState.Tabenum implies —iPhoneTabViewcurates a subset. I had inferred the wrong bar from the enum and only got it right by looking at the running app.Screenshot 1 now leads with the Nearby Macs / Remote Control row, so the listing finally shows the feature this release exists for.
Dropped the subscription shot rather than re-shooting it: ASC has
pro.yearlyat 9.99 in some territories and 30.00 in others, so a price baked into one image is wrong for most of the world — and this app has already been corrected once for quoting stale prices. Live per-storefront pricing belongs in-app, where it already is.The compositor could not previously fail
Two silent failure modes, both of which produce a listing you'd never knowingly ship:
Captions longer than the canvas were drawn at a fixed 100/44pt and ran off both edges, while the script printed OK. Titles now shrink to fit, subtitles wrap to two lines, and anything that still doesn't fit is reported per-file.
SFNS.ttfhas no CJK glyphs — the zh captions would have rendered as tofu. Font is now chosen by glyph coverage.getbbox(ch)[2] > 0, which is a tautology. A missing character still measures a positive width, because what's measured is the substituted.notdefbox. Handed a latin-only font list it cheerfully returned SFNS — the exact bug the check existed to prevent. It now compares the rendered character against that font's own.notdef.The negative control passes both ways:
PingFang is not a file on macOS 26 (dynamic font asset), so zh resolves to STHeiti Medium.
Already applied to App Store Connect
The 10 replacements are live on the 1.53.0 iOS version and verified by downloading them back from ASC. iOS was pulled from review to swap them and resubmitted; macOS was never touched — its screenshots are
APP_DESKTOPand show no iPhone tab bar. Both platforms areWAITING_FOR_REVIEW. The iOS review notes were corrected too, since they still apologised for a Swarm tab that is no longer there.🤖 Generated with Claude Code