Sample report · real output, anonymized data

Aperture Journal

Audit ID
a1f0c2e4-8b3d-4a91-9e77-2d6c1b0f4e10
Rule catalog
v1.0.0
Schema
v1.0
61 / 100
EAA Readiness

IOS v3.4.1 swiftui

  • 3 critical
  • 4 major
  • 5 minor

Category median 54 (n=128)

96/96 runs · 4 tasks × 8 variants

Download on the Mac App Store

Interactive PDF export lives in the Mac app.

Exposure Not legal advice

3 unresolved critical findings map to obligations under:

  • WCAG 2.1.2
  • EN 11.2.1.2
  • WCAG 2.1.1
  • EN 11.2.1.1
  • WCAG 1.4.4
  • EN 11.1.4.4
Germany · EAA €100,000 per non-compliant product
France · EAA €50,000 plus repeat / additional obligations
Italy · EAA up to 5% of turnover proportionate to revenue
United States · ADA $25k–$75k+ reported per-suit settlement range

Reported figures, subject to national implementation and change. This is a technical readiness perspective, not legal advice — confirm exposure with counsel.

12 findings

Sorted critical first · catalog v1.0.0

AP-TRP-001 CRITICAL Critical severity Verified by human · 2026-07-19

With VoiceOver on, the paywall modal cannot be dismissed — focus is trapped behind the sheet and no close control is reachable.

  • Paywall
  • close (chevron) control
  • voiceover
  • iPhone 13 mini

Evidence

attempt 1 · failed sample/rec-paywall-trap-01.mov

Reproduced in 2 of 3 attempts

Suggested fix

Expose the dismiss control to accessibility and make it the first focusable element; add an accessibilityAction of type .escape on the sheet.

.accessibilityAddTraits(.isButton)
.accessibilityLabel("Close")
.accessibilityAction(.escape) { dismiss() }
WCAG 2.1.2 EN 301 549 11.2.1.2
AP-TRP-001 CRITICAL Critical severity Verified by human · 2026-07-19

Deleting a photo requires a swipe gesture that VoiceOver users cannot perform — there is no equivalent accessible action, so the destructive step is unreachable.

  • Library
  • photo cell (swipe-to-delete)
  • voiceover
  • iPhone 13 mini

Evidence

attempt 1 · failed sample/rec-delete-gesture-01.mov

Reproduced in 3 of 3 attempts

Suggested fix

Add an accessibilityAction (custom action "Delete") to each photo cell so the operation is available without the swipe gesture.

.accessibilityAction(named: "Delete") { viewModel.delete(photo) }
WCAG 2.1.1 EN 301 549 11.2.1.1
AP-DYN-001 CRITICAL Critical severity

At the largest Dynamic Type setting the primary "Export" button label is clipped to "Ex…", leaving the core conversion action unlabeled.

  • Editor
  • Export button
  • xxl-font
  • iPhone 15

Evidence

xxl-font · Editor sample/shot-export-clip-xxl.png

Reproduced in 3 of 3 attempts

Suggested fix

Let the button size to its content and allow the label to wrap or scale; remove the fixed width. Verify at AX5.

Button("Export") { … }
  .lineLimit(1)
  .minimumScaleFactor(0.8)
  .fixedSize(horizontal: false, vertical: true)
WCAG 1.4.4 EN 301 549 11.1.4.4
AP-CON-001 MAJOR Major severity

The "Upgrade" link text renders below the AA contrast minimum against the card background.

  • Settings
  • Upgrade link
  • default
  • iPhone 15

Evidence

measured
4.33:1
required
4.5:1
foreground
#6E8F86
background
#FAFAF8

Reproduced in 3 of 3 attempts

Suggested fix

Darken the link color to at least #0E6E5C (5.9:1 on paper) or increase weight; do not rely on color alone.

WCAG 1.4.3 EN 301 549 11.1.4.3
AP-LBL-001 MAJOR Major severity

