swift-accessibility-pro — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited swift-accessibility-pro (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Make apps usable by everyone. Treat accessibility as a requirement, not an add-on.
Trigger: /swift-accessibility-pro.
Icon-only controls are unlabeled to VoiceOver by default.
❌
Button { like() } label: { Image(systemName: "heart") }✅
Button { like() } label: { Image(systemName: "heart") }
.accessibilityLabel("Like")Combine decorative + meaningful elements:
HStack { Image(systemName: "star.fill"); Text("4.8") }
.accessibilityElement(children: .combine)
.accessibilityLabel("Rating 4.8 out of 5")Hide purely decorative images: .accessibilityHidden(true).
Tell VoiceOver what an element is.
✅
Text("Settings").accessibilityAddTraits(.isHeader)
Image("chart").accessibilityLabel("Sales up 12%").accessibilityRemoveTraits(.isImage)❌ Fixed size — won't scale
Text("Hello").font(.system(size: 17))✅ Semantic style — scales
Text("Hello").font(.body)For custom fonts use .font(.custom("Inter", size: 17, relativeTo: .body)). Test at the largest accessibility sizes; use ViewThatFits/wrapping instead of truncation.
@Environment(\.colorSchemeContrast).❌
Circle().fill(isOnline ? .green : .red) // invisible to color-blind users✅
Label(isOnline ? "Online" : "Offline",
systemImage: isOnline ? "checkmark.circle" : "xmark.circle")@Environment(\.accessibilityReduceMotion) private var reduceMotion
// ...
.animation(reduceMotion ? nil : .spring, value: state).accessibilityLabel..isHeader trait.Per issue: file:line, the barrier, before/after fix. Lead with blockers (unlabeled controls, non-scaling text) before enhancements.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.