Ace Citizenship
一款我为帮助妻子通过美国公民身份测试而构建的免费iOS应用。她通过了。现在它帮助其他人实现同样的梦想。
摘要
当我妻子开始准备美国归化考试时,我找不到一款符合我标准的学习应用。市面上的产品要么广告过多、要么内容过时、要么忽视了经过验证的学习方法。所以我决定自己做一个。
Ace Citizenship使用间隔重复涵盖所有128道官方USCIS公民问题——这与使Duolingo有效的技术相同。
该应用完全免费,并将保持完全免费。没有广告,没有订阅,没有陷阱。
起源故事
我为一位观众构建了Ace Citizenship:我的妻子。她需要通过USCIS入籍测试,我想给她最好的成功工具。
市面上已有应用的体验令人失望:侵入式广告频繁打断学习,订阅付费墙阻断关键内容,整体设计也像是事后拼凑。
我知道我可以做得更好。所以我从零开始设计、品牌化和开发整个应用。
应用
Ace Citizenship提供高端体验而无高端价格。界面简洁、专注,尊重您的时间。
视觉设计
我创造了一种统一的3D视觉语言——梦幻、乐观、明显的美国风格——让学习不再枯燥。
每幅插图都是使用我在100,000多次图像生成中完善的自定义提示在Midjourney中生成的。
在dreamofelectric.com查看更多我的AI生成艺术作品。 dreamofelectric.com.
间隔重复
Ace Citizenship的核心是一种优化学习环节的间隔重复算法。
这种基于证据的方法在提高记忆力的同时大大减少了学习时间。
该应用跟踪进度并适应个人学习模式,提供智能且响应迅速的个性化体验。
个性化学习
一些USCIS问题的答案取决于您的具体情况——您的居住州、您的国会代表。Ace Citizenship会根据您的实际测试条件个性化这些问题。
这种对细节的关注意味着用户不只是在记忆通用答案;他们在学习测试当天需要的确切信息。
技术实现
Ace Citizenship 完全基于 SwiftUI 构建于 iOS,充分利用了 Apple 的现代框架。应用使用 SwiftData 进行本地持久化,并通过 iCloud 在无需账号体系的情况下同步学习进度。
该架构可维护且高效。当美国移民局修改其官方列表时,问题库会无缝更新,并且间隔重复引擎完全在设备上运行以提供即时反馈。
遵循Apple的Human Interface Guidelines确保应用感觉原生且熟悉。
内部机制
以下是使应用有效的代码库中的一些有趣模式。
间隔重复算法
核心学习引擎优先处理您困难的问题。当您答错时,该卡片进入单独的队列,混入下一个学习环节。
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 届国会进行了更新。当您选择所在州时,有关参议员、州长和首都的问题将根据您的实际测试条件进行个性化设置。
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功能实现编译时安全性。
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办公室,她手持入籍证书——让每一小时的开发都值得。
帮助他人
在妻子顺利通过考试后,我将 Ace Citizenship 发布到 App Store。现在它获得了 5 星评分,用户也持续反馈这款应用确实帮助他们通过了公民考试。
一位用户写道:"我每天用这个应用练习30分钟,坚持了一个月就通过了!"
该应用继续帮助移民实现成为美国公民的目标,一次一个学习环节。
感谢
Ace Citizenship代表了我在构建软件方面的热爱:为我关心的人解决真实问题,然后与世界分享该解决方案。
这个项目让我能够在整个产品生命周期中工作——从识别需求,到设计体验,再到编写每一行代码。这是我的技艺的纯粹表达。
该应用是免费的,并将保持免费。因为有些事情——比如帮助人们成为他们选择称之为家的国家的公民——比收入更重要。