Ember,我围绕可访问性构建的原生 iOS 黑客新闻阅读器

2026-06-20 1 阅读 sylwester
Ember 一款适用于 iPhone、iPad 和 Mac 的原生黑客新闻阅读器 — 平静、快速,适合所有人。 Ember 是一款 SwiftUI 应用程序,它以原生应用程序的方式阅读黑客新闻:原生呈现的线程评论、干净的阅读排版、个性化的首次运行设置、全暗模式、离线阅读以及将可访问性视为一项功能而不是事后的想法。一个代码库从 iPhone 上的标签栏调整为 Mac 和 iPad 上的三窗格布局。突出显示每个提要 — 热门、新消息、最佳消息、询问 HN、显示 HN 和职位,可从固定的过滤器栏进行切换。本机评论线程 — 黑客新闻评论 HTML 被解析为带有可点击链接、斜体、块引用和代码块的本机文本。线程可与深度指示器折叠,并且整个树在单个请求中加载。智能入门 - 一个简短的首次运行流程,可读取设备的外观和辅助功能设置,预先配置应用程序以进行匹配,并在您选择主题、口音和主页源时显示实时预览。搜索 — 按相关性或新近度在黑客新闻中进行全文搜索。保存以备后用——为任何故事添加书签;保存的故事存储在设备上并离线工作。离线阅读——您查看过的提要、故事和评论线程都会缓存到磁盘上,因此 Ember 在没有连接的情况下也能继续工作,并自动回退到缓存。缓存大小显示在“设置”中并且可以清除。阅读跟踪 - 访问过的故事会变暗,以便您可以从上次停下的地方继续。在桌面上运行 - 同一应用程序在 Mac(通过 Mac Catalyst)和大型 iPad 上运行,具有本机三窗格布局:源列表侧边栏、故事列表和并排讨论。阅读排版——正文和评论采用 Inter 格式,具有舒适的行距和受限的尺寸,因此长线程易于阅读。应用内阅读 — 使用可选的阅读器模式在应用内 Safari 视图中打开链接,或切换到默认浏览器。分享 - 每个故事(文章或讨论链接)上的标准分享按钮。个人资料 — 查看任何用户的业力、加入日期、关于和最近提交的内容。贴心的设计——温暖的、手工调整的色彩系统、完整的明/暗支持、六种强调主题、触觉和流畅的动画。辅助功能 辅助功能是 Ember 的一流部分,特别关注色觉。切勿单独着色。除了颜色之外,状态始终由图标、形状或文本承载 - 点和评论计数将 SF 符号与其值配对,读取状态显示复选标记,选择状态使用环和复选标记。色盲友好提示。专用设置(当系统“无颜色区分”打开时自动启用)在整个过程中添加了明确的非颜色指示器。旁白。故事行、评论和控件公开有意义的标签、提示、特征和自定义操作;每个故事读起来都是一个连贯的元素。动态类型。版式随着系统文本大小而缩放,布局(包括注释缩进)根据可访问性大小进行调整。减少运动。启用“减少运动”时,动画和加载闪烁会最小化。带下划线的链接。评论中的链接可以加下划线,这样它们就可以在不依赖颜色的情况下保持可识别性。入职适应。首次启动时,Ember 会检测 VoiceOver、减少动作、区分无颜色、粗体文本和大文本,打开匹配选项,并准确告诉您它发生了什么变化。屏幕截图 提要 故事和评论 搜索 设置 入门 · 欢迎 入门 · 可访问性 架构 Ember 是纯 SwiftUI,没有第三方依赖项。 UI:SwiftUI,针对 iOS 18,通过 Mac Catalyst 进行 Mac 构建。根布局适应水平尺寸类别:iPhone 上的 TabView、Mac 上的三列 NavigationSplitView 和常规宽度的 iPad。状态:用于视图模型和存储的观察框架(@Observable)。并发:async/await网络; feed 页面与 TaskGroup 同时获取并容忍单个缺失项目。持久化和离线:用于设置和读取状态的UserDefaults;用于保存故事的 JSON 文件;有界 JSON 磁盘缓存( DiskCache ,参与者),用于存储提要列表、项目和评论树,并在网络不可用时用作后备。版式:用于阅读文本的捆绑 Inter 可变字体,使用 Dynamic Type 进行缩放;用于密集元数据和代码的系统字体。数据源:用于源、项目和用户的官方 Hacker News Firebase API。 Algolia HN Search API 用于完整评论树(每个线程一个请求)和搜索。项目布局 源/应用程序/应用程序条目、根选项卡视图、环境布线、应用程序内 Safari 模型/HNItem、HNUser、Feed、Algolia 模型 网络/HNService 协议、实时客户端、预览模拟 商店/设置、书签、阅读状态 设计系统/主题、版式、触觉、可重用组件 实用程序/ HTML 注释渲染器、相对时间 功能/Feed/Feed 列表、过滤栏、视图模型 StoryDetail/ 故事标题 + 线程可折叠评论搜索/相关搜索/recenc