从社区路标到生态基石:Dave Verwer 的新篇章 -- 肘子的 Swift 周报 #137

作者:东坡肘子日期:2026/5/26

从社区路标到生态基石:Dave Verwer 的新篇章

Dave Verwer 在 iOS Dev Weekly 第 751 期宣布,这份已经持续近 15 年的周报将交由新的团队继续运营,而他自己接下来会全职投入 Swift Package Index。我的博客在早期获得关注,也曾得益于 iOS Dev Weekly 的推荐;而我在周报中坚持撰写每期周评,同样在很大程度上受到 Dave Verwer 的启发。对于很多 Apple 平台开发者来说,iOS Dev Weekly 早已不只是一份链接合集。它既是社区路标,也是长期陪伴。

不过,相较于“Dave 离开 iOS Dev Weekly”这个略带告别感的表述,我更愿意把这件事看作一次重心转移:从整理 Swift 社区的信息流,转向建设 Swift 生态的基础设施。

Swift Package Index 最初由 Dave Verwer 和 Sven A. Schmidt 共同创建,是 SwiftPM Library 的继承者与重构版。刚出现时,它很容易被理解为一个“找 Swift 包的网站”。但几年过去后,SPI 已经明显超出了普通索引站点的范畴。它不仅记录包的基本信息,也通过真实构建来验证不同 Swift 版本和平台的兼容性,托管 DocC 文档,展示维护状态、依赖关系、许可证、测试与质量评分,还通过 Ready for Swift 6 这样的项目,观察整个包生态向新语言特性迁移的进度。

这些能力看似分散,实际上指向的是同一件事:让 Swift 包生态变得更可判断、更可比较,也更可信。对于个人开发者来说,选择依赖时可以少一点“开盲盒”;对于团队来说,在引入第三方库前能更清楚地评估风险;对于包作者来说,也多了一个展示项目健康度和文档质量的公共窗口。一个成熟的包生态,不能只靠 Package.swift 存在。它还需要可见的兼容性、持续的文档、稳定的构建验证,以及围绕这些信息逐渐形成的信任机制。

我在 第 135 期 中提到:CocoaPods 正在退场,SwiftPM 才刚翻到第二章。随着 CocoaPods Trunk 进入只读倒计时,Flutter 等跨平台生态也开始转向 SPM,Apple 平台依赖管理的“大一统”看起来已经越来越接近。但这并不意味着 SwiftPM 已经完成了真正意义上的破圈。它当然会成为 Apple 平台的默认答案,可如果 Swift 想在 Linux、Android、Wasm、嵌入式等更多场景中继续扩展,SwiftPM 需要面对的就不只是“能不能安装依赖”,而是整个生态是否足够透明、可靠、可持续。

在这一点上,SPI 的价值可能比它的名字暗示的要大得多。它可以是索引,也可以是生态仪表盘;可以是文档托管平台,也可以是兼容性实验室;未来甚至有机会在包集合、供应链安全、版本不可变性、公共 registry 等方向上承担更多角色。Dave 此前也曾提到,SwiftPM registry 能为 Swift 依赖管理带来更安全、更快的分发方式,而公共开源 registry 仍是一个值得期待的空白。

iOS Dev Weekly 记录的是 Swift 社区每周的涟漪,而 Swift Package Index 触及的则是这些涟漪之下的水位。Dave 的转身,或许也说明 Swift 生态已经走到一个新阶段:我们仍然需要好的内容策展者,但更需要能让整个生态长期运转下去的基础设施建设者。

本期内容 | 前一期内容 | 全部周报列表

近期推荐

轻松理解 Monad (Monads are Easy)

Monad 可能是函数式编程中“名气最大、解释最吓人”的概念之一,但它真正解决的问题,其实只是如何在“带上下文”的值之间,安全、连续地组合计算。Krishna Kotecha 用 Swift 开发者容易理解的方式,通过“仓库扫描书籍”的类比,把 Monad 拆解成了一个极其具体的流程 —— 值是书、容器是箱子、map 是逐个扫描,而 flatMap 则负责拆开嵌套箱子并重新压平成一个统一的箱子。无论是 OptionalResult,还是链式 Optional chaining,本质上都带有明显的 Monad 风格。在 Swift 中,你写下的每一个 ?.,本质上都是一个伪装成语法糖的 flatMap

Krishna Kotecha 不仅把 Monads 讲得十分直观,文章中的配图也相当出色。这些“拆箱再装箱”的流程图,把 flatMap 的核心思想展现得非常形象。


