# 老司机 iOS 周报 #335 | 2025-05-19

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

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

## 新闻

### [Apple 公布将于今年晚些时候推出的强大辅助功能](https://www.apple.com.cn/newsroom/2025/05/apple-unveils-powerful-accessibility-features-coming-later-this-year/)

苹果在辅助功能的上的设计还是非常先进的，现有的一些辅助功能适配起来相对来说还是比较轻松的，期待苹果更多的辅助功能。

## 文章

### 🐎 [UIApplication delegate deprecation coming in iOS 19 SDK](https://lapcatsoftware.com/articles/2025/4/5.html)

[@Damien](https://github.com/ZengyiMa)：作者通过关注 WebKit 提交记录发现 iOS 19 SDK 中 UIApplicationDelegate 协议中的部分 API 将被弃用，原因是修复因新 SDK 导致的弃用警告，作者预测“新 SDK ”指的是即将在 6 月 WWDC 发布的 iOS 19，苹果工程师们已经在用 iOS 19 SDK 编译 WebKit，所以出现了这些弃用警告。

### 🐕 [Using Model Context Protocol in iOS apps](https://www.artemnovichkov.com/blog/using-model-context-protocol-in-ios-apps)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：MCP（Model Context Protocol，模型上下文协议）是一种用于大语言模型（LLM）与外部工具交互的协议。它允许模型在对话过程中调用开发者自定义的函数（称为“工具”），以访问本地或远程的数据和服务，从而增强模型的实际能力。这篇文章介绍了如何在 iOS 应用中使用 Model Context Protocol（MCP）集成大模型能力。作者通过示例展示了如何实现一个 MCP Server（用于获取 Apple Health 中的血压数据）和一个 MCP Client（通过 Anthropic Claude API 实现聊天功能）。整个流程包括定义工具、调用本地服务、解析大模型响应，并在用户请求与工具调用之间建立桥梁，实现智能对话与本地数据交互的结合。

### 🐕 [Xtool: cross-platform Xcode replacement. Build iOS apps on Linux and more!](https://forums.swift.org/t/xtool-cross-platform-xcode-replacement-build-ios-apps-on-linux-and-more/79803)

[@Kyle-Ye](https://github.com/Kyle-Ye): 这篇贴子介绍了作者的开发名为 Xtool 的跨平台 Xcode 替代工具。Xtool 可以在 Linux 和 Windows 上构建和部署 iOS 应用程序 , 同时也可以在 macOS 上替代 Xcode。它支持使用 SwiftPM 构建 iOS 应用程序、签名和安装应用程序。中间还提到了一些 Xtool 目前还不支持的功能 , 如 Interface Builder、资产目录和 LLDB 调试等，作者表示未来会继续完善这些功能。

### 🐕 [Vibe Xcoding your apps](https://tuist.dev/blog/2025/05/13/vibe-xcoding)

[@EyreFree](https://github.com/EyreFree)：本文探讨了 LLMs 驱动的氛围编程（Vibe Coding）在 Xcode 生态的应用，介绍了 Alex、CopilotForXcode 等社区开发的 AI 代码助手，提及 MCP 协议对上下文交互的作用。同时指出了 Xcode 的扩展性局限，期待苹果开放底层接口（如借鉴 VSCode 模式）优化集成，强调了上下文、运行时数据和文档对 AI 辅助的重要性。作者认为氛围编程将推动苹果革新开发者工具，建议感兴趣的朋友持续关注社区在 Xcode 与 AI 整合方面的探索。

### 🐎 [A flowing WebGL gradient, deconstructed](https://alexharri.com/blog/webgl-gradients)

[@莲叔](https://github.com/aaaron7): 一篇非常棒的科普文章，通过由浅入深的例子，娓娓道来的揭开了复杂动效的神秘面纱。本质上，绝大多数动画都可以解构为 时间 + 公式 + 图形 api。本篇文章从渐变开始、过度到波浪、贝塞尔曲线等复杂动效，都以思路，公式到代码予以实现，一直到最后实现了一个非常炫酷的动态模糊效果，标题中虽然有 WebGL，但绝大多数代码其实可以非常方便的移植到其他图形 api，如 OpenGL 和 Metal 等等。对动画和图形学有兴趣的同学千万不能错过。

### 🐕 [Unlocking the Real Power of Swift 6's Typed Throws with Error Chains](https://www.fline.dev/swift-6-typed-throws-error-chains/)

[@阿权](https://github.com/bqlin)：本文围绕 Swift 6 的类型化抛出（Typed Throws）特性展开，重点解决错误处理中的「嵌套地狱」问题，核心内容如下：

1. 类型化抛出的优势与挑战
   - 优势：编译时错误检查、类型安全、自文档化 API、IDE 支持。
   - 挑战：抛出类型只能指定一个，不支持嵌套。多层架构中错误需手动转换，导致代码冗余、类型激增和上下文丢失。
2. Catching 协议与 [ErrorKit](https://github.com/FlineDev/ErrorKit) 解决方案
   - 引入 ErrorKit，通过 `Catching` 协议为错误类型添加 `caught(Error)` case，统一包装子层错误。
   - 关键函数：
     - `catch` 函数：自动将闭包中抛出的错误包装为当前层错误类型，避免手动转换。
     - `errorChainDescription` 函数：递归构建层级化错误链，保留原始错误上下文，提升调试效率。
3. 总结
   - 类型化抛出结合 `Catching` 协议，在保证类型安全的同时简化错误处理，ErrorKit 提供的工具链进一步增强了调试能力。
   - 适用于复杂多层架构，尤其适合需要清晰错误追踪和高效调试的场景。
  
### 🐕 [Debug crashes in iOS using MetricKit](https://ohmyswift.com/blog/2025/05/08/debug-crashes-in-ios-using-metrickit/)

[@Barney](https://github.com/BarneyZhaoooo)：文章介绍如何通过苹果 MetricKit 实现系统级崩溃诊断，捕获内存 / 系统信号等传统工具遗漏的崩溃。涵盖框架配置、调用栈分析和 iOS 版本差异化报告机制（13-14 每日汇总，15+ 即时推送），提供崩溃模拟方案，并展示与 Zoho Apptics 整合实现符号解析与数据可视化。

### 🐕 [Fitting the Lapse experience into 15 MegaBytes](https://blog.jacobstechtavern.com/p/f7411f56-a502-4ef4-81b1-aef15238d460)

[@DylanYang](https://github.com/Dylan19Yang)：本文讲述了作者在开发 App Clip 时如何将包体压缩到 15 MB 的方式。作者通过重构依赖关系，减少核心功能的依赖库大小，减少、压缩内置的图片、字体等文件，分割核心模块，较少不必要的代码，裁剪字体包，编译优化等各种手段来极致的压缩包体。虽然这是 App Clip，但是对 App 本体的包体有诉求的开发者也有不错的参考价值。

## 代码

### [ButtonKit](https://github.com/Dean151/ButtonKit)

[@Smallfly](https://github.com/iostalks)：ButtonKit 的设计背景源于 SwiftUI 对异步任务交互的不足，旨在简化开发者在处理复杂用户交互时的工作量。其主要作用是提供一个支持异步操作、进度展示和自定义样式的按钮组件，特别适合需要处理网络请求、文件操作或其他耗时任务的 SwiftUI 应用。开发者可以通过这个库减少样板代码，提升代码可读性和用户体验。

## 内推

重新开始更新「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）
