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

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

去 Apple Store 修手机 - 肘子的 Swift 周报 #107

父亲的 iPhone 16 突然无法充电。预约后,我前往 Apple Store 送修。工作人员确认问题后,为我提供了一部 iPhone 14 作为备用机,并协助完成数据转移。十二天后(期间正好赶上一个长假),设备维修完成——更换了 Type-C 接口,同时还免费更换了一块新电池。体验一如既往地令人满意。

2025/10/20
articleCard.readMore

高通收购 Arduino:历史的轮回 - 肘子的 Swift 周报 #106

上周,高通宣布收购知名开源硬件平台 Arduino,并同步发布首款搭载自家芯片的 Arduino UNO Q。与经典版本不同,UNO Q 采用了“双脑”架构——由运行 Linux 的 Qualcomm Dragonwing 处理器负责高性能计算,同时保留 STM32 微控制器以执行实时控制任务。这种设计无疑强大,却也悄然偏离了 Arduino 一直以来“简单、低成本、易上手”的初心。

2025/10/13
articleCard.readMore

Sora 2:好模型,但未必是好生意 - 肘子的 Swift 周报 #105

一周前,OpenAI 发布了 Sora 2 模型,并同步推出了带有社交平台属性的 Sora 应用。目前,用户仅能通过 iOS 应用使用该模型生成视频。无论在视觉细节、人物形象、环境纹理,还是声画同步方面,Sora 2 相较早期版本都有显著提升。

2025/10/6
articleCard.readMore

苹果正在为系统级支持 MCP 做准备 - 肘子的 Swift 周报 #104

根据 9TO5Mac 的报道,苹果正在为其生态系统添加 MCP(Model Context Protocol)支持,以实现智能体 AI 功能。其实现路径与我们在周报 #077 中的设想十分吻合:通过开发者熟悉的 App Intents 框架进行系统级集成,既保持了苹果一贯追求的“可控、安全、完整”用户体验,又巧妙规避了让普通用户直接面对复杂 MCP 配置的门槛。

2025/9/29
articleCard.readMore

Swift 6.2 来了 - 肘子的 Swift 周报 #103

在 Swift 6.0 发布一年后,Swift 6 迎来了第二个重要版本更新。除了备受关注的 Default Actor Isolation 外,Swift 6.2 还带来了诸多实用的新功能。

2025/9/22
articleCard.readMore

用 MainActor.assumeIsolated 解决旧 API 与 Swift 6 适配问题

尽管 Swift 提供严格并发检查已有一段时间,但许多苹果官方 API 仍未对此进行充分适配,这种情况可能还会持续相当长的时间。随着 Swift 6 的逐步普及,这个问题变得愈发突出:开发者一方面希望享受 Swift 编译器带来的并发安全保障,另一方面又对如何让代码满足编译要求感到困惑。本文将通过一个 NSTextAttachmentViewProvider 的实现案例,介绍 MainActor.assumeIsolated 在特定场景下的妙用。

2025/9/3
articleCard.readMore

Swift 6: Sendable、@unchecked Sendable、@Sendable、sending and nonsending

Swift 的并发模型引入了众多关键字,其中一些在命名和用途上颇为相似,容易让开发者感到困惑。本文将对 Swift 并发中与跨隔离域传递相关的几个关键字:Sendable、@unchecked Sendable、@Sendable、sending 和 nonsending 进行梳理,帮助大家理解它们各自的作用和使用场景。

2025/8/6
articleCard.readMore

Default Actor Isolation:好初衷带来的新问题

尽管 Swift 严格并发检查的初衷是好的,但对于很多单线程场景来说,却明显增加了开发者的负担。开发者不得不在代码中添加一些并不必要的 Sendable、@MainActor 等声明,只为了满足编译器的要求。Swift 6.2 新增的 Default Actor Isolation 功能将极大地改善这种状况,减少不必要的样板代码。本文将对 Default Actor Isolation 功能进行介绍,并指出在使用该功能后需要注意的一些情况。

2025/7/30
articleCard.readMore

Core Data 迁移事故复盘:那些被忽视的隐藏陷阱

相比一些开源框架,Core Data 和 SwiftData 虽然有苹果的官方背书,但它们的“黑盒”特性在出现异常时常令开发者束手无策,难以及时定位问题并找到有效解决方案。本文记录了一次因 Core Data 数据模型迁移导致的应用启动超时事件,分享解决方案,并深入剖析背后的成因。

2025/7/23
articleCard.readMore

Icon Composer 见招拆招

新的 Liquid Glass 风格发布之后,苹果随即提供了用于制作符合 Liquid Glass 标准图标的 Icon Composer。从苹果的介绍来看,Icon Composer 使用非常简单明了,基本上分层把图片放进去即可,但实际使用上还是有一些细节需要小心。Megabits 以他的应用图标为例,简要的介绍一下使用过程中遇到的问题。

2025/7/16
articleCard.readMore

在 SwiftUI 中,如何判断 Text 是否被截断?

Text 在 SwiftUI 中大量被使用,与 UIKit/AppKit 中对应的组件相比,Text 无需配置,开箱即用,但这也意味着开发者丧失了更多对其的控制能力。在本文中,我们将通过一个实际案例来展示,如何用 SwiftUI 的方式来完成一些看似"不可能"的任务:在一堆给定的视图中,找出第一个文本未被截断的,并以此作为需求尺寸。

2025/7/9
articleCard.readMore

与 AI 共舞:我的 Claude Code 一月谈

转眼间,我使用 Claude Code 已经整整一个月了。这段时间里,它迅速成为了开发者们的新宠,关于 Claude Code 的讨论充斥着我的社交媒体时间线。恰好有网友在 Discord 上让我聊聊 Claude Code,借此机会,我想梳理一下这段时间的使用感受,以及过去两年中 AI 为我的开发工作带来的便利与思考。

2025/7/2
articleCard.readMore

NotificationCenter.Message:Swift 6.2 并发安全通知的全新体验

NotificationCenter 作为 iOS 开发中的经典组件,为开发者提供了灵活的广播——订阅机制。然而,随着 Swift 并发模型的不断演进,传统基于字符串标识和 userInfo 字典的通知方式暴露出了诸多问题。为了彻底解决这些痛点,Swift 6.2 在 Foundation 中引入了全新的并发安全通知协议。它充分利用 Swift 的类型系统和并发隔离特性,让消息的发布与订阅在编译期就能得到验证,从根本上杜绝了“线程冲突”和“数据类型错误”等常见问题。

2025/6/25
articleCard.readMore

探索 SwiftUI ZStack 中的 layoutPriority 奥秘

在 SwiftUI 的布局体系中,layoutPriority() 这一修饰器看似并不起眼,却在关键时刻能左右视图的尺寸分配。大多数开发者都了解它在 VStack 和 HStack 中为子视图争取更多空间的“魔法”能力——优先级越高,越能从拥挤的布局中脱颖而出。但你是否注意过,layoutPriority 在 ZStack 中也能大显身手?但它的运作机制与 VStack/HStack 完全不同。本篇文章将带你深入剖析这一鲜为人知的特性,演示如何在 ZStack 中应用布局优先级。

2025/6/18
articleCard.readMore

WWDC 2025 初印象:意料之中,预想之外

WWDC 2025 如期而至。苹果一次性发布了所有的 Session 视频,让开发者得以在第一时间了解自己感兴趣的新特性和新 API。经过两天的快速浏览,我对本届 WWDC 2025 的初步印象为:意料之中,预想之外。

2025/6/11
articleCard.readMore

【小贴士】使用 Swift-Syntax 的预构建版本,加快编译速度

在 Swift 6.1.1+ 中启用预构建 Swift-Syntax,可显著加快宏项目的编译速度,提升开发效率,仅需简单配置 Xcode 或命令行参数

2025/6/6
articleCard.readMore

【小贴士】将访问权限控制在 Swift Package 内

Swift 5.9 推出 package 访问修饰符,帮助开发者限制 API 在多个 Target 间共享但不对外暴露,提升模块化项目的封装性与安全性

2025/5/8
articleCard.readMore

【小贴士】解决在 Monorepo 项目中 SwiftLint 配置文件无效

在 Swift Monorepo 中确保 SwiftLint 正常工作,需在 VSCode 设置中明确配置文件路径,并指定需要 lint 的源码目录

2025/4/24
articleCard.readMore

【小贴士】如何在 VSCode/Cursor 中测试 Core Data 代码

在 VSCode 或 Cursor 中测试 Core Data 时,需使用 Xcode 工具链并手动将 xcdatamodeld 转换为 momd,以确保单元测试正常运行。

2025/4/15
articleCard.readMore