以下是最重要的变更:
您是否曾想过通过改进应用中的辅助功能来扩大用户群,而不是花费大量时间来实现没人真正要求的特性? 我们大多数人都想过,但是一直以来都没有一种简单的方法来判断是否有人从中受益。 如果有一种简单的方法可以确定现在是否确实需要支持辅助功能,那会怎么样呢? 甚至更好的是,您的用户群中最普遍存在哪种残疾。
尽管 Apple 的辅助功能 API 在所有平台上都不同,并且可能位于各种系统框架中,但 Capable 提供了统一的集中式 API 来获取辅助功能设置的当前状态。 此信息可以发送到您的分析后端,以了解是否有人因特定残疾而无法在您的应用中执行某些操作。 此外,此数据将帮助您确定辅助功能工作的优先级。
一旦您确定具有特定残疾的用户停留在某个阶段,您就可以利用各种 Capable API 根据用户的辅助功能设置启用/禁用辅助功能支持。
Capable 提供了大量功能以及一系列配置。 要了解更多关于如何在 文档 部分中使用它们的信息。
目前有三种不同的方法可以将 Capable 集成到您的应用中。
use_frameworks!
target 'MyApp' do
pod 'Capable'
end
github "chrs1885/Capable"
dependencies: [
.package(url: "https://github.com/chrs1885/Capable.git", from: "2.0.1")
]
首先,您需要在您的类中导入 Capable 框架,方法是添加以下 import 语句
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 提供的 API,并且完全由 Capable 支持
☑️ Apple 提供的 API(仅状态,无通知),并且完全由 Capable 支持
❌ Apple 提供的 API,但 Capable 由于缺少系统设置条目而不支持。
iOS | macOS | tvOS | watchOS | |
---|---|---|---|---|
.assistiveTouch | ✅ | ❌ | ||
.boldText | ✅ | ✅ | ☑️ | |
.buttonShapes | ✅ (iOS14) | ❌ | ||
.closedCaptioning | ✅ | ✅ | ||
.darkerSystemColors | ✅ | ❌ | ||
.differentiateWithoutColor | ✅ (iOS13) | ✅ | ❌ | |
.fullKeyboardAccess | ☑️ | |||
.grayscale | ✅ | ✅ | ||
.guidedAccess | ✅ | ❌ | ||
.hearingDevice | ✅ | |||
.increaseContrast | ✅ | |||
.invertColors | ✅ | ✅ | ✅ | |
.largerText | ✅ | ❌ | ☑️ | |
.monoAudio | ✅ | ✅ | ||
.onOffSwitchLabels | ✅ (iOS13) | ❌ | ||
.prefersCrossFadeTransitions | ✅ (iOS14) | ❌ | ||
.reduceMotion | ✅ | ✅ | ✅ | ✅ |
.reduceTransparency | ✅ | ✅ | ✅ | |
.shakeToUndo | ✅ | ❌ | ||
.speakScreen | ✅ | ❌ | ||
.speakSelection | ✅ | ❌ | ||
.switchControl | ✅ | ✅ | ✅ | |
.videoAutoplay | ✅ (iOS13) | ✅ (iOS13) | ||
.voiceOver | ✅ | ✅ | ✅ | ✅ |
虽然大多数功能只能将 statusMap
值设置为 enabled 或 disabled,但 .largerText
和 .hearingDevice
功能确实提供了特定的值
Capable 框架提供了一种日志记录机制,可让您跟踪后台发生的情况。 您将获得有关当前设置的信息,有关可能导致进一步问题的警告以及导致行为不端的错误。
默认情况下,所有消息将通过使用 Apple 的 统一日志记录系统自动记录。 但是,它还通过提供一个自定义闭包与您的特定日志记录环境集成,该闭包将被调用。 例如,您可能希望将来自 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 文件。