aboutsummaryrefslogtreecommitdiff
path: root/DomainDigUITests/AccessibilityAuditHarness.swift
diff options
context:
space:
mode:
Diffstat (limited to 'DomainDigUITests/AccessibilityAuditHarness.swift')
-rw-r--r--DomainDigUITests/AccessibilityAuditHarness.swift32
1 files changed, 32 insertions, 0 deletions
diff --git a/DomainDigUITests/AccessibilityAuditHarness.swift b/DomainDigUITests/AccessibilityAuditHarness.swift
index 64d0993..24f900e 100644
--- a/DomainDigUITests/AccessibilityAuditHarness.swift
+++ b/DomainDigUITests/AccessibilityAuditHarness.swift
@@ -201,9 +201,41 @@ enum AccessibilityAuditHarness {
return "unattributed, audit artifact on ignored/link content"
}
+ // iOS-27-only Settings `Section` header dynamicType finding. On iOS 27.0
+ // (and only there) the audit reports "font sizes partially unsupported"
+ // against a Settings section header — the same system-rendered headers
+ // already carved out for the contrast near-miss above. Proof it is a
+ // system-chrome artifact, not an app defect:
+ // • Each is a plain `Section("Services")` etc. (ContentView.swift ~2768);
+ // the app sets no font, so the scaling is UIKit's `.footnote` header.
+ // • Version-specific: absent on the iOS 18.6 floor and on the 26.x
+ // runtime CI runs (both audit clean); it surfaces only under 27.0.
+ // ACCESSIBILITY.md's coverage table records the same asymmetry
+ // ("dynamicType finding 18.6 missed").
+ // • Attribution is unstable run-to-run across the header set
+ // (Tier/Preferences/Services), exactly like the documented contrast
+ // flip — so it lands on whichever header the traversal reaches first.
+ // Overriding every Section header with a custom scaling `Text` to chase
+ // this was rejected for the contrast case (ACCESSIBILITY.md) for trading
+ // platform convention for nothing; the same holds here. Scoped to
+ // dynamicType on the exact Settings header titles so a real regression
+ // on app-controlled text still enforces.
+ if issue.auditType.contains(.dynamicType),
+ let label = issue.element?.label,
+ settingsSectionHeaders.contains(label) {
+ return "iOS-rendered Settings section header, app sets no font (27.0-only)"
+ }
+
return nil
}
+ /// The Settings screen's `Section(_:)` header titles. UIKit renders these;
+ /// the app passes only a string literal. Used to scope the section-header
+ /// dynamicType carve-out narrowly (see `noiseReason`).
+ private static let settingsSectionHeaders: Set<String> = [
+ "Tier", "Preferences", "Services", "Data", "About"
+ ]
+
/// `XCUIAccessibilityAuditType` is an option set whose description is just a
/// raw bitmask, which makes the burndown list unreadable. Resolve it against
/// the named members rather than hard-coding bit positions, so this keeps