Accessibility 入门 8m
开发者聚焦:无障碍
Developer spotlight: Accessibility
2021年6月10日
一句话判断
三个真实开发者讲述他们在 App 中做无障碍适配的经历——比任何教程都有说服力,因为他们花的时间和你花的时间一样多。
这场 Session 讲了什么
这是一个访谈式的 Session,苹果邀请了三位来自不同背景的开发者,分享他们在实际项目中实现无障碍功能的故事。每个开发者都有一个不同的切入点:一个是独立开发者讲如何在资源有限的情况下逐步改善 VoiceOver 支持;一个是大型社交 App 的工程师讲如何把辅助功能测试嵌入到 CI 流程中;一个是游戏开发者讲如何为视觉障碍玩家设计可访问的游戏界面。
Session 没有技术细节——它讲的是「为什么」和「怎么做」的决策过程。独立开发者分享了「用户邮件」驱动的开发方式:一个视障用户写信告诉他 App 无法使用后,他花了一个周末做 VoiceOver 适配,结果收到了大量正面反馈。社交 App 工程师讲了如何说服管理层投入资源——不是用「道德义务」论点,而是用「市场规模」论点(全球有超过 10 亿残障人士)。游戏开发者讲了如何用音频空间化和触觉反馈替代视觉提示。
值得深挖的点
用「商业案例」而非「道德说教」推动无障碍。 大型公司的开发者分享了一个实用策略:向管理层提案辅助功能投入时,不要说「这是正确的事」,而要展示数据。「全球 15% 的人口有某种形式的残障」「65 岁以上用户群体在快速增长」「App Store 的辅助功能标签直接展示在产品页上」。当管理层看到「不做无障碍 = 放弃 15% 的潜在用户」时,资源申请更容易获批。这个思路对独立开发者也适用——每多适配一个辅助功能,你的 App 就多一个被发现的机会。
代码片段
// 开发者分享中提到的实用技巧汇总
// 1. 最小化 VoiceOver 适配的起步工作量
// 给所有关键 UI 元素添加 accessibility label
// 这是投入产出比最高的第一步
struct QuickWinView: View {
var body: some View {
VStack {
// 图片必须加标签
Image("logo")
.accessibilityLabel("公司 Logo")
// 装饰性图片要隐藏
Image("divider")
.accessibilityHidden(true)
// 按钮要有明确的动作描述
Button("提交") { submit() }
.accessibilityHint("双击提交表单")
}
}
}
// 2. 在 CI 中添加辅助功能检查
// 用 Accessibility Inspector 的命令行工具
// 在 Xcode Cloud 的 ci_post_xcodebuild.sh 中添加:
// xcrun accessibilityinspector audit --bundleID com.example.app
// 3. 动态适配用户的无障碍设置
func shouldReduceMotion() -> Bool {
return UIAccessibility.isReduceMotionEnabled
}
最佳实践
- 不要试图一次性做到完美——先从 VoiceOver 标签开始,再逐步添加动态字体、对比度、Switch Control 支持
- 找到一两个有辅助功能需求的用户做 beta 测试,他们的反馈比任何工具都有价值
- 把辅助功能 bug 和功能 bug 同等对待——不要把它归类为「nice to have」
- 在招聘时关注有辅助功能经验的候选人,他们带来的视角是无价的
还有什么值得关注
- 苹果的辅助功能开发者论坛是提问和分享经验的好地方
- 每年的 ADA(Apple Design Awards)获奖作品中都包含辅助功能做得好的 App
AccessibilityInspector在 Xcode 13 中有 UI 改进,更容易发现和修复问题
WWDC 2021