FareBot:适用于 Android、iOS 与 Web 的开源 NFC 公共交通阅读器

FareBot 是什么?

FareBot (github.com/codebutler/farebot) 是一款开源的 Kotlin 多平台应用,让你可以读取并检查无接触公共交通智能卡上存储的数据。它使用纯 Kotlin 和 Compose Multiplatform 编写,并可在以下平台运行:

  • Android – 原生 NFC API
  • iOS – CoreNFC
  • macOS – PC/SC 或 PN533 USB 读卡器(实验性)
  • Web – WebAssembly + WebUSB(实验性)

该应用支持多种卡标准(ISO 7816、CEPAS、FeliCa、DESFire、MIFARE Classic、MIFARE Ultralight、NFC‑V),并可读取亚洲、欧洲、北美等地区 80+ 个交通系统的卡片。

对开发者为何重要

  • 现代工具链 – 使用 Gradle KTS、Kotlin 2.3.0、Compose、Koin DI、Kotlin x serialization 等。
  • 全栈文档 – 仓库包含活跃的 README、代码注释以及由 Claude Code 驱动的 dev‑container,可用于沙盒实验。
  • 友好的贡献模式 – 所有代码均为 MIT/GPL‑free,PR 流程简洁。

关键功能

功能 描述
卡片发现 扫描 NFC 标签并列出可用卡类型。
完整卡片转储 读取所有 EF 文件,显示原始数据、时间戳和余额。
多平台 UI 基于 Compose 的 UI,移动、macOS 与 Web 共享。
可扩展系统注册表 在单个 “registry” 文件中添加新交通系统。
WebAssembly 示例 实验性网页构建,支持通过 PN533 USB 读卡器在 Chrome/Edge 上读取卡片。
Dev‑container 基于 Docker 的环境,预装 Java 21、Gradle 与 Claude Code。

支持的卡片(亮点示例)

  • 日本 – Suica、Pasmo、Octopus、Edy
  • 新加坡 – EZ‑Link、NETS FlashPay、Octopus
  • 德国 – VDV‑Bus、VVS
  • 英国 – Oyster、TfL 卡(有限的 MIFARE 支持)
  • 美国 – Clipper、Ventra、ORCA(DESFire)

完整列表已记录在 README;仓库甚至处理了诸如 MIFARE Classic 加密密钥等特定卡片的细节。

快速入门

  1. 克隆仓库
    git clone https://github.com/codebutler/farebot.git
    cd farebot
    
  2. 构建并运行(Android)
    make android-install   # 通过 ADB 安装到已连接的设备
    
  3. 构建并运行(iOS)
    make ios-install       # 安装到实体 iPhone
    
  4. 构建并启动网页
    make web-run
    
  5. 运行测试
    make test
    

提示: dev‑container.devcontainer/)为你提供沙盒编辑器,可安全运行 Claude Code 或实验仓库而不受风险。

贡献流程

  1. Fork 仓库。
  2. 创建功能分支。
  3. 添加/修改代码;运行 make test
  4. 提交拉取请求。

所有贡献者会在 Contributors 部分得到认可。仓库拥有 30+ 位贡献者和 1 k+ 星标,展现了活跃的社区。

许可证与社区

FareBot 采用 GPL‑3.0 许可证发布 – 免费使用、修改和再分发,只要衍生作品保持相同许可证。项目欢迎通过 GitHub PR、issue 或添加新交通系统适配器进行贡献。


启示: 如果你正在构建 NFC‑支持的交通应用,或仅仅想了解生产级 Kotlin Multiplatform 代码库的结构,FareBot 是必读之作。它将真实卡片支持、实验性网页功能和完整文档结合,为开源参考树立了标杆。

原创文章: 查看原文

分享本文