The settings (gear) button in the Library toolbar has no accessibility label; VoiceOver announces only "button".

  • Library
  • gearshape button
  • voiceover
  • iPhone 15

Evidence

sample/src-gearbutton.txt

Reproduced in 3 of 3 attempts

Suggested fix

Add an accessibilityLabel of "Settings" to the toolbar button.

Image(systemName: "gearshape")
  .accessibilityLabel("Settings")
WCAG 4.1.2 EN 301 549 11.4.1.2
AP-DYN-001 MAJOR Major severity

The filter row truncates its last two options at large Dynamic Type, hiding "Portrait" and "Mono" behind the screen edge with no scroll affordance.

  • Library
  • filter segmented row
  • xxl-font
  • iPhone 15

Evidence

xxl-font · Library sample/shot-filter-truncate-xxl.png

Reproduced in 3 of 3 attempts

Suggested fix

Wrap the filter row in a horizontal ScrollView, or switch to a Menu at large sizes.

WCAG 1.4.4 EN 301 549 11.1.4.4
AP-FOC-001 MAJOR Major severity Verified by human · 2026-07-19

In the Library grid VoiceOver focus jumps from the first cell to the toolbar and back, so the reading order does not follow the visual grid.

  • Library
  • photo grid
  • voiceover
  • iPhone 13 mini

Evidence

attempt 1 · failed sample/rec-focus-order-01.mov

Reproduced in 2 of 3 attempts

Suggested fix

Group the grid with accessibilityElement(children: .contain) and order the toolbar after the grid in the accessibility tree.

WCAG 2.4.3 EN 301 549 11.2.4.3
AP-TGT-001 MINOR Minor severity

The editor close button measures 38pt, below the 44pt recommended touch target.

  • Editor
  • close (X) button
  • default
  • iPhone 15

Evidence

measured
38×38pt
required
44pt minimum

Reproduced in 3 of 3 attempts

Suggested fix

Increase the tappable frame to at least 44×44pt using contentShape and padding.

.frame(width: 44, height: 44)
.contentShape(Rectangle())
WCAG 2.5.8 EN 301 549 11.2.5.8
AP-TGT-001 MINOR Minor severity

The thumbnail overflow (⋯) menu button measures 40pt, below the 44pt recommended touch target.

  • Library
  • overflow menu button
  • default
  • iPhone 15

Evidence

measured
40×40pt
required
44pt minimum

Reproduced in 3 of 3 attempts

Suggested fix

Enlarge the hit area to 44×44pt; the glyph can stay visually small.

WCAG 2.5.8 EN 301 549 11.2.5.8
AP-CON-001 MINOR Minor severity

Photo caption text sits at 4.48:1 against the sheet background — marginally below the 4.5:1 AA minimum.

  • Detail
  • caption label
  • default
  • iPhone 15

Evidence

measured
4.48:1
required
4.5:1
foreground
#767C85
background
#FFFFFF

Reproduced in 3 of 3 attempts

Suggested fix

Nudge the caption color one step darker (e.g. #6B7079) to clear 4.5:1.

WCAG 1.4.3 EN 301 549 11.1.4.3
AP-LBL-001 MINOR Minor severity

A decorative gradient image on the onboarding screen is exposed to VoiceOver and announced as "image", adding noise to the reading order.

  • Onboarding
  • decorative header image
  • voiceover
  • iPhone 15

Evidence

sample/src-decorative-image.txt

Reproduced in 3 of 3 attempts

Suggested fix

Hide decorative images from accessibility with accessibilityHidden(true).

Image("onboardingGradient")
  .accessibilityHidden(true)
WCAG 1.1.1 EN 301 549 11.1.1.1
AP-TGT-001 MINOR Minor severity

The custom tab bar items measure 42pt tall, just below the 44pt recommended touch target.

  • Root
  • tab bar item
  • default
  • iPhone 15

Evidence

measured
64×42pt
required
44pt minimum

Reproduced in 3 of 3 attempts

Suggested fix

Raise the tab item height to 44pt minimum.