Awesome Swift Platforms Cocoapods compatible SPM Twitter

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

🎉 Capable 2.0 的新特性 🎉

以下是最重要的变更:

研究与反应

您是否曾想过通过改进应用中的辅助功能来扩大用户群,而不是花费大量时间来实现没人真正要求的特性? 我们大多数人都想过,但是一直以来都没有一种简单的方法来判断是否有人从中受益。 如果有一种简单的方法可以确定现在是否确实需要支持辅助功能,那会怎么样呢? 甚至更好的是,您的用户群中最普遍存在哪种残疾。

尽管 Apple 的辅助功能 API 在所有平台上都不同,并且可能位于各种系统框架中,但 Capable 提供了统一的集中式 API 来获取辅助功能设置的当前状态。 此信息可以发送到您的分析后端,以了解是否有人因特定残疾而无法在您的应用中执行某些操作。 此外,此数据将帮助您确定辅助功能工作的优先级。

一旦您确定具有特定残疾的用户停留在某个阶段,您就可以利用各种 Capable API 根据用户的辅助功能设置启用/禁用辅助功能支持。

文档

Capable 提供了大量功能以及一系列配置。 要了解更多关于如何在 文档 部分中使用它们的信息。

安装

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

CocoaPods

use_frameworks!

target 'MyApp' do
  pod 'Capable'
end

Carthage

github "chrs1885/Capable"

Swift Package Manager

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 值设置为 enableddisabled,但 .largerText.hearingDevice 功能确实提供了特定的值

LargerText

iOS
watchOS

HearingDevice

使用 OSLog 记录

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 文件。