Ace Citizenship

一款我为帮助妻子通过美国公民身份测试而构建的免费iOS应用。她通过了。现在它帮助其他人实现同样的梦想。

Ace Citizenship app interface

摘要

当我妻子开始准备美国归化考试时,我找不到一款符合我标准的学习应用。市面上的产品要么广告过多、要么内容过时、要么忽视了经过验证的学习方法。所以我决定自己做一个。

Ace Citizenship使用间隔重复涵盖所有128道官方USCIS公民问题——这与使Duolingo有效的技术相同。

该应用完全免费,并将保持完全免费。没有广告,没有订阅,没有陷阱。

起源故事

我为一位观众构建了Ace Citizenship:我的妻子。她需要通过USCIS入籍测试,我想给她最好的成功工具。

市面上已有应用的体验令人失望:侵入式广告频繁打断学习,订阅付费墙阻断关键内容,整体设计也像是事后拼凑。

我知道我可以做得更好。所以我从零开始设计、品牌化和开发整个应用。

应用

Ace Citizenship提供高端体验而无高端价格。界面简洁、专注,尊重您的时间。

Welcome screen
Quiz interface
Completion screen
Settings screen

视觉设计

我创造了一种统一的3D视觉语言——梦幻、乐观、明显的美国风格——让学习不再枯燥。

每幅插图都是使用我在100,000多次图像生成中完善的自定义提示在Midjourney中生成的。

在dreamofelectric.com查看更多我的AI生成艺术作品。 dreamofelectric.com.

3D flag
3D Capitol
3D States map

间隔重复

Ace Citizenship的核心是一种优化学习环节的间隔重复算法。

这种基于证据的方法在提高记忆力的同时大大减少了学习时间。

该应用跟踪进度并适应个人学习模式,提供智能且响应迅速的个性化体验。

个性化学习

一些USCIS问题的答案取决于您的具体情况——您的居住州、您的国会代表。Ace Citizenship会根据您的实际测试条件个性化这些问题。

这种对细节的关注意味着用户不只是在记忆通用答案;他们在学习测试当天需要的确切信息。

USCIS questions reference

技术实现

Ace Citizenship 完全基于 SwiftUI 构建于 iOS,充分利用了 Apple 的现代框架。应用使用 SwiftData 进行本地持久化,并通过 iCloud 在无需账号体系的情况下同步学习进度。

该架构可维护且高效。当美国移民局修改其官方列表时,问题库会无缝更新,并且间隔重复引擎完全在设备上运行以提供即时反馈。

遵循Apple的Human Interface Guidelines确保应用感觉原生且熟悉。

内部机制

以下是使应用有效的代码库中的一些有趣模式。

间隔重复算法

核心学习引擎优先处理您困难的问题。当您答错时,该卡片进入单独的队列,混入下一个学习环节。

Flashcards.swift
func completeCard(correct: Bool) {
    if !currentSet.isEmpty {
        let card = currentSet.removeFirst()
        remainingCards -= 1

        if correct {
            cards.append(card)  // Back to main deck
        } else {
            incorrectCards.append(card)  // Priority requeue
        }
    }
}

func prepareNextSet() {
    // Prioritize missed questions in next round
    let incorrectCount = min(incorrectCards.count, 10)
    let newCardsCount = 10 - incorrectCount

    currentSet = Array(incorrectCards.prefix(incorrectCount))
    incorrectCards.removeFirst(incorrectCount)
    currentSet += Array(cards.prefix(newCardsCount))
}

州特定个性化

该应用程序维护着所有 50 个州和地区的数据库,并为本届第 119 届国会进行了更新。当您选择所在州时,有关参议员、州长和首都的问题将根据您的实际测试条件进行个性化设置。

Questions.swift
struct StateInfo {
    let name: String
    let senators: [String]
    let governor: String
    let capital: String
}

// Updated for 119th Congress (January 2025)
let stateInformation: [String: StateInfo] = [
    "California": StateInfo(
        name: "California",
        senators: ["Adam Schiff", "Alex Padilla"],
        governor: "Gavin Newsom",
        capital: "Sacramento"
    ),
    // ... all 50 states + territories
]

类型安全主题

主题系统使用Swift的KeyPath功能实现编译时安全性。

Theme.swift
struct Theme {
    struct ColorSet {
        let background: Color
        let surface: Color
        let onBackground: Color
        let blue: Color
        let green: Color
        let red: Color
    }

    static func color(
        _ keyPath: KeyPath<ColorSet, Color>,
        for colorScheme: ColorScheme
    ) -> Color {
        let colorSet = colorScheme == .dark
            ? darkMode
            : lightMode
        return colorSet[keyPath: keyPath]
    }
}

// Usage: Theme.color(\.blue, for: colorScheme)

她通过了

我妻子使用Ace Citizenship准备她的入籍测试。她通过了。今天,她是美国公民。

那一刻——我们一起站在USCIS办公室,她手持入籍证书——让每一小时的开发都值得。

Citizenship ceremony materials
效忠宣誓
Naturalization ceremony
今天,我是美国人

帮助他人

在妻子顺利通过考试后,我将 Ace Citizenship 发布到 App Store。现在它获得了 5 星评分,用户也持续反馈这款应用确实帮助他们通过了公民考试。

一位用户写道:"我每天用这个应用练习30分钟,坚持了一个月就通过了!"

该应用继续帮助移民实现成为美国公民的目标,一次一个学习环节。

感谢

Ace Citizenship代表了我在构建软件方面的热爱:为我关心的人解决真实问题,然后与世界分享该解决方案。

这个项目让我能够在整个产品生命周期中工作——从识别需求,到设计体验,再到编写每一行代码。这是我的技艺的纯粹表达。

该应用是免费的,并将保持免费。因为有些事情——比如帮助人们成为他们选择称之为家的国家的公民——比收入更重要。

在App Store下载 →