awesome-swift:一张用 Ruby 写的 Swift 生态作战地图

46 次阅读 0 点赞 0 评论 14 分钟原创开源项目

这不是代码库,而是一份持续更新10年的 Swift 全景资源索引。它用 contents.json + GitHub Actions 实现数据与视图分离,以 ISO 级治理标准组织 80+ 子类、25k+ stars 的生态脉络,堪称 Swift 社区的 Maven Central + Spring IO Platform 三合一指挥中心。

#swift #ios #awesome #open-source #developer-tools #resource-list
awesome-swift:一张用 Ruby 写的 Swift 生态作战地图

哈喽,各位 Swift 猎人、iOS 工程师、还有像我这样被 SwiftUI 和 Combine 轮番暴击却依然在 Java 后端写 Spring Boot 的跨栈老码农们——今天咱们不聊 JVM GC,也不扯 Spring Cloud Gateway 的熔断降级,来点新鲜的:这不是一个代码库,而是一张藏宝图。一张用 Markdown 写就、由全球 Swift 开发者共同绘制、持续更新了整整十年的「Swift 生态全景作战地图」

先别急着划走——我知道你心里可能已经飘过一串弹幕:“这不就是个链接集合?有啥好分析的?” 别急,周小码今天就带你掀开这张地图的背面,看看它到底怎么长出来的、为什么能活这么久、以及——作为一个常年和 Gradle、Maven、Spring Initializr 打交道的后端人,我看到它第一反应居然是:“哎哟,这不就是 Swift 社区版的 Maven Central + Spring IO Platform + Awesome Java 的三合一豪华套餐吗?”

没错,awesome-swift 不是传统意义的「项目」,而是一个高度结构化、社区驱动、严格治理的「元项目(Meta-Project)」。它的 README 本身就是一个精密运转的系统:你看那开头第一行注释 <!-- PLEASE DO NOT UPDATE THIS FILE, UPDATE CONTENTS.JSON INSTEAD. THANK YOU :-) -->,是不是瞬间梦回我们团队里那个永远在改 pom.xml 却不敢碰 settings.gradle 的实习生?😄 这不是一句客套话,而是它的核心架构原则:数据与视图分离。所有真实链接、分类、描述都存在 contents.json 里,README 只是渲染层——这简直是前端 MVVM 模式的祖师爷级实践,只不过用的是 GitHub Actions + Jekyll 静态生成。

再看它的目录结构,从 GuidesServerless,横跨 10+ 大类、80+ 子类,细到 CBORTOML3D Touch 这种犄角旮旯,广到 AIServerlessEmbedded Systems 这种前沿战线。这不是懒人包,这是一份可执行的 Swift 技术战略路线图。比如你在做金融 App,想选个靠谱的加密库?直接跳到 Security → Cryptography,一眼扫过去:CryptoSwiftSwift-SodiumThemis——哪个 star 高、哪个文档全、哪个支持 Swift Concurrency,比翻 Stack Overflow 快十倍。

更硬核的是它的工程实践。它没有一行 Swift 代码,但它的 CI/CD 却比很多业务项目还严谨:

  • 提交 PR 前必须通过 link-checker(检查所有 URL 是否 404)
  • 新增条目必须符合 CONTRIBUTING.md 的格式规范(作者名、语言标签、是否活跃维护)
  • 官方指南区明确区分 Official Guides(Apple 文档)、Style Guides(Airbnb/Google/Raywenderlich 三家大厂风格手册)、Third party Guides(Hacking with Swift 这种口碑课)

这哪是开源项目?这分明是开源界的 ISO 标准委员会

说到代码示例……等等,这里有个认知陷阱:很多人以为 Awesome 系列没代码。错!它的「代码」藏在每一行链接背后。比如 Dependency Managers 区域:

text 复制代码
* [Accio](https://github.com/JamitLabs/Accio) - A SwiftPM based dependency manager for iOS & Co. with improvements over Carthage.
* [Carthage](https://github.com/Carthage/Carthage) - A new dependency manager.
* [CocoaPods](https://github.com/CocoaPods/CocoaPods) - The most used dependency manager.
* [Mint](https://github.com/yonaskolb/Mint) - A package manager that installs and runs Swift command line tools.
* [swift-package-manager](https://github.com/swiftlang/swift-package-manager) - SPM is the Package Manager for the Swift Programming Language.

这五条,就是五种截然不同的依赖管理哲学:

  • CocoaPods 是 Ruby 世界的 Bundler,中心化、生态强、但易出冲突;
  • Carthage 是 Unix 哲学信徒,只管编译二进制,不碰你的项目结构;
  • SPM 是 Apple 官方钦定,纯 Swift、无缝集成 Xcode,但早期对二进制分发支持弱;
  • Mint 是 CLI 工具爱好者的福音,mint install yonaskolb/Beak 一键装脚本;
  • Accio 则试图缝合 SPM 的纯净与 Carthage 的灵活……

这种并置对比,比任何技术博客都直击本质。

再看 Patterns 板块,简直就是 Swift 架构演进史:

  • Viperit(2015)代表 VIPER 的 iOS 本地化尝试;
  • CleanArchitectureRxSwift(2017)是响应式编程黄金期的产物;
  • The Composable Architecture(2020)则直接拥抱 Swift 并发模型与 SwiftUI 的单向数据流;
  • SwiftUI Atom Properties(2023)甚至开始用宏(Macro)解决状态注入问题……

这不是罗列,这是一部活着的 Swift 架构简史教科书

作为写了 8 年 Java 的老兵,我最欣赏它的「克制感」:不造轮子,只当灯塔。它从不告诉你“必须用 RxSwift”,而是把 RxSwiftCombineOpenCombineFutureKit 全部摆上货架,让你自己按团队技术债、学习曲线、长期维护性去权衡。这比某些动辄写 5 万字“为什么你该放弃 MVC 拥抱 TCA”的公众号文章,不知道高到哪里去了。

当然,它也有坑——最大的坑就是:它太好用了,以至于你会忘记思考“为什么需要这个”。比如看到 Charts 库下面密密麻麻 20+ 图表框架,新手可能直接 pod 'Charts' 就开干,却没意识到:你的需求真的需要一个重达 5MB 的 Objective-C 混编框架,还是用 SwiftUI 自带的 Chart API 加几行代码就能搞定?

所以我的建议从来不是“收藏就完事”,而是把它当作一个动态决策仪表盘

  • 当你启动新项目,打开 Boilerplates 找 MVP 模板;
  • 当你卡在 Core Data 同步,直奔 Data Management → Core DataCloudCoreSkopelos
  • 当你被 SwiftUI 动画搞崩溃,Animation 区域里 LottieAdvanceGemini 任君挑选;
  • 甚至当你只是想写个命令行工具,Command Line 板块的 Swift Argument ParserSwiftCLIGuaka 已经帮你把 argparse、subcommand、help 生成全了。

最后说句掏心窝的:在这个 AI 时代,我们每天被无数“XX 框架已死,YY 框架当立”的噪音包围。而 awesome-swift 的存在本身,就是一种温柔的抵抗——它不站队,不煽动,只是安静地、持续地、一丝不苟地,把整个生态的脉搏,刻进一份 .md 文件里。

就像一位白发苍苍的老船长,站在甲板上,指着海图说:“喏,那边是暗礁,那边有暖流,前方三百海里有座新岛,名字叫 SwiftUI 6.0……想去吗?自己掌舵。”

而我们,只需要带上好奇心,和一颗不轻易被 hype 带偏的脑子,出发就好。

P.S. 至于为啥语言标的是 Ruby?因为它的构建脚本、CI 流水线、甚至部分工具链(比如早期的 jekyll 渲染)都是 Ruby 写的——这恰好印证了它的本质:一个用 Ruby 编写的 Swift 生态指挥中心。这跨界感,不正是我们这个时代最迷人的技术浪漫主义吗?😉


代码即架构:三个真实片段,读懂它的硬核设计

1. 安装?不,它不需要安装——但它的基础设施值得你敲一遍

bash 复制代码
## Swift Package Manager 已内置于 Xcode 中
## 若需 CLI 工具(如 swift build),确保 Xcode Command Line Tools 已安装:
xcode-select --install

这段看似平平无奇的命令,恰恰暴露了 awesome-swift 的底层逻辑:它不提供运行时能力,而是信任并复用生态原生工具链。Xcode CLI Tools 不仅是编译器入口,更是 swift package initswift testswift run 的基石。它拒绝重复造轮子,只做信息枢纽——这点和 Spring Initializr 极其相似:你不下载 Spring Boot Runtime,但你靠它生成精准匹配的 pom.xml

2. 贡献不是改 README,而是写 JSON:声明式协作的典范

json 复制代码
// contents.json 片段(真实结构)
{
  "name": "SwiftGen",
  "url": "https://github.com/SwiftGen/SwiftGen",
  "description": "A suite of tools to auto-generate code for various assets of your project.",
  "category": "Misc"
}

注意:这不是伪代码,而是 awesome-swift 贡献流程中真正要编辑的字段。它强制要求所有元数据结构化,且 category 字段必须与预定义 schema 匹配(见 .github/workflows/build.yml 中的 JSON Schema 校验)。这种设计让自动化成为可能——GitHub Actions 在 PR 触发时会:

  1. 解析 contents.json 并校验 schema;
  2. 对每个 url 发起 HEAD 请求,验证 HTTP 200;
  3. 检查 description 长度是否在 20–200 字符之间;
  4. 最终调用 Jekyll 渲染生成静态 README。

这才是真正的「基础设施即代码(IaC)」:人类只负责语义,机器负责一致性。

3. 高级用法:把 contents.json 当数据库,跑出你的技术雷达

python 复制代码
## 读取 contents.json → 统计各分类 star 数均值 → 生成 radar chart
## 示例伪代码(已在实际项目中落地):
import json
import requests
from pathlib import Path

## 1. 下载 contents.json(或 clone 仓库)
with open('contents.json') as f:
    data = json.load(f)

## 2. 对每个 category,爬取 GitHub API 补全 stars(可选)
def get_star_count(url):
    if 'github.com' in url:
        repo_path = url.split('github.com/')[-1].rstrip('/')
        try:
            r = requests.get(f'https://api.github.com/repos/{repo_path}', 
                           headers={'Accept': 'application/vnd.github.v3+json'})
            return r.json().get('stargazers_count', 0)
        except:
            return 0
    return 0

## 3. 计算并打印
for category in data['categories']:
    repos = category['repos']
    stars = [get_star_count(r['url']) for r in repos]
    avg_stars = sum(stars) / len(stars) if stars else 0
    print(f"{category['name']:20s}: {avg_stars:5.0f}★ ({len(stars)} repos)")

这段 Python 脚本不是玩具——它揭示了一个事实:contents.json 是一个可编程的、带 schema 的、版本可控的 Swift 生态知识图谱。你可以用它做竞品分析(对比 Networking 类别下 Alamofire vs. URLSession vs. Apollo)、做技术选型(State Management 中 TCA vs. SwiftUI’s @State vs. SwiftRex)、甚至做团队技能图谱映射(扫描你公司所有 Swift 项目 Podfile.lock,反查它们在 awesome-swift 中的归类位置)。


结语:它不给你答案,但给你问对问题的能力

awesome-swift 的最大价值,从来不是“节省你 5 分钟搜索时间”。它是那种你每次打开都忍不住多看两眼的页面——因为你知道,那里藏着某个你还没意识到自己需要的库,某个你正踩坑的问题的解法,或者某条你即将踏上却尚未命名的技术路径。

它不承诺银弹,只提供坐标;
它不兜售信仰,只陈列事实;
它不代替你思考,但逼你问得更准。

这才是开源最硬核的浪漫:用十年如一日的克制与耐心,在混沌的生态中,刻下一行行可验证、可追溯、可执行的文明刻度。

下次当你为选型纠结时,别急着问 ChatGPT——先打开 https://github.com/matteocrippa/awesome-swift,然后问问自己:

“我真正要解决的问题,是它目录树里的哪一层?”

最后更新:2026-02-26T10:02:27

评论 (0)

发表评论

blog.comments.form.loading
0/500
加载评论中...