# 老司机 iOS 周报 #323 | 2025-02-17

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

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

## 新闻

### [Updating the Visual Studio Code extension for Swift](https://www.swift.org/blog/vscode-swift-2/)

[@Cooper Chen](https://github.com/cjlcooper)：Swift 团队正式支持 Visual Studio Code 中的新版本 Swift 扩展，旨在提升跨平台开发体验。原有扩展已迁移至 GitHub /swiftlang 组织，确保更广泛的社区支持和持续更新。对于现有开发者，升级过程无缝衔接，旧版扩展会自动替换为新版，用户可以轻松过渡。如果你是 Swift 开发者，可以尽快更新以体验更多功能和改进。

## 文章

### 🐕 [Creating a reusable action menu component in SwiftUI](https://peterfriese.dev/blog/2025/swiftui-action-menu/)

[@AidenRao](https://weibo.com/AidenRao)：这篇文章详细介绍了如何通过 SwiftUI 构建一个高度复用、和 Apple Mail 中的操作菜单风格一致的动作菜单组件：

- 视图构建器与解耦：通过 `@ViewBuilder` 允许动态注入菜单内容，提升组件的通用性
- SwiftUI 风格系统：利用 `LabelStyle` 和 `ButtonStyle` 统一管理样式，确保视觉一致性
- 封装与复用：通过视图修饰符将复杂逻辑隐藏，调用时仅需链式语法（如 `.actionMenu {title: ..., isPresented: ...}`），类似 SwiftUI 原生 API 的体验

作者也提供了配套的 GitHub 库（[ActionMenu](https://github.com/peterfriese/ActionMenu)），支持通过 Swift Package Manager 集成。

### 🐎 [Attaching debugger to system apps](https://supersonicbyte.com/blog/attaching-debugger-to-system-apps/)

[@Kyle-Ye](https://github.com/Kyle-Ye): 作者分享了调试 iOS 模拟器中系统 App 的一些经验：在关闭 macOS SIP 后我们即可对任何进程进行调试，然后使用 `simctl` 命名启动对应系统 App 并获取 PID，最后在 Xcode 中对该 process 进行 debug 即可。

### 🐎 [Attending Apple Intelligence and App Intents workshop at Paris](https://blog.thomasdurand.fr/story/2025-01-17-attending-apple-workshop/)

[@Smallfly](https://github.com/iostalks)：这是一篇苹果在巴黎举办的技术研讨会议内容，主题围绕如何通过 Apple Intelligence 和 App Intents 框架增强应用功能，提升系统集成能力。涵盖从代码实现到系统集成的关键步骤，并透露出苹果在智能化和本地化功能上的战略布局。

iOS App Intents 是苹果生态中实现「功能原子化」的核心工具，通过标准化接口打通应用与系统的边界。开发者通过定义意图和实体，即可将应用融入 Siri、搜索、自动化等场景，为用户提供无缝、智能的体验。随着 Apple Intelligence 的深化整合，其应用潜力将进一步释放，对于关注 AI 集成的开发者，有较高的参考价值。

### 🐢 [Flutter 3.29 发布，看起来会是一个“大坑”的版本](https://mp.weixin.qq.com/s/_uA5XYYqmzbtTVCtqRPI7w)

[@david-clang](https://github.com/david-clang)：本文结构和内容参考 Flutter 技术项目经理的 [What ’ s new in Flutter 3.29](https://medium.com/flutter/whats-new-in-flutter-3-29-f90c380c2317) ，作者在官方软文报喜不报忧的基础上，给出开发者角度的担忧，例如：

1. Dart 代码会直接在 Android 和 iOS 的主 UI 线程上运行，而不是单独的 Dart UI 线程，此时 Dart 和平台调用直接可以同步执行。
2. 没有 Vulkan 驱动的 Android 设备将回退到在 OpenGLES 上运行的 Impeller，而不是使用 Skia。
3. 移除了 Flutter Gradle 插件，之前没迁移的需要手动迁移适配。

而且 Flutter 创始人 [Eric](https://github.com/eseidel) 也对“废弃 Dart 独立 UI 线程”发表了 [comment](https://github.com/flutter/flutter/issues/150525#issuecomment-2652547816)，表怀疑态度，比如 Dart 和 Native 平台同一线程之后，那么「滚动 / 动画」是否会因此出现相互影响，特别是第三方插件处理不当的时候，反而可能更加卡顿。官方回复 Eric 这利大于弊，而 Eric 表示后面有空整理文档回复该讨论。

## 工具

### 🐢 [SweetPad: Develop Swift/iOS projects using VSCode](https://github.com/sweetpad-dev/sweetpad)

[@阿权](https://github.com/bqlin)：之前你可能听说过 VSCode 插件 [Swift Programming Language](https://marketplace.visualstudio.com/items?itemName=swiftlang.swift-vscode)，官方大力宣传 Swift 可以跨平台开发了，但也就仅限于开发 Swift 了（语法高亮、代码补全、错误检查、Swift Package Only），还是不能取代 Xcode 进行 iOS 开发。

SweetPad 或许能做到这一点，其也是一款 VSCode 插件，旨在使用 VSCode 开发 Swift/iOS 项目，成为 Xcode 以外的替代 IDE 方案。SweetPad 通过集成各种开源工具（swift-format、swiftlint、xcodebuild、xcrun、xcode-build-server、sourcekit-lsp 等）直接在 Xcode 生成（当然也可以用 [XcodeGen](https://github.com/yonaskolb/XcodeGen) 或 [Tuist](https://tuist.io/) 生成）的项目文件进行开发、运行和调试。换句话说，SweetPad 通过各种命令行工具实现并对齐 Xcode 的各项能力。

SweetPad 目前实现能力有：

- Xcode 项目文件编辑：通过 Tuist 工具实现。
- 自动补全（SourceKit-LSP）、单元测试：通过 [Swift](https://marketplace.visualstudio.com/items?itemName=sswg.swift-lang) 插件 + [xcode-build-server](https://github.com/SolaWing/xcode-build-server) 工具实现。
- 调试：通过 [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb) 实现。
- 运行到模拟器和真机：通过 `xcrun simctl` 和 `xcrun devicectl` 命令行实现。
- 格式化：通过 [swift-format](https://github.com/apple/swift-format) 实现。

SweetPad 还没使用最近开源的 [swift-build](https://github.com/swiftlang/swift-build)，还是使用 `xcodebuild` + `sourcekit-lsp` 的方案，所以还是得安装 Xcode 环境。另外，诸如 SwiftUI Preview、XIB/Stroyboard 可视化、签名证书管理等也尚未支持。

之前 [#224](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2023/%23244-2023.05.15.md) 周报有提到 [用 VSCode 基于 Bazel 打造 Apple 生态开发环境](https://mp.weixin.qq.com/s/7UJdgJIYWkhzSjtKsHqC2g) 则是实现一套 Bis + Bazel 编译系统的 VSCode 开发环境，感兴趣的同学可以对比着阅读。

## Tips

### [一个使用 Instrument 的小技巧](https://github.com/SwiftOldDriver/iOS-Weekly/issues/4871)

[@Barney](https://github.com/BarneyZhaoooo)：Instrument 录制结束卡顿很久或者秒退时，可用的设置。只采集最后几秒的数据，对于一些需要前置操作一段时间才能复现的问题时，会有较大帮助。在处理大量长时间数据时，Instrument 会有较大卡顿并消耗大量内存，此时就可以开启这个选项。

![Instrument](https://github.com/user-attachments/assets/42907aa6-5814-49c6-ac06-402502bfe4a6)

## 内推

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