Swift 类型驱动设计:更好的金额格式化 (Type-Driven Design in Swift: Better Money Formatting)

对很多 Swift 开发者来说,Type-Driven Design 往往停留在“避免传错参数”的层面。但在涉及金额、状态机、权限、订单等复杂业务时,类型本身其实也可以成为业务规则与领域约束的一部分。Uwais Alqadri 在本文中,以“金额的原始值与展示值必须分离”为切入点,讨论了为什么金融类应用不应直接使用 Double 或格式化后的展示文本参与金额计算。文章不仅通过多个实际案例说明了不同 locale、货币精度与 rounding rule 带来的潜在问题,也进一步引出了 Type-Driven Design 在业务建模中的价值。


AndroidX ViewModel 是 KMP 项目的最佳选择吗?(Is AndroidX ViewModel the best choice for KMP projects?)

对于 Swift 开发者来说,ViewModel 通常只是一个承载视图状态与交互逻辑的对象。在 SwiftUI 中,它可以是一个 @Observable 类型,也可以只是一个围绕 View 状态组织起来的普通引用类型;任务生命周期往往交给 .task、视图层级或其他更贴近 SwiftUI 的机制处理。但当 Swift 开发者进入 Kotlin Multiplatform 或 Android 生态时,很容易低估 AndroidX ViewModel 所承担的职责:它不仅是 MVVM 中的“ViewModel”,同时也是 Android 生命周期、ViewModelStore 与 coroutine scope 的一部分。

Gustavo Fão Valvassori 从 Android ViewModel 的历史背景讲起,解释它为何会与 Activity / Fragment 的重建、配置变化和 viewModelScope 深度绑定,并进一步讨论当这一套机制被带入 KMP 项目后,在 iOS 原生 UI 中可能产生的摩擦。对于 Swift 开发者而言,文章最有价值的地方并不在于是否应该直接采用 AndroidX ViewModel,而是帮助我们理解:同样叫作 ViewModel,在不同平台上可能承载着完全不同的架构责任。


如何优雅地废弃自定义兼容 API (Deprecating your own convenience API)

为了兼容不同的系统版本,或为新旧系统提供一致的行为与体验,开发者通常会通过统一封装、为旧系统补齐兼容实现,或者用自定义 modifier 抹平不同系统之间的行为差异。但随着应用最低支持版本不断提高,其中很多代码最终都会悄悄变成没人敢删的“死代码”。Majid Jabrayilov 以一个非常典型的 SwiftUI 场景为例,利用 @available(..., deprecated:, obsoleted:) 标记这些“过渡 API”的生命周期。当最低部署版本提升后,编译器会自动将这些兼容层标记为 warning 甚至 error,从而提醒开发者及时移除。

某种意义上,@available 不仅是在管理 API 的可用性,也是在管理“技术债的保质期”。


让 SwiftUI View 在截图中隐藏

SwiftUI 一直缺少一个看似简单、但其实相当实用且底层的能力:让某个 View 在屏幕上正常显示,但在截图、录屏、投屏或其他系统捕获路径中被隐藏。公开 API 提供的更多是“捕获状态检测”,而不是真正意义上的捕获隐私保护。OpenSwiftUI 的开发者 Kyle Ye 从公开 API、secure UITextField 技巧、CALayer.disableUpdateMask 私有行为,一路分析到 SwiftUI 内部 DisplayList 与 RendererEffect 的工作机制,最终实现了一个真正 SwiftUI 风格的视图扩展。它不需要把 SwiftUI 内容塞进 secure text field subtree,而是直接利用 SwiftUI 内部已经存在的 screencaptureProhibited rendering property,将对应 layer 从 capture output 中移除。


Windows 平台 Swift 公共符号服务器上线 (A Public Symbol Server for Swift on Windows)

The Browser Company 近日公开了 Swift on Windows 的 Symbol Server。通过该服务,开发者可以在 WinDBG、Visual Studio、Windows Performance Analyzer 等 Windows 原生调试工具中,直接获取 Swift Runtime 与标准库的 PDB 符号文件,从而获得完整的符号化调用栈与更清晰的崩溃分析能力。

