Capable 2.0.1

Capable 2.0.1

Christoph Wendt维护。



Capable 2.0.1


Awesome Swift Platforms Cocoapods compatible SPM Twitter

支持iOS、macOS、tvOS和watchOS的辅助功能

🎉Capable 2.0的新特性🎉

以下是重要的更改:

  • 🏛新的框架架构和项目结构使支持即将推出的辅助功能设置更加便捷。
  • 🎯专注于统一API以支持Apple的辅助功能设置:虽然完全删除了可缩放字体和残疾分组支持,但基于WCAG 2.1成功标准的计算高度对比色对的API已迁移到其自己的仓库WCAG-Colors
  • 支持新的辅助功能API。

研究与React

你有没有想过改进应用内的辅助功能来扩大用户基础,而不是花费大量时间来实现没有人真正需要的特性?我们大多数人都这样想过,但从来都没有一个简单的方法来判断是否有任何人和特定的残疾受益于这些功能。如果有一个简单的方法可以弄清楚是否现在确实需要支持辅助功能将会怎样。甚至更好的是,如果你的用户群体中最常见的残疾是什么。

虽然Apple的辅助功能API 在各个平台之间都不同,且可能位于各种系统框架中,但Capable提供了一个统一的集中API来获取辅助功能设置的当前状态。这些信息可以发送到你的分析后端,了解是否有残疾特定的人因某些应用内的行为不能进行。此外,这些数据将帮助你优先处理辅助功能工作。

一旦你确定有特定残疾的用户在某些阶段遇到了困难,你就可以利用Capable的各种API,根据用户的辅助功能设置启用或禁用辅助功能支持。

文档

Capable提供了大量功能和配置。请到文档部分了解更多关于如何在其中使用它们。

安装

目前有三种不同的方法将Capable集成到您的应用程序中。

CocoaPods

use_frameworks!

target 'MyApp' do
  pod 'Capable'
end

Carthage

github "chrs1885/Capable"

Swift包管理器

dependencies: [
    .package(url: "https://github.com/chrs1885/Capable.git", from: "2.0.1")
]

使用

注册特定可访问性设置

首先,您需要在类中导入Capable框架,方式是为以下导入语句添加

import Capable

有两种不同的方法来初始化框架实例。您可以设置它以考虑所有可访问性功能

let capable = Capable()

或者通过传递特定的功能名称

let capable = Capable(withFeatures: [.largerText, .boldText, .shakeToUndo])

您可以在可访问性功能概述部分找到每个平台上可用的所有可访问性功能列表。

获取可访问性状态

如果您对某个特定的可访问性功能感兴趣,可以按照以下方法检索其当前状态

let capable = Capable()
let isVoiceOverEnabled: Bool = capable.isFeatureEnable(feature: .voiceOver)

要获取一个字典,其中包含了使用Capable实例初始化的所有功能,您可以这样做

let capable = Capable()
let statusMap = capable.statusMap

这将返回每个功能名称(键)及其当前值,值如可访问性功能概述部分所述。

发送可访问性状态

statusMap对象与大多数分析SDK API兼容。以下是一个快速示例,说明如何将您的数据与用户属性或自定义事件一起发送。

func sendMetrics() {
    let statusMap = self.capable.statusMap
    let eventName = "Capable features received"
    
    // App Center
    MSAnalytics.trackEvent(eventName, withProperties: statusMap)
    
    // Firebase
    Analytics.logEvent(eventName, parameters: statusMap)
    
    // Fabric
    Answers.logCustomEvent(withName: eventName, customAttributes: statusMap)
}

监听设置更改

初始化后,您可以检索所有已注册功能的更新通知。要响应更改,您需要将类添加为观察者,如下所示

NotificationCenter.default.addObserver(
    self,
    selector: #selector(self.featureStatusChanged),
    name: .CapableFeatureStatusDidChange,
    object: nil)

在您的featureStatusChanged内部,您可以解析特定的功能和值

@objc private func featureStatusChanged(notification: NSNotification) {
    if let featureStatus = notification.object as? FeatureStatus {
        let feature = featureStatus.feature
        let currentValue = featureStatus.statusString
    }
}

可访问性功能概述

以下表格包含所有可用的功能

由Apple提供并由Capable完全支持的API

☑️由Apple提供(仅状态,无通知)并由Capable完全支持的API

由Apple提供但Capable不支持,因为没有系统设置入口。

iOS macOS tvOS watchOS
.辅助触控
.加粗文本 ☑️
.按钮形状 (iOS14)
.字幕
.较暗的系统颜色
.无需颜色区分 (iOS13)
.全键盘访问 ☑️
.灰度
.辅助访问
.助听设备
.增加对比度
.颜色反转
.大号文本 ☑️
.单声道音频
.开关标签 (iOS13)
.更喜欢淡入淡出过渡 (iOS14)
.减少动态效果
.减少透明度
.摇晃撤销
.讲述屏幕
.讲述选择
.开关控制
.自动播放视频 (iOS13) (iOS13)
.语音控制

大多数功能只能将statusMap的值设置为打开关闭,但.largerText.hearingDevice特性提供了特定的值

大号文本

iOS
  • XS
  • S
  • M (默认)
  • L
  • XL
  • XXL
  • XXXL
  • 辅助访问M
  • 辅助访问L
  • 辅助访问XL
  • 辅助访问XXL
  • 辅助访问XXXL
  • 未知
watchOS
  • XS
  • S (38mm的默认手表)
  • L (42mm的默认手表)
  • XL
  • XXL
  • XXXL
  • 未知

助听设备

  • 两边
  • 关闭

使用OSLog进行记录

Capable框架提供了一个记录机制,可以让您跟踪底层正在发生的事情。您将获取有关当前配置的信息,有关可能引起未来问题的警告,以及会导致错误行为的错误。

默认情况下,所有消息将通过使用苹果的统一日志系统自动记录。然而,它还通过与提供将被调用的自定义闭包的方式与您特定的日志环境集成。例如,您可能希望将来自Capable框架的所有错误发送到您的分析服务

// Send error messages to your data backend
Capable.onLog = { message, logType in
    if logType == OSLogType.error {
        sendLog("Capable Framework: \(message)")
    }
}

此外,您还可以指定在记录消息时应考虑的最小日志级别。

// Configure logger to only log warnings and errors (.default, .error, and .fault)
Capable.minLogType = OSLogType.default

以下是支持的日志类型、它们的顺序以及它们用于的消息类型。

OSLogType 用法
.debug 冗余日志 *
.info 有关框架设置和状态更改的信息
.default 可能引起不期望行为的警告
.error 框架引起的错误
.fault 由于系统问题而由框架引起的错误 *

* 目前框架在记录消息时未使用。

资源

贡献

我们非常欢迎您通过提议或添加功能、报告错误或传播信息来为这个项目做出贡献。请快速查看我们的贡献指南

许可证

Capable 在MIT许可下可用。有关更多信息,请参阅LICENSE文件。