肘子的 Swift 记事本 | Fatbobman's Blog

中文首页|肘子的 Swift 记事本|Fatbobman's Blog,分享与 Swift、SwiftUI、Core Data、Swift Data 有关的内容,也会涉及开发工具、AI 等其他内容。全部文章均为原创,转载需联系本人

当每一次写入都有了新价格 - 肘子的 Swift 周报 #144

最近,OpenAI 的 Codex 被发现存在一个日志写入问题:程序会持续向本地数据库写入大量日志,导致文件不断膨胀,并产生远超正常水平的磁盘写入。类似的 Bug 过去并不少见。放在几年前,人们大概只是删除文件、重启应用,然后等待下一个版本修复。

2026/7/13
阅读更多

当 Linux 成为“空气”:容器、Agent 与不再重要的“桌面之争” - 肘子的 Swift 周报 #143

一周前,微软推出了无需 Docker 的 Windows 11 原生容器支持的公开预览;再结合苹果不久前发布的容器管理器(container)1.0 正式版,一时间,两大主流桌面操作系统都将 Linux 容器深度集成为了系统的一等公民。

2026/7/6
阅读更多

两个 SwiftUI 动画 Bug 排查小记

易用的动画一直是 SwiftUI 的主要特色之一。但声明式框架的特性是一把双刃剑:动画一旦出现异常,排查往往比命令式框架更棘手。本文记录了过去两周里,我在开发中遇到的两个与 SwiftUI 动画有关的 Bug,以及对应的排查过程。

2026/7/1
阅读更多

SPI 加入 Apple,Swift 迈向自举 - 肘子的 Swift 周报 #142

几天前,Swift Package Index(SPI)宣布已加入 Apple。双方将共同建设一个面向 Swift 开发者的综合 package registry;与此同时,SPI 现有的包发现、兼容性检查、文档托管等能力仍会继续提供,包作者在短期内也无需调整现有的发布流程。

2026/6/29
阅读更多

Swift 还让你 Excited 吗? - 肘子的 Swift 周报 #141

上周,Reddit 上一篇题为《Is anyone else excited by Swift progress as the language?》的帖子引发了不少讨论。WWDC 2026 上,Apple 明确表示,Swift 已被用于 WebKit 关键组件、QUIC 网络栈、字体渲染、驱动与固件。发帖者据此认为,Swift 正在向核心操作系统内核迈进,并将这一幕视为 2014 年高级系统编程语言承诺的兑现。

2026/6/22
阅读更多

从 Size Class 到可用空间,horizontalSizeClass 还可靠吗?

从 WWDC 26 开始,iPhone 应用在 iPhone Mirroring 到 Mac 时,其窗口尺寸将支持自由调整。这次更新带来的影响远不止“iPhone 应用可以调整尺寸”这么简单。它正在改变许多开发者长期以来对布局系统的理解。这种变化究竟是一次突然出现的转向,还是 Apple 多年布局下的必然演进?本文将对此进行探讨。

2026/6/17
阅读更多

WWDC 26:AI 帮你看完了,然后呢? - 肘子的 Swift 周报 #140

随着 AI Agent 工作流的普及,今年不少开发者开始让 AI 代劳汇总、筛选重点,以更快的节奏消化 WWDC 上推出的新能力。苹果也很配合——一次性放出全部 Session、文字稿与示例代码,进一步降低了 AI 处理这些内容的门槛。

2026/6/15
阅读更多

Core Data + Observation:从属性级响应到心智解放

Observation 框架的推出,让 SwiftUI 的状态响应从对象级进一步细化到属性级,显著缓解了许多由粗粒度观察带来的无效刷新问题。我近期在 Core Data Evolution 中探索并实现了对 Observation 的支持,赋予 NSManagedObject 属性级的精确观察能力。本文将围绕这一能力的动因、使用方式、实现思路、工程挑战以及开发过程中的一些取舍展开讨论。

2026/6/3
阅读更多

用自定义 Layout 化解 SwiftUI List 的行高与间距跳变

动画的声明式表达是 SwiftUI 的核心优势之一。但在某些场景里,结果并不总像我们期待的那样平滑。一个典型例子是:当 `List` 行内的内容高度发生动态变化——副标题从空变为非空、文本因更新而导致行数变化——系统自带的布局引擎往往无法给出连续的过渡动画。本文从这个现象出发,逐层拆解原因,给出一种完全基于 SwiftUI 原生能力的解决方案;也借这条路径回看 SwiftUI 在布局机制层面的几个关键约束。

2026/5/27
阅读更多

CDE:一次让 Core Data 更像现代 Swift 的尝试

在上一篇文章中,我聊了聊 Core Data 在当下项目中的一些现实处境。在本文中,我将介绍我的一个实验性项目 Core Data Evolution,探索能不能让 Core Data 在现代 Swift 项目中以一种更自然的方式继续存在下去?

2026/3/18
阅读更多

2026 年,为什么我仍在思考 Core Data

Core Data 在 2026 年仍有大量存量项目,但它与现代 Swift 的并发模型、类型安全和代码表达之间的错位越来越明显。本文梳理三个核心问题,并思考在不放弃 Core Data 的前提下实现现代化改造的可能。

2026/3/11
阅读更多

跨域传递 NSManagedObjectContext 为什么在 Swift 6.2 中不再报错?真正的变化不在编译器

当同一段与并发有关的代码在 Xcode 16 中无法通过,却能在 Xcode 26 中顺利编译时,你第一时间会想到什么?我最初的判断是编译器进化了,但现实并没有这么简单。本文将记录我最近遇到的一次有意思的排查过程:从测试失败出发,一步步追到 Core Data 的 SDK interface,最终发现,问题的关键并不完全在 Swift 编译器本身,而在 NSManagedObjectContext 被导入 Swift 的方式已经发生了变化。

2026/3/4
阅读更多

Xcode 26.3 + Claude Agent:模型替换、MCP、Skill 与自适应配置

出乎意料,Xcode 26.3 版本中苹果直接提供了对 Claude Code/Codex 的支持。自此,开发者终于可以在 Xcode 中优雅地使用原生 AI Agent 了。 这两天我针对新版本进行了一系列尝试,包括配置 MCP、以及编写自适应的 `CLAUDE.md`。本文将以 Claude Code 为例,分享一些文档之外的技巧。

2026/2/6
阅读更多

macOS 录屏软件开发实录:从像素抓取到元数据重现

视频正在取代文字成为主流的表达方式,而好工具是创作的加速器。macOS 录屏软件 ScreenSage Pro 的独立开发者 Sintone 分享了从像素抓取到元数据重现的全过程。从屏幕录制、元数据捕获,到高性能视频合成,他详述了开发中的挑战与解决方案。

2026/2/4
阅读更多

isolated(any) 与 #isolation:让 Swift 闭包自动继承隔离域

Swift 6 为并发引入了许多新功能与关键字。虽然其中不少内容在日常开发中可能鲜少用到,但一旦遭遇特定场景,若对这些新概念缺乏了解,即便有 AI 辅助也可能陷入僵局。本文将通过一个在开发测试中遇到的实际并发问题,来介绍如何利用 **`@isolated(any)`** 以及 **`#isolation`** 宏,实现函数的隔离域继承,从而让编译器自动推断闭包的运行环境。

2026/1/21
阅读更多

【小贴士】为什么父视图无法修改子视图的 @State

在 init 中给 @State 赋值后,为什么父视图更新数据时子视图无反应?本文解析 SwiftUI 状态管理的生命周期机制与正确的数据传递方式。

2025/12/18
阅读更多

【小贴士】Partytown 实战:修复 GTM 自定义事件与 dataLayer 失效问题

使用 Partytown 优化性能后,GA4 和 GTM 事件无法上报?详解如何在 Astro 中配置 forward 属性,让主线程的 gtag 和 dataLayer.push 正常通讯。

2025/12/8
阅读更多

【小贴士】Swift 6 编译加速:启用 Swift-Syntax 预构建 (Prebuilts)

Swift 宏编译太慢?在 Swift 6.1+ 中启用 Swift-Syntax 预构建 (Prebuilts),一行命令显著减少 Xcode 构建时间,提升开发效率。

2025/6/6
阅读更多

【小贴士】Swift 模块化:使用 package 关键字实现 Target 间安全共享

如何在 Swift Package 的多个 Target 间共享代码却不暴露给外部?详解 package 访问修饰符,填补 internal 与 public 间的权限空白,提升模块封装性。

2025/5/8
阅读更多

【小贴士】Monorepo 实战:解决 VSCode/Cursor 中 SwiftLint 配置失效问题

在 VSCode 或 Cursor 中开发 Swift Monorepo 项目时,SwiftLint 无法读取根目录配置?通过设置 configSearchPaths 和明确包含路径,轻松实现多包共享 Lint 规则。

2025/4/24
阅读更多

【小贴士】VSCode/Cursor 测试 Core Data:手动编译 xcdatamodeld 指南

在 VSCode/Cursor 中运行 Core Data 单元测试报错?这是因为 xcdatamodeld 未被自动编译。学习配置 Xcode 工具链并使用 xcrun momc 手动生成 momd 文件,快速修复测试环境。

2025/4/15
阅读更多