这篇文章真正有趣的地方,并不仅仅是如何配置 Symbol Server,而是它系统梳理了 Swift 在不同平台上的调试基础设施:从 Mach-O、ELF、PE/COFF 等对象文件格式,到 DWARF 与 PDB/CodeView 两套调试信息体系,再到 Darwin、Linux 与 Windows 在 symbol 管理上的不同设计。对于长期只在 Apple 平台开发的 Swift 开发者来说,这篇文章会让你第一次比较直观地意识到:Swift 想真正成为跨平台语言,仅仅“能够编译运行”远远不够,它还需要深入融入目标平台原生的调试体系与工具链生态。


在 AI 容器中用 Swift 替代 Bash (Replacing Bash with Swift in an AI Harness)

随着 AI Agent 工具的发展,“让模型执行代码”正在逐渐从简单的 terminal 调用演变成新的运行时设计问题。这篇文章记录了一个相当有趣的实验:Alejandro Martinez 尝试在 AI Harness 中,用可嵌入的 Swift 解释器替换 Bash,让模型不再生成 shell script,而是直接生成并执行 Swift 代码。结合 SwiftScript 与 ShellKit,展示了如何通过嵌入式解释器、受控工作目录与 sandbox,为 LLM 提供一个更可控的 Swift Runtime。

SwiftScript 是一个相当有意思的实验性项目,由 Oliver Drobnik 创建:一个完全由 Swift 编写、可嵌入应用的 Swift 解释器。它基于 swift-syntax 解析并直接执行 Swift AST,而不是通过 swiftc 编译生成二进制,因此更接近 JavaScriptCore 或 Python Runtime 这类“嵌入式脚本运行时”。


对 SwiftUI 的纠结与期许 (Hanging on the Promise of SwiftUI)

SwiftUI 发布七年后,我们似乎仍处于一种微妙的状态:它已经足够重要,重要到几乎所有 Apple 平台开发都无法绕开它;但它又依然不够完整,很多稍微复杂一点的真实应用,最终仍不得不重新回到 AppKit / UIKit。Patrick McConnell 在这篇文章中,集中表达了他对 SwiftUI 的复杂情绪:它很好,好到让人愿意持续投入;但也正因为如此,当它在扩展性、完整性与底层能力上始终“差一点”时,才会显得格外令人沮丧。

我一直觉得,只有苹果在第一方应用上真正全力、大规模地使用 SwiftUI,SwiftUI 才可能进入更快的成熟期。第三方开发者不应成为框架的小白鼠,而应该优先享受到框架带来的便利与稳定。

工具

App Store & Google Play Screenshots Generator

App Store & Google Play Screenshots Generator 是一个面向 AI coding agent 的商店截图生成 skill,由 Parth Jadhav 开发。它不是简单给你一套截图模板,而是把“收集产品信息 → 组织卖点文案 → 选择视觉风格 → 本地编辑 → 批量导出尺寸”的流程做成了一个可执行工作流。

项目会为当前目录生成一个 Next.js + ShadCN 的本地编辑器,支持拖拽排序、在线修改标题、上传真实截图、切换 iOS / Android 设备,并将项目状态保存为可版本化的 app-store-screenshots.json。它最值得借鉴的地方,是把商店截图明确视为广告素材:每张图只表达一个卖点,优先呈现用户收益、情绪和痛点,而不是机械展示 UI。

对独立开发者来说,这类工具很实用。它不能替代最终的审美判断和平台规则核对,但能把上架截图制作中大量重复、琐碎、容易出错的部分收拢到一个 agent 友好的本地流程里。


Editorio: macOS 原生 Markdown 与代码编辑器

Lovre Crncevic 因为不甘忍受 Electron 编辑器的臃肿,以及各类笔记软件泛滥的订阅制,决定为自己打造一款纯原生的轻量级 Markdown 与代码编辑器。

Editorio 使用 Swift + AppKit 构建原生界面,并使用 Rust 构建底层文本引擎以提升性能,支持 Markdown 实时预览、项目侧边栏、minimap、主题切换,以及多种编程语言的语法高亮。作者表示,Editorio 典型内存占用约 40MB,而冷启动与文件读取则保持在毫秒级响应。某种程度上,它让人重新想起了过去那些“小而快”的经典 Mac 应用。

Lovre 承诺,该应用永久免费,并在 Reddit 上的讨论中表示:等项目代码进一步整理后,他计划将 Editorio 在 GitHub 上开源。

5.1 版本对非英文的输入支持有问题,我已反馈作者。5.2 版本(审查中)中已解决。

活动

2026 年度 Swift 官方导师计划 (Swift Mentorship Program 2026)

