Developer spotlight: Accessibility
Accessibility 入门 8m

开发者聚焦:无障碍

Developer spotlight: Accessibility

2021年6月10日

在 Apple 官方观看视频

一句话判断

三个真实开发者讲述他们在 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