老司机 iOS 周报 #323 | 2025-02-17
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新闻
Updating the Visual Studio Code extension for Swift
@Cooper Chen:Swift 团队正式支持 Visual Studio Code 中的新版本 Swift 扩展,旨在提升跨平台开发体验。原有扩展已迁移至 GitHub /swiftlang 组织,确保更广泛的社区支持和持续更新。对于现有开发者,升级过程无缝衔接,旧版扩展会自动替换为新版,用户可以轻松过渡。如果你是 Swift 开发者,可以尽快更新以体验更多功能和改进。
文章
🐕 Creating a reusable action menu component in SwiftUI
@AidenRao:这篇文章详细介绍了如何通过 SwiftUI 构建一个高度复用、和 Apple Mail 中的操作菜单风格一致的动作菜单组件:
- 视图构建器与解耦:通过
@ViewBuilder
允许动态注入菜单内容,提升组件的通用性 - SwiftUI 风格系统:利用
LabelStyle
和ButtonStyle
统一管理样式,确保视觉一致性 - 封装与复用:通过视图修饰符将复杂逻辑隐藏,调用时仅需链式语法(如
.actionMenu {title: ..., isPresented: ...}
),类似 SwiftUI 原生 API 的体验
作者也提供了配套的 GitHub 库(ActionMenu),支持通过 Swift Package Manager 集成。
🐎 Attaching debugger to system apps
@Kyle-Ye: 作者分享了调试 iOS 模拟器中系统 App 的一些经验:在关闭 macOS SIP 后我们即可对任何进程进行调试,然后使用 simctl
命名启动对应系统 App 并获取 PID,最后在 Xcode 中对该 process 进行 debug 即可。
🐎 Attending Apple Intelligence and App Intents workshop at Paris
@Smallfly:这是一篇苹果在巴黎举办的技术研讨会议内容,主题围绕如何通过 Apple Intelligence 和 App Intents 框架增强应用功能,提升系统集成能力。涵盖从代码实现到系统集成的关键步骤,并透露出苹果在智能化和本地化功能上的战略布局。
iOS App Intents 是苹果生态中实现「功能原子化」的核心工具,通过标准化接口打通应用与系统的边界。开发者通过定义意图和实体,即可将应用融入 Siri、搜索、自动化等场景,为用户提供无缝、智能的体验。随着 Apple Intelligence 的深化整合,其应用潜力将进一步释放,对于关注 AI 集成的开发者,有较高的参考价值。
🐢 Flutter 3.29 发布,看起来会是一个“大坑”的版本
@david-clang:本文结构和内容参考 Flutter 技术项目经理的 What ’ s new in Flutter 3.29 ,作者在官方软文报喜不报忧的基础上,给出开发者角度的担忧,例如:
- Dart 代码会直接在 Android 和 iOS 的主 UI 线程上运行,而不是单独的 Dart UI 线程,此时 Dart 和平台调用直接可以同步执行。
- 没有 Vulkan 驱动的 Android 设备将回退到在 OpenGLES 上运行的 Impeller,而不是使用 Skia。
- 移除了 Flutter Gradle 插件,之前没迁移的需要手动迁移适配。
而且 Flutter 创始人 Eric 也对“废弃 Dart 独立 UI 线程”发表了 comment,表怀疑态度,比如 Dart 和 Native 平台同一线程之后,那么「滚动 / 动画」是否会因此出现相互影响,特别是第三方插件处理不当的时候,反而可能更加卡顿。官方回复 Eric 这利大于弊,而 Eric 表示后面有空整理文档回复该讨论。
工具
🐢 SweetPad: Develop Swift/iOS projects using VSCode
@阿权:之前你可能听说过 VSCode 插件 Swift Programming Language,官方大力宣传可以 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 或 Tuist 生成)的项目文件进行开发、运行和调试。换句话说,SweetPad 通过各种命令行工具实现并对齐 Xcode 的各项能力。
SweetPad 目前实现能力有:
- Xcode 项目文件编辑:通过 Tuist 工具实现。
- 自动补全(SourceKit-LSP)、单元测试:通过 Swift 插件 + xcode-build-server 工具实现。
- 调试:通过 CodeLLDB 实现。
- 运行到模拟器和真机:通过
xcrun simctl
和xcrun devicectl
命令行实现。 - 格式化:通过 swift-format 实现。
SweetPad 还没使用最近开源的 swift-build,还是使用 xcodebuild
+ sourcekit-lsp
的方案,所以还是得安装 Xcode 环境。另外,诸如 SwiftUI Preview、XIB/Stroyboard 可视化、签名证书管理等也尚未支持。
之前 #224 周报有提到 用 VSCode 基于 Bazel 打造 Apple 生态开发环境 则是实现一套 Bis + Bazel 编译系统的 VSCode 开发环境,感兴趣的同学可以对比着阅读。
Tips
一个使用 Instrument 的小技巧
@Barney:Instrument 录制结束卡顿很久或者秒退时,可用的设置。只采集最后几秒的数据,对于一些需要前置操作一段时间才能复现的问题时,会有较大帮助。在处理大量长时间数据时,Instrument 会有较大卡顿并消耗大量内存,此时就可以开启这个选项。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)
关注我们
我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)