Swift Mentorship Program 是 Swift 社区近年来持续举办的一项官方 Mentorship 活动,旨在帮助更多开发者真正参与 Swift 开源生态。项目通过导师配对的方式,让参与者在 10 周时间内,与经验丰富的 Swift 开发者共同完成一次真实的开源贡献:既可以是 Swift 编译器本身,也可以是任意使用 Swift 编写的开源项目。相比单纯的线上教程或 issue 列表,这种“带着新人真正完成一次贡献”的方式,显然更接近真实的开源协作体验。

该项目最早由 Swift Contributor Experience Workgroup 推动,近几年已经逐渐成为 Swift 社区固定活动之一。除了技术学习外,它也承担着降低社区参与门槛、培养新贡献者以及加强社区群体连接的作用。官方还特别鼓励 Women in Swift、Black in Swift 与 Pride in Swift 等社区成员参与其中。

2026 年度活动已经开启,Mentor 与 Mentee 的报名时间分别从 5 月与 6 月开始,7 月正式进入为期 10 周的 Mentorship 周期。


WWDC26 派对之夜:城市、场次和报名信息

WWDC26 主题演讲将于当地时间 06 月 08 日 10:00 在库比蒂诺举行。

作为连续多年入选 Apple 开发者网站 WWDC 社区活动的 WWDC.playground,由 SwiftGG 发起的 WWDC26.playground 线下观影派对将于北京时间 06 月 08 日晚间至 06 月 09 日凌晨,在北京、上海、广州、深圳、杭州和青岛等多座城市举办。

入场时间和报名费用等形式,在不同城市/场次间可能有所不同,请以实地情况为准。👉 各地报名方式

往期内容

💝 支持与反馈

如果本期周报对你有帮助,请:

  • 👍 点赞 - 让更多开发者看到
  • 💬 评论 - 分享你的看法或问题
  • 🔄 转发 - 帮助同行共同成长

🚀 拓展 Swift 视野


从社区路标到生态基石:Dave Verwer 的新篇章 -- 肘子的 Swift 周报 #137》 是转载文章,点击查看原文


相关推荐


C 标准库 - <assert.h>
lsx2024062026/5/4

C 标准库 - <assert.h> 引言 在C语言编程中,错误检测和处理是保证程序稳定性和可靠性的重要环节。《assert.h》头文件提供了用于在开发过程中进行断言检查的函数,这些函数在编译时默认是开启的。本文将详细介绍C标准库中<assert.h>的相关内容,包括其使用方法、作用以及在实际开发中的应用。 断言简介 断言(assertion)是一种用于在程序运行时检测错误的方法。当断言的条件为假时,程序将终止运行,并打印出错误信息。这使得开发者能够快速定位并修复代码中的问题。 <assert.


我学习到的结构化提示词三技巧
前端工作日常2026/4/25

提示词框架(Prompt Framework) 在大模型中,设计一组清晰且结构化的提示词,用以引导模型生成特定类型的输出。 它有助于提高生成的准确性、相关性和质量,确保模型的回应更符合用户的需求。 一个简单的结构化提示词来改写我们的问题输入 在 Coze 上创建一个智能体,在“人设与回复逻辑”那里输入: 你是一位曾经就职于互联网头部企业的资深软件工程师和IT教育专家,擅长用通俗易懂的语言来给初学者讲解! 根据用户的输入,整理一门入门级技术课程的大纲,要求: 1.注重基本概念和原理,为学员打下


Spring Boot一键限速:守护你的接口“高速路”
小码哥_常2026/4/16

Spring Boot一键限速:守护你的接口“高速路” 为什么网络限速很重要 在当今互联网应用广泛的时代,网络限速绝非多此一举,而是保障系统稳定、高效运行的关键策略。想象一下电商平台举办秒杀活动,成千上万的用户在同一时刻疯狂点击抢购按钮,倘若没有网络限速机制,瞬间涌入的海量请求可能会直接把服务器 “压垮”,导致整个系统瘫痪,无论是正常用户的购买请求,还是服务器后续的订单处理,都无法顺利进行。 再看看视频平台,每到热门剧集首播或者大型体育赛事直播时,大量用户同时在线观看,对视频资源的请求量呈爆发式


从源码泄露看AI Agent未来:深度对比Claude Code原生实现与OpenClaw开源方案
半行代码2026/4/8

Claude Code 是 Anthropic 推出的终端 AI 编程助手。与普通的聊天式 AI 不同,它直接在终端里工作,能够读取代码、执行命令、修改文件、管理 Git 操作。阅读其源码后,可以从 Agent 循环、上下文工程、提示词工程和多 Agent 协同几个维度梳理出它的设计脉络。 整体架构 Claude Code 的核心是一个典型的 ReAct Agent 架构,入口是 query() 函数,它内部委托给 queryLoop() —— 一个通过 while(true) 无限循环驱动的


OpenClaw 接入 Telegram:BotFather 实战
七夜zippoe2026/3/31

目录 摘要1. 引言2. Telegram Bot API 介绍2.1 什么是 Telegram Bot API2.2 Bot 与普通用户的区别2.2 Bot 的核心特性2.3 API 通信模式2.4 消息类型与格式2.5 API 请求示例 3. 通过 BotFather 创建机器人3.1 BotFather 简介3.2 创建 Bot 的详细步骤3.3 Bot 配置选项3.4 配置命令示例3.5 Bot 头像与品牌设置3.6 多语言支持 4. 获取 Bot Token 与安全实践4


Agent Skills:让 AI 一次学会、永远记住的能力扩展方案
草捏子2026/3/23

导语 程序员阿明最近发现一个让他崩溃的事——他的 AI 助手明明昨天才学会怎么写周报,今天换个对话窗口又全忘了。"这 AI 跟金鱼一样,7 秒钟记忆。"他跟同事吐槽。直到同事给他发了一个叫 Agent Skills 的东西,从此阿明再也没有复制粘贴过那段周报格式说明。 Agent Skills 到底是什么?它解决了什么痛点?怎么用?今天我们彻底搞明白。 1. 从"金鱼记忆"到"活的员工手册" 先讲阿明的故事。他每次让 AI 写周报,都要先花十分钟描述格式:分"本周完成""进行中""下周计划"三个


微信小程序开发01:XR-FRAME的快速上手
海石2026/3/15

一、前言 最近要基于微信小程序实现一个具备AR功能的APP,在进行技术选型时,发现小程序本身自带了XR-FRAME这个框架, 从描述上来看: 没有比它更“合适”的,用来进行AR功能开发的框架了 本来想使用 Vibe Coding 无痛完成开发,但是却在实际使用中,发现大模型写不太来 wxml 和<xr-...>相关的代码 于是在此开了一个系列文章,用来记录我遇到的坑 😓 二、从 1 到 1.x 个人的建议,一开始不从0到1,而是从1到1.x,即基于现有的demo二次开发一个 否则,如果想在


ubuntu + Docker + piper + 实现TTS自由
Android小码家2026/3/6

文章目录 前言启动脚本启动容器模型下载使用方式 前言 为什么要使用这种框架,原因很简单,分离环境和工作区间,因为我不可能只跑一个应用,因此docker就是最好的选择。 背景是实现文字转语音的简单AI功能,实现转化自由,为什么叫ai因为它集成了hugeface的语音ai模型。 启动脚本 # 使用 Ubuntu 22.04 LTS(你指定的版本) FROM ubuntu:22.04 ENV DEBIAN_FRONTEND=noninteractive # 安


AI 原生应用开源开发者沙龙·深圳站精彩回顾 & PPT下载
阿里云云原生2026/2/26

作者:盈楹 近日,AI 原生应用开源开发者沙龙·深圳站圆满落幕。本场活动吸引了 140+ 名技术从业者深度参与,聚焦 AI 原生应用架构领域的开源技术与落地实践, 围绕 AgentScope、RocketMQ、HiMarket、Higress、LoongSuite、Agent 技术实践等议题展开深度分享,并设置了动手实操环节。 关注「阿里云云原生」公众号,后台回复:0210 免费获得深圳站讲师 PPT 合辑 精彩回顾 议题一:AgentScope:迈向 Agentic 智能体应用丨高大伟(大玮)


TypeScript 类型体操练习笔记(二)
我不吃饼干2026/2/18

进度(90 /188) 其中标记 ※ 的是我认为比较难或者涉及新知识点的题目 刷题也许没有什么意义,但是喜欢一个人思考一整天的灵光一现,也喜欢看到新奇的答案时的恍然大悟,仅此而已。 42. Medium - 1130 - ReplaceKeys ※ 实现一个类型 ReplaceKeys,用于替换联合类型中的键,如果某个类型不包含该键则跳过替换。该类型接受三个参数。 一开始我只是想这么写,我想分布式条件类型 + Pick + Omit 来实现。 type ReplaceKeys<U, T, Y>

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读