Skip to content

Instantly share code, notes, and snippets.

@clarmso
Last active May 11, 2026 14:42
Show Gist options
  • Select an option

  • Save clarmso/0c6a65541c79d68abaecb1028471291d to your computer and use it in GitHub Desktop.

Select an option

Save clarmso/0c6a65541c79d68abaecb1028471291d to your computer and use it in GitHub Desktop.
L10n missing screenshots
⏺ Missing screenshots in the 11 failing RTL + Cyrillic locales (upstream repo state)
Login flow — affects all 11 (testLoginDetails)
All 11 locales are missing all 4 Login screenshots:
- CreateLogin
- CreatedLoginView
- CreatedLoginDetailedView
- RemoveLoginDetailedView
That's 44 missing Login screenshots total.
Settings flow — affects 2 of 11
bg (Bulgarian) and ru (Russian) are additionally missing 3 Settings screenshots each:
- Settings-AddCustomSearchSettings-0
- Settings-HomeSettings-0
- Settings-ToolbarSettings
That's 6 more missing Settings screenshots.
Totals
50 missing screenshots across the 11 RTL+Cyrillic failing locales:
- 44 from testLoginDetails
- 6 from testSettings (Suite1)
Per-locale
┌────────┬────────────────────────────┬─────────┬────────────────────────┐
│ Locale │ Script │ Missing │ Areas │
├────────┼────────────────────────────┼─────────┼────────────────────────┤
│ ar │ Arabic (RTL) │ 4 │ Login ×4 │
├────────┼────────────────────────────┼─────────┼────────────────────────┤
│ he │ Hebrew (RTL) │ 4 │ Login ×4 │
├────────┼────────────────────────────┼─────────┼────────────────────────┤
│ fa │ Persian (RTL) │ 4 │ Login ×4 │
├────────┼────────────────────────────┼─────────┼────────────────────────┤
│ ug │ Uyghur (RTL Arabic-script) │ 4 │ Login ×4 │
├────────┼────────────────────────────┼─────────┼────────────────────────┤
│ be │ Cyrillic │ 4 │ Login ×4 │
├────────┼────────────────────────────┼─────────┼────────────────────────┤
│ kk │ Cyrillic │ 4 │ Login ×4 │
├────────┼────────────────────────────┼─────────┼────────────────────────┤
│ sr │ Cyrillic │ 4 │ Login ×4 │
├────────┼────────────────────────────┼─────────┼────────────────────────┤
│ tg │ Cyrillic │ 4 │ Login ×4 │
├────────┼────────────────────────────┼─────────┼────────────────────────┤
│ uk │ Cyrillic │ 4 │ Login ×4 │
├────────┼────────────────────────────┼─────────┼────────────────────────┤
│ bg │ Cyrillic │ 7 │ Login ×4 + Settings ×3 │
├────────┼────────────────────────────┼─────────┼────────────────────────┤
│ ru │ Cyrillic │ 7 │ Login ×4 + Settings ×3 │
└────────┴────────────────────────────┴─────────┴────────────────────────┘
L10n screenshot tests — summary
What was broken
testLoginDetails in L10nSuite2SnapshotTests.swift was the test producing 4 Login screenshots
(CreateLogin, CreatedLoginView, CreatedLoginDetailedView, RemoveLoginDetailedView). Three
locale-sensitive bugs caused many locales to be missing some or all of them.
Bugs found and fixed on branch cso/l10n-testLoginDetails-fix
1. Post-passcode race: the test only checked for the Passwords onboarding "Continue" button before the
system passcode prompt, but the actual flow shows the passcode first. Added a waitForExistence(timeout:
5) check after the passcode entry — also acts as a settle delay so the Login List query doesn't race the
passcode dismissal.
2. Hardcoded "p" lookup: tapKeyboardKey(15) types whatever character is at keyboard index 15, which
varies by locale (Latin p, Arabic q, etc.). The test then searched cells.staticTexts["p"] which only
matches on Latin keyboards. Replaced with positional cell lookup.
3. Wrong Login List cell: the new password-manager UI puts the "Save passwords" toggle at cells[0], with
the credential at cells[1]. Test was tapping cells[0] (the toggle, no-op for navigation).
Final results — 20 target locales, after the fix
┌──────────────────┬─────────────────────────────────────────────────────────────────────────────────┐
│ Status │ Locales │
├──────────────────┼─────────────────────────────────────────────────────────────────────────────────┤
│ ✅ 4/4 (fully │ ur (Urdu), da (Danish), fi (Finnish), is (Icelandic), cs (Czech), sk (Slovak), │
│ fixed) │ ab (Abkhazian) │
├──────────────────┼─────────────────────────────────────────────────────────────────────────────────┤
│ 🟡 1/4 (only │ ja (Japanese), sv-SE (Swedish) │
│ CreateLogin) │ │
├──────────────────┼─────────────────────────────────────────────────────────────────────────────────┤
│ ❌ 0/4 (still │ ar (Arabic), he (Hebrew), fa (Persian) — RTL ru (Russian), uk (Ukrainian), be │
│ all missing) │ (Belarusian), bg (Bulgarian), sr (Serbian) — Slavic Cyrillic kk (Kazakh), tg │
│ │ (Tajik), ug (Uyghur) — non-Slavic Cyrillic-script │
└──────────────────┴─────────────────────────────────────────────────────────────────────────────────┘
Patterns
- RTL: only ur (Urdu) worked; ar, he, fa still fail at the very first step (Login List timeout). RTL
layout likely causes springboard.secureTextFields.firstMatch to match the wrong field, so "foo\n" is
typed into something that doesn't satisfy the system auth — the Login List never loads.
- Cyrillic (all flavors, Slavic + Turkic): 8 of 8 still 0/4. Same failure mode as RTL — never gets past
the passcode/auth step.
- CJK: ja captures only CreateLogin then fails later (likely at credential creation form interactions,
possibly the same keyboard-positional tapKeyboardKey issue affecting non-Latin scripts).
- sv-SE outlier: only Latin-script locale in the 1/4 bucket — looked flaky in the batch, possibly
batch-state pollution (other Nordic locales da/fi/is got full 4/4).
⏺ Summary
- 58 locales complete (all 57 screenshots)
- 42 locales incomplete
- 100 total locale directories
Complete (58)
af, an, ast, az, br, bs, ca, co, cy, de, dsb, en-CA, en-GB, eo, es-AR, es-CL, es-ES, es-MX, et, eu, fr, ga-IE, gd, gl, hr, hsb, hu, ia, id, it, jv,
kab, ko, lt, lv, ml, ms, nb-NO, nl, nn-NO, oc, pl, pt-BR, pt-PT, rm, ro, scn, ses, sl, sq, su, ta, tl, tt, uz, vi, zgh, zh-CN
┌───────┬───────────────────────────────────────────────────────┬───────────────────────────────────────────────┐
│ Count │ Locale → Language │ Missing │
├───────┼───────────────────────────────────────────────────────┼───────────────────────────────────────────────┤
│ 56/57 │ zh-TW Chinese (Traditional) │ Settings-main-4 │
├───────┼───────────────────────────────────────────────────────┼───────────────────────────────────────────────┤
│ 56/57 │ pa-IN Punjabi · mr Marathi · hi-IN Hindi · gu-IN │ Settings-AddCustomSearchSettings-0 │
│ │ Gujarati · bn Bengali · anp Angika │ │
├───────┼───────────────────────────────────────────────────────┼───────────────────────────────────────────────┤
│ 55/57 │ tr Turkish · sv-SE Swedish · sk Slovak · is Icelandic │ CreatedLoginDetailedView, │
│ │ · fi Finnish · da Danish │ RemoveLoginDetailedView │
├───────┼───────────────────────────────────────────────────────┼───────────────────────────────────────────────┤
│ │ │ Settings-AddCustomSearchSettings-0, │
│ 54/57 │ te Telugu · kn Kannada · bo Tibetan │ Settings-HomeSettings-0, │
│ │ │ Settings-ToolbarSettings │
├───────┼───────────────────────────────────────────────────────┼───────────────────────────────────────────────┤
│ 54/57 │ ja Japanese │ CreatedLoginDetailedView, CreatedLoginView, │
│ │ │ RemoveLoginDetailedView │
├───────┼───────────────────────────────────────────────────────┼───────────────────────────────────────────────┤
│ │ uk Ukrainian · ug Uyghur · tg Tajik · sr Serbian · si │ │
│ 53/57 │ Sinhala · sat Santali · or Odia · kk Kazakh · ka │ All 4 Login screens │
│ │ Georgian · hy-AM Armenian · he Hebrew · fa Persian │ │
│ │ (Farsi) · el Greek · be Belarusian · ar Arabic │ │
├───────┼───────────────────────────────────────────────────────┼───────────────────────────────────────────────┤
│ │ │ 2 Login + 3 Settings │
│ 52/57 │ ur Urdu · cs Czech │ (-AddCustomSearchSettings-0, -HomeSettings-0, │
│ │ │ -ToolbarSettings) │
├───────┼───────────────────────────────────────────────────────┼───────────────────────────────────────────────┤
│ 52/57 │ th Thai · ne-NP Nepali · lo Lao │ All 4 Login + │
│ │ │ Settings-AddCustomSearchSettings-0 │
├───────┼───────────────────────────────────────────────────────┼───────────────────────────────────────────────┤
│ 51/57 │ bg Bulgarian │ All 4 Login + 3 Settings (also has stale │
│ │ │ extra Settings-BrowsingSettings-1.png) │
├───────┼───────────────────────────────────────────────────────┼───────────────────────────────────────────────┤
│ 50/57 │ ru Russian · my Burmese · km Khmer │ All 4 Login + 3 Settings │
├───────┼───────────────────────────────────────────────────────┼───────────────────────────────────────────────┤
│ 44/57 │ ab Abkhazian │ 13 Settings screens missing │
└───────┴───────────────────────────────────────────────────────┴───────────────────────────────────────────────┘
Notable groupings
- RTL languages: ar (Arabic), he (Hebrew), fa (Persian), ur (Urdu) — all in the "all-Login-missing" cluster, likely
a flow that breaks under RTL layout.
- Indic family (pa, mr, hi, gu, bn, te, kn, or, ne, sat, anp, ur, si): heavily represented in
Settings-AddCustomSearchSettings-0 failures — search-engine availability or Bing/Yahoo button text not localized.
- Cyrillic-script languages (ru, uk, be, bg, sr, kk, tg, ug): most show full Login-flow failures, suggesting a
single text-input/keyboard interaction breaks for those keyboards.
- CJK (ja, zh-TW): isolated/light failures — only ja affects Login flow.
- Nordic + Central European (da, fi, is, sk, sv-SE, tr, cs): clean failures of just CreatedLoginDetailedView +
RemoveLoginDetailedView — likely a single test step.
- ab (Abkhazian): outlier — Settings menu navigation appears to break entirely, since iOS has no Abkhazian system
locale to fall back on cleanly.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment