# 老司机 iOS 周报 #333 | 2025-04-28

![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/333.jpg?raw=true)
老司机 iOS 周报，只为你呈现有价值的信息。

你也可以为这个项目出一份力，如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们，我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。

下周就是五一劳动节了，老司机周报轮休一周，提前祝大家劳动节快乐！

## 新闻

### [重磅上线 | 一次性购买通知 ONE_TIME_CHARGE 即将正式发布 / A new App Store Server Notification type will soon be available](https://developer.apple.com/documentation/appstoreservernotifications/notificationtype)

[@SeaHub](https://github.com/SeaHub)：自 2024/06/10 沙箱环境首发以来，该通知历经大半年的稳定性验证，现即将进入现网发布阶段。以下内容值得我们重点关注：

1. 全商品类型覆盖能力  
突破原有仅自动续期订阅型存在后台发货通知的限制。新通知囊括消耗型商品、非续期订阅型商品及非消耗型商品等所有类型，彻底解决一次性购买场景的后台通知缺位问题

2. 客户端依赖解耦  
通过一次性购买通知，针对发货阶段，我们不再需要依赖客户端与服务端通信。客户端不再作为发货主路径，实现发货逻辑的解耦

3. 实时发货闭环  
结合一次性购买通知与 appAccountToken 订单透传字段，可构建起媲美国内主流支付平台（微信支付 / 支付宝）的实时发货体系

该通知于 2025/05/27 正式上线，推荐大家优先接入。我们通过一次性购买通知更加优雅的处理订单发货场景，构建更健壮的业务履约体系

## 新手推荐

### 🐎 [Using singletons in Swift 6](https://www.donnywals.com/using-singletons-in-swift-6/)

[@Smallfly](https://github.com/iostalks)：本文介绍了 Swift 6 中单例模式因并发安全性触发的编译错误及解决方案。针对「全局可变状态不安全」和「非 `Sendable` 类型共享状态」等典型问题，文章提出多场景应对策略：通过 `MainActor` 隔离属性或类型、将共享实例重构为 `actor`、使用 `Sendable` 协议确保类型安全，并谨慎使用 `nonisolated(unsafe)` 或 `@unchecked Sendable` 作为临时过渡。作者强调遵循 Swift 6 规范的同时，平衡代码安全性与迁移成本。

### 🐎 [Using Swift ’ s defer keyword within async and throwing contexts](https://www.swiftbysundell.com/articles/using-defer-within-async-and-throwing-contexts/)

[@阿权](https://github.com/bqlin)：`defer` 常用在代码块（花括号）作用域结束时执行代码。我们常常用来清理在当前作用域内创建的资源或其他上下文，如配置 lock-unlock。这一思想在 async 方法中同样适用，`defer` 为异步流程提供一个处理成功或失败绝佳的节点，类似异步的 finally。不过 `defer` 会打破传统的流程控制流顺序，带来便利的同时也会削弱一些代码可读性。详细可阅读原文，文章从这几方面介绍了 `defer` 的应用：

1. `defer` 关键字基础介绍。
2. 在异常抛出场景中的应用。
3. 在异步场景中的应用。

## 文章

### 🌟 🐕 [Dynamically Constructing Generic Types in Swift](https://kyleye.top/posts/dynamic_generic/)

[@JonyFang](https://github.com/jonyfang): 在 Swift 这种强类型语言里，运行时拼泛型一直是个痛点 —— 比如我们想动态生成 `Optional<T>`、`Array<T>` 这样的类型，通常只能在编译期确定。
- 作者先带着扒了扒 Swift 元数据（Metadata）的底层结构，包含 `Metadata`、`ProtocolDescriptor`、`ConditionalProtocolDescriptor` 等核心数据布局，并封装成易用的辅助类型，帮你在运行时拿到任意类型的信息和协议类型。
- 接着用 SwiftUI 的 `_ConditionalContent<TrueContent, FalseContent>` 举例，演示如何调用元数据访问器函数，动态组装出三种常见场景下的泛型：`optional`、`either`、`atom`，整个过程零配置、可复用。  
- 最后给出一个基于 Swift Runtime 的完整实现方案，从元数据解析、函数指针调用到类型实例化全流程演示，并对该方案在 ABI 稳定性和未来演进方向上的局限性给出了思考。  

如果你在做框架或底层库，需要在运行期才知道类型，或者想探索 Swift ABI ／ Runtime 的更多玩法，这篇文章绝对值得一读。

### 🐕 [20 years of Git. Still weird, still wonderful.](https://blog.gitbutler.com/20-years-of-git/)

[@AidenRao](https://weibo.com/AidenRao)：这篇文章回顾了 Git 诞生 20 周年的历程，最初由 Linus 为解决 Linux 内核协作问题开发，以高效跟踪代码快照为核心设计。从仅 7 个底层命令的"内容跟踪器"起步，逐步整合社区贡献（如 rebase、log 功能），演变为分布式版本控制系统。GitHub 的诞生及其章鱼猫形象推动普及，使其成为全球开发基石。20 年来核心数据结构和"愚蠢但极快"的理念未变，持续支撑从代码管理到内容分发的创新（如 GitButler），奠定现代软件开发基础设施地位。

### 🐕 [SwiftFiddle/swiftregex: Swift Regex is an online tool to learn, build and test Swift Regex Regex and Regex Builder.](https://github.com/swiftfiddle/swiftregex)

[@Barney](https://github.com/BarneyZhaoooo)：**Swift Regex** 是开源在线工具，支持 Swift 正则表达式及 Regex Builder 的实时测试与调试，提供语法高亮和错误定位。基于 Swift、JavaScript 及 Vapor 框架开发，采用 MIT 协议，含 Docker 部署配置。支持命名捕获组、自动化依赖更新及安全策略，适合开发者快速验证正则逻辑。

### 🐕 [Creating MCP Servers in Swift](https://www.artemnovichkov.com/blog/creating-mcp-servers-in-swift)

[@Kyle-Ye](https://github.com/Kyle-Ye)：作者深入探讨了如何在 Swift 中创建 MCP 服务器。这篇文章不仅为开发者提供了有关 MCP（Model Context Protocol）通信协议的详细背景，还通过代码示例展示了如何在 Swift 中实现一个基本的 MCP 服务器，最后介绍了如何在 VSCode 和其他客户端中使用该 MCP 服务器。

### 🐕 [Make your app content show on Spotlight](https://www.createwithswift.com/make-your-app-content-show-on-spotlight/)

[@极速男孩](https://github.com/ztlyyznf001)：这篇文章介绍了如何让应用内容出现在 iOS 的 Spotlight 搜索中。主要有两种方法：一是通过 AppShortcutsProvider.updateAppShortcutParameters() 自动索引应用数据；二是使用 Core Spotlight API 手动创建索引，步骤包括为数据模型实现 IndexedEntity 协议、设置 attributeSet 元数据、在添加或删除内容时分别调用 indexAppEntities 和 deleteAppEntities 方法。文章还提到从 iOS 18.4 起，可以用 hideInSpotlight 控制内容是否显示在搜索结果中。

## 内推

重新开始更新「iOS 靠谱内推专题」，整理了最近明确在招人的岗位，供大家参考

具体信息请移步：https://www.yuque.com/iosalliance/article/bhutav 进行查看（如有招聘需求请联系 iTDriverr）

## 关注我们

我们是「老司机技术周报」，一个持续追求精品 iOS 内容的技术公众号，欢迎关注。

**关注有礼，关注【老司机技术周报】，回复「2024」，领取 2024 及往年内参**

![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true)

同时也支持了 RSS 订阅：https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。

## 说明

🚧 表示需某工具，🌟 表示编辑推荐

预计阅读时间：🐎 很快就能读完（1 - 10 mins）；🐕 中等 （10 - 20 mins）；🐢 慢（20+ mins）
