Skip to content

Re-shoot the iPhone App Store screenshots (the Swarm tab was two releases stale) - #555

Merged
JasonYeYuhe merged 1 commit into
mainfrom
screenshots-153
Sep 10, 2026
Merged

Re-shoot the iPhone App Store screenshots (the Swarm tab was two releases stale)#555
JasonYeYuhe merged 1 commit into
mainfrom
screenshots-153

Conversation

@JasonYeYuhe

Copy link
Copy Markdown
Collaborator

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 Demo on 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-case AppState.Tab enum implies — iPhoneTabView curates 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.yearly at 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:

  1. 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.

  2. SFNS.ttf has no CJK glyphs — the zh captions would have rendered as tofu. Font is now chosen by glyph coverage.

⚠️ Worth reading: my first version of that coverage check was getbbox(ch)[2] > 0, which is a tautology. A missing character still measures a positive width, because what's measured is the substituted .notdef box. 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:

SFNS.ttf              has('额')=False  has('A')=True
STHeiti Medium.ttc    has('额')=True   has('A')=True
latin-only list -> refused: No font on this machine can render '额' for locale 'zh'

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_DESKTOP and show no iPhone tab bar. Both platforms are WAITING_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

…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>
Copilot AI lite review requested due to automatic review settings September 10, 2026 12:05

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@JasonYeYuhe
JasonYeYuhe merged commit 938f6d3 into main Sep 10, 2026
9 checks passed
@JasonYeYuhe
JasonYeYuhe deleted the screenshots-153 branch September 10, 2026 12:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants