Build1 distinct publisher3 min readUpdated
A developer set Dynamic Type to the largest size, screenshotted every screen, and surfaced the same layout defect eleven times. In Japanese it fails much earlier than in English.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
A developer cleaning up a side-project iOS app did one thing: set Dynamic Type to XXXL and screenshot every screen [1]. Reading the code had turned up nothing; the screenshots produced findings immediately, eleven of them, all with the same cause [2][3]. The cause is worth stating as a pattern rather than an incident: a parent that pins things side by side, multiplied by text that grows, is a structural defect [4]. Nearly all eleven instances were the same row: an HStack holding an icon with a fixed 44pt frame, a label, a Spacer, and a value pinned to the trailing edge [5]. The icon and the trailing value claim their width first, so the label column is left with a few characters [6]. That is where language decides how bad it looks. English wraps at word boundaries and, failing that, truncates with an ellipsis, which is unreadable but legibly broken [7]. Under enough pressure it breaks mid-word anyway; the author's actual output was "Paire / d / Macs" [8]. Japanese has no such boundary rule, so it can break between almost any two characters, and a column squeezed to one character wide stacks one character per line downward, a state Japanese reaches far earlier than English [9]. Same layout, two failure modes. The fix was to let rows carrying a value drop that value to the line below, while affordances such as chevrons and toggles stay on the right [10]. Because the row component was shared across the whole settings tree, one change repaired the entire settings screen, which is the same fact read the other way: one decision inside a shared component was breaking eleven screens [11]. The instructive part is the fix that misfired. Using ViewThatFits to swap in a stacked layout broke the standard text size [12]. ViewThatFits chooses on each child's ideal width, and a title that wraps reports its full unwrapped length as its ideal width, so the side-by-side candidate was judged not to fit and the badge dropped below the title at normal settings [13]. The author says he could not have reasoned his way there and found it by screenshotting the standard size [14]. His resulting split: ViewThatFits when every child is short with an intrinsic width, an explicit isAccessibilitySize branch when one child is a sentence that wraps [15]. He also reversed his own classification of a .menu Picker as pin-right after an audit-log screenshot showed the Japanese filter label shattered across lines [16], settling on a rule that only controls changing state in place stay pinned right, while anything that merely opens something may take the full row [17]. Two process findings matter more than the SwiftUI details. The UI-test env var applied dynamicTypeSize to the root view but did not propagate into a .sheet's environment, so the paywall and setup guide had never once been rendered at the largest size; green tests meant the tests passed, not that the modals were checked [18]. That is now driven from the system side with simctl content_size [19]. And after fixing six, the author declared the pattern converged; four more turned up on screens he had not looked at [20], and he only called it done after sweeping the QR scanner, host-add and pairing flows in Japanese at XXXL for zero new findings [21]. Count screens inspected, not bugs fixed [22]. The write-up itself enumerates ten before landing on eleven [29]. The adjacent sweep found the sibling defect: "1 items need attention" led to a string audit where zero of 38 English strings with a quantity placeholder had plural variants [23], including "1 days free" on the paywall and a share-sheet body that leaves the device [24]. Thirteen keys got variants, leaving 25 untouched, some deliberately because the number does not agree with the noun [25][28].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
A developer cleaning up the UI on a side-project iOS app set Dynamic Type to XXXL and screenshotted every screen.
The pass found eleven problems, all with the same cause.
Reading the code had turned up nothing; the screenshots showed problems immediately.
The author's stated conclusion: a parent that pins things side by side multiplied by text that grows is not a bug but a pattern.
Nearly all eleven instances were an HStack containing an Image with a fixed 44pt width frame, a Text label, a Spacer, and a Text value pinned to the right.
The 44pt icon and the trailing value claim their width first, leaving the label column only a few characters.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Specific and mechanistic, but one self-reported source
The account is unusually concrete for a single-source post: it names the offending view shape, the exact simctl invocation, the generated stringsdict key it inspected, observed broken output strings, and counts (11 findings, 38 strings swept, 13 keys fixed). Those details are checkable in principle by any iOS developer, and the post also records non-findings, which cuts against embellishment. But everything rests on one first-person dev.to article about an unnamed private side project, with no screenshots, diff, repository or second observer, and the post's own itemisation covers ten of the claimed eleven findings.
No adoption signal in the supplied material
The cluster contains no release, deployment, benchmark, pricing, licensing or usage-disclosure event. The subject is one unnamed side-project iOS app whose user base, shipping status and scale are never stated, and the referenced tools (SwiftUI, ViewThatFits, simctl) are pre-existing platform features rather than newly adopted technology. Inferring adoption from a single developer's workflow change would be guessing, so no value is returned.
Mildly overstated framing over sound substance
The technical substance is modest and mostly matches the evidence: the mechanisms described are plausible, narrowly scoped and accompanied by explicit non-findings and a self-correction. The overstatement is in the packaging. The framing of a 'five-minute' pass sits against a narrative of iterative passes, a wrong convergence call and a rule reversal; the headline count of eleven exceeds the ten findings the post itemises; and the plural sweep is presented as resolved while 25 of the 38 quantity-placeholder strings were left without variants. The gap is small and positive rather than large, because the author repeatedly discloses the limits of his own work.
Self-published developer marketing with an explicit product plug
The single source is a self-published post on a developer-marketing platform and closes by promoting a product the author builds, a desktop AI agent called Wisp, which gives the piece a promotional payload independent of its technical content. No vendor sponsorship, affiliate arrangement or client relationship is disclosed or apparent, and the author has no visible commercial stake in SwiftUI, ViewThatFits or simctl, the subjects of the substantive claims. Candour about his own mistakes and explicit non-findings reduce, but do not remove, the attention-seeking incentive around the headline count.
Moderate: credible technique, unverifiable specifics
Confidence is limited by structure rather than plausibility. One self-published source, one private app, no artifacts, and no corroborating publisher mean the counts and the internal timeline cannot be audited; the ten-versus-eleven accounting gap is a concrete reason for caution. Confidence is nonetheless above the floor because the transferable parts — the ideal-width behaviour of ViewThatFits, environments not propagating into sheets, the simctl content_size command and stringsdict plural generation — are stated precisely enough that any reader can test them, and because adoption is explicitly unmeasured rather than assumed.
build
One game, two codebases: where parity belongs when you ship native on iOS and Android1 distinct publisher
build
The only gate that ran was a hand-typed enum, and it had never heard of the new value1 distinct publisher
build
The capture returned HTTP 200. The file was a Cloudflare block page.1 distinct publisher
build
Splitting a SwiftUI body into computed properties tidies the file, not the view tree1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 15, 2026