Releases: SwiftOldDriver/iOS-Weekly
老司机 iOS 周报 #363 | 2026-01-26
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🐕 精通 UITableViewDiffableDataSource ——从入门到重构的现代 iOS 列表开发指南
@阿权:本文围绕 iOS 现代列表 UITableViewDiffableDataSource 展开,核心是替代传统数据源代理模式,解决列表开发中的崩溃、状态不一致等痛点,并在最后提供一个轻量工具集 DiffableDataSourceKit 来简化系统 API 的调用。文章核心内容如下:
- 使用
UITableViewDiffableDataSourceAPI,通过声明式的“快照”来管理数据状态,系统自动计算并执行 UI 更新动画,从而一劳永逸地解决了传统模式中数据与 U 状态不同步导致的崩溃问题。 - 全文通过构建一个音乐播放列表 App 来贯穿始终,从移除 Storyboard、定义遵循
Hashable协议的数据模型开始,一步步教你初始化数据源和填充数据。 - 文章还详细讲解了:
- 自定义多样化的单元格:包括使用传统的 Auto Layout 布局,以及利用 iOS 14+ 的
UIContentConfiguration进行现代化配置。 - 实现核心交互:具体涉及了拖拽重排、滑动删除,以及如何通过 Cell 的代理事件处理等交互。
- 处理复杂逻辑:特别讲解了如何利用模型的
Hashable来实现“原地刷新”而非替换的刷新机制。
- 自定义多样化的单元格:包括使用传统的 Auto Layout 布局,以及利用 iOS 14+ 的
除了文章提到的 UITableViewDiffableDataSource,用好这些技术,不妨可以再看看以下几个 WWDC:
- WWDC19 - 215 - Advances in Collection View Layout
- WWDC19 - 220 - Advances in UI Data Sources
- WWDC20 - 10026 - Lists in UICollectionView
- WWDC20 - 10027 - Modern cell configuration
另外,与其用 UITableView 承载数据,其实 Apple 更推荐使用 UICollectionView 来实现列表,甚至还提供了增强版的 Cell。
恰逢 App Store 要求用 Xcode 26 带来的强制升级,不少 App 也终于抛弃了 iOS 12、iOS 13,也是用新技术(也不新了)升级项目架构的最好时机。
除了 API 本身,我们也应关注到一些架构或设计模式上的变化与趋势:
- 声明式。新的 API 更多使用构造时定义逻辑的声明式语法,在一开始就把相关的布局、样式等逻辑给定义好,后续不再通过各种存储属性配置逻辑。极大地减少了开发者对状态的维护。例如
UICollectionViewCompositionalLayout通过 Item、可嵌套的 Group、Section 一层一层地在初始化配置布局。 - 数据驱动。声明式常常是为了数据驱动,因为声明式定义的不是最终对象,而是一些前置的配置数据结构。例如 Cell 提供了 Configuration 结构体,通过配置和重新赋值结构体来实现 UI 更新,而不是直接操作 View。类似的,
UIButton也提供了类型的 Configuration 结构体用于配置 UI。更深一层的意义,驱动 UI 的配置数据、视图甚至可以复用的和无痛迁移的。例如UITableViewCell和UICollectionViewCell的配置类及其关联子视图是通用的,自定义 Cell 可以把重心放在自定义 Configuration 配置上,这样就可以把相同的视图样式套用在各种容器中。 - 数据绑定。将索引替换为 id 甚至是具体业务类型。以往
UITableView、UICollectionView的 API 都是围绕索引(IndexPath)展开的,所有的数据(DataSource)、布局(CollectionViewLayout)和视图(Presentation: Cell、ReuseableView)即使有分离,但都需要通过索引来交换。虽然这样简化了不同模块的耦合和通信逻辑,但因为大多数业务场景数据是动态的,这让索引只是个临时态,一不小心就会用错,轻则展示错误,重则引入崩溃。DiffableDataSource 最具里程碑的一点是剔除了索引,直接让具体业务模型跟 Cell 直接绑定,不经过索引。 - 类型安全。不再是
Any/AnyObject,而是直接绑定一个具体的类型。常见做法是通过泛型机制将类型传入。 - 用轮子,而不是造轮子。系统 API 足够自由,直接使用实例,而不是子类化自定义逻辑。以往的开发经验,都是一言不合就重写实现,重新造控件、布局,
UIButton和UICollectionViewLayout就是两个典型的 case。近年来系统 API 都在丰富使用的自由度和易用程度,例如UIButton提供了许多拿来就能用的灵活样式,开发者只需要微调个 Configuration 就是能实现业务效果。UICollectionViewCompositionalLayout则是用 Item、Group、Section 构造足够复杂的布局场景。另外一点验证了这个趋势的是,iOS 26 中,只有官方提供的控件、导航框架才有完整的液态玻璃交互。
架构的演进一般是为了提高研效、减少出错。一个合理、高效的代码架构,在当业务需求变得复杂的时候,业务调用代码不会随业务的复杂而线性增长,而是逐渐减少。
🐎 Dart 官方再解释为什么放弃了宏编程,并转向优化 build_runner ? 和 Kotlin 的区别又是什么?
@Crazy:本文主要介绍了 Dart 官方放弃宏编程改为优化 build_runner 的原因,在读本文之前,要先明白什么是宏编程。文章中介绍了 Dart 在实现宏编程的过程中试用的方案与思考,放弃的原因总结起来有三个 :
- 编译会卡在一个“先有鸡还是先有蛋”的死结
- 工具链双前端导致宏支持会引发“工作量爆炸 + 性能灾难”
- 即使做成了,也“高不成低不就”:替代不了 build_runner,不如直接扩展 build_runner 能力
文章最后还对比了 Kotlin 的 Compiler Plugins、KSP 与 Swift 的 Swift Macros 的差距,总的来说 build_runner 还有很长的一段路要走。
🐕 @_exported import VS public import
@AidenRao:Swift 6 带来了全新的 import 访问级别控制:@_exported import。它和我们熟悉的 public import 有什么不同?简单来说,public import 只是将一个模块声明为公开 API 的一部分,但使用者仍需手动导入它;而 @_exported import 则是将依赖的符号完全“吸收”,调用方无需关心底层依赖。文章深入对比了两者的意图和应用场景,并给出了明确建议:日常开发中应优先选择官方支持的 public import,仅在封装 SDK 或构建聚合模块(Umbrella Module)这类希望为用户简化导入操作的场景下,才考虑使用 @_exported。
🐕 MVVM + Reducer Pattern
@含笑饮砒霜:这篇文章主要讲述如何将 MVVM 架构与 Reducer 模式结合来提升 iOS 应用中状态管理的可控性和可维护性。作者指出:传统的 MVVM 模式在复杂状态下易出现分散的状态变更和难以追踪的问题,这会导致难调试、隐式状态转换、竞态条件等不良后果;而 Reducer 模式(受 Redux/TCA 启发)通过 “单一状态源 + 明确 action + 纯函数 reduce ” 的方式,使状态变更更可预测、更易测试。文章建议在 ViewModel 内部局部引入 reducer,把所有状态通过单一 reduce(state, action) 处理,并把副作用(如异步任务)当作 effects 处理,从而达到更明确、可追踪且易单元测试的效果,同时保留 MVVM 和领域层的清晰分层,不强依赖某个框架。
🐢 用第一性原理拆解 Agentic Coding:从理论到实操
@Cooper Chen:文章从第一性原理出发,系统拆解了 Agentic Coding 背后的底层逻辑与工程现实,澄清了一个常见误区:效率瓶颈不在于上下文窗口不够大,而在于我们如何与 AI 协作。作者以 LLM 的自回归生成与 Attention 机制为起点,深入分析了 Coding Agent 在长任务中常见的“走偏”“失忆”“局部最优”等问题,并指出这些并非工具缺陷,而是模型工作方式的必然结果。
文章最有价值之处,在于将理论约束转化为可执行的工程实践:通过“短对话、单任务”的工作方式控制上下文质量;用结构化配置文件和工具设计引导 Agent 行为;通过 Prompt Caching、Agent Loop、上下文压缩等机制提升系统稳定性。更进一步,作者提出“复利工程(Compounding Engineering)”这一关键理念——不把 AI 当一次性工具,而是通过文档、规范、测试和审查,将每一次经验沉淀为系统的长期记忆。
最终,文章给出的启示非常清晰:AI 编程不是魔法,而是一门需要刻意练习的协作技能。当你真正理解模型的边界,并用工程化方法加以约束和放大,AI 才能从“能写代码”进化为“可靠的编程合作者”。
🐎 Universal Links At Scale: The Challenges Nobody Talks About
@Damien:文章揭示了 Universal Links 在大规模应用中的隐藏复杂性:AASA 文件缺乏 JSON 模式验证导致静默失效,Apple CDN 缓存延迟使问题修复滞后,苹果特有通配符语法和 substitutionVariables 变量无现成工具支持。作者提出通过 CI 集成模式验证、CDN 同步检查、自定义正则解析和 staging 环境测试的完整方案,并开源了 Swift CLI 工具实现全链路自动化验证。
🐕 How I use Codex GPT 5.2 with Xcode (My Complete Workflow)
@JonyFang: 本视频深入介绍了如何让 AI 代理(如 Codex GPT 5.2)真正提升 iOS/macOS 开发效率的三个核心策略:
- 构建脚本自动化(Build Scripts):通过标准化的构建流程,让 AI 能够理解和复现你的构建环境
- 让构建失败显而易见(Make Build Failures Obvious):优化错误信息的呈现方式,使 AI 能够快速定位问题根源
- 给你的代理装上"眼睛"(Give Your Agent Eyes):这是最核心的部分 - 让 AI 能够"看到"应用运行时的状态,而不仅仅是读取代码
最有价值之处:作者强调了一个常被忽视的问题 - AI 代码助手不仅需要理解代码逻辑,更需要理解应用的运行时状态。通过工具如 Peekaboo 等,让 AI 能够获取视觉反馈(截图、UI 层级等),从而提供更精准的问题诊断和代码建议。这种"可观测性优先"的思路,与传统的代码审查工作流形成了有趣的对比,值得所有尝试将 AI 工具深度集成到开发流程中的团队参考。
视频时长约 49 分钟,适合希望系统性提升 AI 辅助开发效率的 iOS/macOS 开发者观看。
工具
🐎 Skip Is Now Free and Open Source
@Crazy:Skip 框架正式免费并且开源,该库从 2023 年开始开发,已有三年的开发历程。该库的目的是让开发者能够仅用一套 Swift 与 SwiftUI 代码库,同时打造 iOS 与 Android 上的高品质移动应用——而且不必接受那些自“跨平台工具诞生以来就一直存在”的妥协。因为 Skip 是采用编译为 Kotlin 与 Compose 的方式,所以相应的执行效率是非常高的。相较于其他的跨平台开发,效率高,并且使用的是 Swift 语言。既然已经免费并开源,移动端开发的时候又多了一个可供选择的跨端技术。
内推
重新开始更新「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)
老司机 iOS 周报 #362 | 2026-01-12
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🐎 我们如何使用 Codex 在 28 天内构建 Android 版 Sora
@Crazy:本篇文章简略的讲述了 OpenAI 的工程师团队是如何利用 CodeX 在 28 天内开发 Sora 的 Android 版本,主要可以分为以下四个部分
- 在 Codex 在整个代码库中创建和维护大量 AGENT.md 来引导新的开发工程师,减少重复的沟通和模版代码,增加测试量,让团队专注于架构、用户体验、系统性变更和最终质量。
- 利用项目的整体规则,编写部分具有代表性的端到端功能。通过将 Codex 指向具有代表性的功能,让 AI 在一个标准范围内工作,提高 AI 的生成准确性与工作效率。
- 在编写代码前使用 Codex 进行规划,利用相关文件并总结该功能的运作原理,即了解 CodeX 是如何从 API 到用户界面的生成过程,并且在生成后进行对应的架构纠正,利用这种可分享的动态策略让 CodeX 生成更加符合架构的代码。
- 同时运行多个 Codex 会话,一个会话负责回放,一个负责搜索,一个负责错误处理,还有一个则负责测试或重构。多会话会大大提高整体开发效率,并让开发人员处在审核的位置上,而不是开发的位置上。
最后是利用 CodeX 的上下文来让他发挥到最佳水平,也可以跨平台进行上下文分析,但没有上下文就是盲目猜测。
🐕 Tracking renamed files in Git
@Barney:本文聚焦 Git 不直接追踪文件重命名的核心特性,解析其通过文件内容相似度启发式算法推测重命名的逻辑。为确保历史追踪准确,核心建议将重命名单独提交,推荐借助 git mv 命令(暂存重命名操作、保留文件编辑未暂存状态)实现。同时提供替代脚本方案,解决无法使用 git mv 时,重命名与编辑同步进行导致的追踪难题,助力高效管理文件版本历史。
🐕 Replay
@Smallfly:这篇文章介绍了 Swift 生态中解决网络测试痛点的工具 Replay,通过记录与重放真实 HTTP 流量,为测试提供高效、稳定的解决方案。核心亮点包括:
- 痛点解决:针对网络测试慢、依赖第三方服务不稳定、手动维护 JSON 响应文件易过时的问题,Replay 实现「记录一次,永久重放」,避免测试受网络波动影响。
- 技术优势:采用行业标准 HAR(HTTP Archive)格式存储流量,兼容浏览器开发者工具、Charles 等工具;结合 Swift 6.1 的
TestScoping协议与包插件,实现声明式测试配置。 - 工作流程:首次运行测试时提示记录,后续自动使用本地 HAR 文件,测试速度从分钟级降至秒级。
- 灵活配置:支持过滤敏感数据、自定义请求匹配规则,并提供内联存根功能,适配错误处理等边缘场景。
文章通过代码示例与实践建议,展示了 Replay 如何让网络测试更可靠、高效,是 Swift 开发者优化测试流程的实用参考。
🐎 Flutter 官方正式解决 iOS 26 上的 WebView 有点击问题
@david-clang:对于 Flutter WebView 在 iOS 26 点击失效和触摸穿透的问题,官方技术文档详细阐述了问题原因和解决方案,最终方案是 Flutter Engine + iOS embedder 新增 “同步 hitTest 回调” 能力,将手势决策从“异步协同”改为“同步拦截”,在触点处直接判断是否应拦截手势,从根本解决 WebView、AdMob 等 PlatformView 的手势冲突问题。
因为底层的重构方案还需要上层插件进行适配,官方又合入了个无需插件适配的临时方案作为补充:在 FlutterPlatformViews.mm 中实现了针对 WKWebView 手势识别器的递归搜索和“重启”机制,并在 blockGesture 中针对 iOS 26+ 启用了这个机制。
代码
React Native for macOS
@EyreFree:微软 react-native-macos 仓库值得关注!作为 Facebook React Native 的开源分支(MIT 许可),它支持用 React 快速构建原生 macOS 应用,兼容 macOS 11+。具备声明式 UI、组件化开发、热重载等优势,还能跨 iOS、Android 复用代码,配套完善文档与贡献指南,更新维护活跃,是 macOS 原生应用开发的高效选择,感兴趣的同学可以试试。
Skills Public
@含笑饮砒霜:这是一个聚焦于 SwiftUI UI 设计模式的代码仓库,核心围绕 SwiftUI 框架提供各类实用的 UI 实现方案、设计最佳实践和代码示例,面向 iOS/macOS 等平台开发者,旨在解决 SwiftUI 开发中常见的 UI 构建问题、统一设计范式。适合 iOS/macOS 开发者(尤其是 SwiftUI 初学者 / 进阶者),可作为 SwiftUI UI 模式的参考手册,快速复用成熟的设计和代码方案,避免重复踩坑。
内推
重新开始更新「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)
# 老司机 iOS 周报 #361 | 2025-12-29
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🐕 Exploring interactive snippet intents
@BluesJiang: 这篇文章主要探索了一下 App Intent 框架。苹果在 WWDC25 上引入了 App Intent 的可交能力,在 Widget、App Shortcut、Intent 中都可以使用。作者探索了这个 App Intent 的交互框架和编码逻辑,旨在了解这个交互框架可以做什么,不可以做什么,交互分范式是什么样的。
这个框架使用 SwiftUI 编码,但是交互逻辑与方式则有很大的不同,在 App Intent 框架下,不存在传统生命式框架下的状态和交互变化,甚至按钮的触发事件也不是直接的,而是间接通过注册的 Intent 来完成响应。
如果有需要在 App 外做即时响应的功能,可以考虑研究一下。
🐎 使用 "git mv" 命令记录 Git 中文件名的大小写更改
@含笑饮砒霜:这篇文章主要介绍了在 macOS 和 Windows 默认的大小写不敏感但保留大小写的文件系统中,直接修改文件名大小写时 Git 不会记录该名称变更,可能导致文件系统与 Git 存储的文件名不一致,进而引发后续使用(如跨大小写敏感文件系统、CI 打包)的问题,同时给出解决方案:使用 git mv 命令记录文件名大小写变更,若不便使用该命令,可通过 “先重命名为临时名称、再改为目标名称” 的两阶段提交方式实现同样效果。
🐎 Swift Configuration 1.0 released
@AidenRao:Swift Configuration 1.0 的正式发布。该项目旨在为 Swift 应用提供一套统一的配置管理方案,帮助开发者优雅地处理来自环境变量、配置文件乃至远程服务的各类配置项。通过它,我们可以告别过去分散繁琐的配置逻辑,以更清晰、安全和可维护的方式构建应用。
🐎 Using associated domains alternate mode during development
@DylanYang:作者向我们介绍了如何在调试 AASA(apple-app-site-association) 相关能力时,通过开发者模式使域名相关的改动可以即时的被同步到。开发者模式需要我们在对应域名上加上特定后缀,并且只对开发模式的签名文件生效。有调试相关能力需求的开发者可以参考一下。
🐢 Command Line Interface Guidelines
@zhangferry:这篇文章是一份开源的《命令行界面(CLI)设计指南》,核心目标是结合传统 UNIX 原则与现代需求,帮助开发者打造更易用、更友好的 CLI 程序。虽然现在 GUI 非常普及,但 CLI 以其灵活、稳定、跨平台的优势在很多场景(例如 DevOps)都在放光发热。所以了解如何更好的设计 CLI 仍有必要,以下是从文章内挑选的几条重要设计指南:
- 基础规范:使用对应语言的命令行参数解析库,Swift 下是 swift-argument-parser;成功时返回 0,失败返回非 0;核心输出到
stdout(支持管道传递),日志,错误信息输出到stderr(避免干扰管道) - 帮助和文档:默认运行无参数时显示简洁的帮助,
-h/--help对应完整的帮助说明。 - 输出设计:人类可读最重要,如果为了人类可读破坏了机器可读,可以增加
--plain参数输出机器可读内容,这有利于 grep、awk 工具的集成 - 错误处理:避免冗余输出,核心错误应该放在末尾
- 参数和标志:优先使用
flags,而不是依赖位置读参数;所有flags都提供短格式和长格式两种(-h/--help);危险操作增加一个保护措施:输入名称、--force标志等 - 健壮性与兼容性:及时响应用户的输入(100ms 以内),如果流程耗时增加进度反馈(进度条)
- 环境变量:避免占用 POSIX 标准变量;本地用
.env管理但不应把.env当做配置文件;不要使用环境变量存储密钥等重要信息,这样很容易泄漏,推荐通过文件或密钥管理服务
🐕 SwiftUI Group Still(?) Considered Harmful
@Damien:本文指出 SwiftUI 的 Group 会把修饰符“分发”给每个子视图,曾让 onAppear 被多次触发。onAppear/task 虽被苹果特殊处理,但文档未改,且自定义修饰符与在 List 内仍照分发。解决方案为:除非必须一次性给兄弟视图统一加修饰符,否则别用 Group,直接重复代码或拆视图更稳妥。
代码
🐢 SwiftAgents
@阿权:SwiftAgents 为 Swift 开发者提供了一套现代化、类型安全、并发友好的 AI Agent 开发框架,兼具强大的功能与优雅的 API 设计,适合在苹果全平台及 Linux 上构建下一代智能应用。
实现能力:
- Agent 框架:支持 ReAct、PlanAndExecute、ToolCalling 等多种推理模式
- 灵活内存系统:包含对话内存、滑动窗口、摘要记忆及可插拔持久化后端
- 类型安全工具:通过
@Tool、@Parameter宏大幅减少样板代码 - 多代理编排:支持监督者-工作者模式、并行执行与智能路由
- 全平台支持:兼容 iOS 17+、macOS 14+、Linux(Ubuntu 22.04+)
- 强并发安全:基于 Swift 6.2 的 Actor 隔离与 Sendable 类型
- 可观测性与弹性:内置日志追踪、指标收集、重试策略与熔断器
适用场景:
- 对话式 AI 助手
- 自动化任务执行与决策流程
- 多 Agent 协同分析系统
- 需要持久化记忆与工具调用的复杂应用
🐕 XcodeBuildMCP 1.15.0 released
@Cooper Chen:XcodeBuildMCP 是一个基于 Model Context Protocol(MCP)的开源工具,将 Xcode 的构建、运行与模拟器能力以标准化接口暴露给 AI Agent,使其能够真正参与 iOS / macOS 的开发流程。开发者只需在首次调用时设置好 project、simulator 和 scheme,之后的每一次调用都可以直接复用配置,“一次设定,次次生效”。
这一设计显著降低了上下文和参数负担:
- 上下文占用减少 24.5%(smaller context footprint)
- 每次调用所需参数更少(fewer params per call)
对于依赖 AI 自动编译、跑测试、定位问题的场景而言,这意味着更低的 Token 消耗、更稳定的 Agent 行为,以及更高效的工具调用体验。XcodeBuildMCP 是连接 Xcode 与 AI 工作流的关键基础设施,尤其适合构建长期、可持续的智能开发系统。
音视频
🐕 CS193 Stanford 2025
@极速男孩:这是是斯坦福大学计算机科学系著名的公开课程 CS193p: Developing Applications for iOS(iOS 应用程序开发)。主要涵盖最新的 iOS SDK 特性。根据网站最新信息(Spring 2025 版本),内容包括 Xcode 的使用、SwiftUI 的视图与修饰符、Swift 类型系统、动画、数据持久化(SwiftData)以及多线程等。
内推
重新开始更新「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)
老司机 iOS 周报 #360 | 2025-12-15
老司机 iOS 周报 #360 | 2025-12-15
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🌟 Teaching AI to Read Xcode Builds
@zhangferry:Xcode 原始构建日志对人和 AI 都不够友好,仅提供扁平信息输出。作者通过截获 Xcode 与 SWBBuildService 的通信,挖掘出日志之外的结构化数据,包括构建依赖、详细耗时等核心信息,现在随着 swift-build 的开源,可以更系统的了解这些构建信息,利用它们可以实现这些功能:
- 精准排错:链接错误源于 NetworkKit 模块构建失败,其依赖的 CoreUtilities 正常,问题仅集中在 NetworkKit 本身
- 慢构建分析:47 秒构建中仅 12 秒是实际编译,其余时间用于等待代码签名;8 核 CPU 仅达成 3.2 倍并行,XX 模块是主要瓶颈
- 主动提醒:近一个月构建时间上涨 40%,与 Analytics 模块新增 12 个 Swift 文件相关
- 自然语言查询:支持 “上次构建最慢的模块是什么?”“上周比这周多多少警告?” 等直接提问
利用这项能力对 Wikipedia iOS 应用完成 “体检”,找到多个编译耗时瓶颈,AI 还结合结果给出了模块拆分、并行处理的优化建议。
未来潜力更值得期待:若 Apple 官方支持实时获取构建消息,AI 可在构建中途发现异常(比如 “某模块比平时慢 2 倍,是否暂停检查?”),还能实时监控 CI 构建进度,甚至自动修复问题。作者基于 swift-build 开发了 Argus,已经实现部分实时功能。
🐕 豆包手机为什么会被其他厂商抵制?它的工作原理是什么?
@EyreFree:豆包手机因采用底层系统权限实现 AI 自动化操作,遭微信、淘宝等厂商抵制。其核心工作原理为:通过 aikernel 进程与 autoaction APK 协同,利用 GPU 缓冲区读取屏幕数据、注入输入事件,借助独立虚拟屏幕后台运行,无需截屏或无障碍服务,还能绕过部分应用反截屏限制。AI 操作主要依赖云端推理,本地每 3-5 秒向字节服务器发送 250K 左右图片,接收 1K 左右操作指令。这种模式虽提升自动化效率,但存在隐私安全隐患,易被灰产利用,且冲击现有移动互联网商业逻辑,相关规范与监管仍需完善。感兴趣的同学可以结合视频 【老戴】豆包手机到底在看你什么?我抓到了它的真实工作流程 一起看看。
🐢 How we built the v0 iOS app
@含笑饮砒霜:Vercel 首款 iOS 应用 v0 的移动端负责人 Fernando Rojo 详细分享了应用的构建过程:团队以角逐苹果设计奖为目标,经多轮试验选定 React Native 和 Expo 技术栈,核心聚焦打造优质聊天体验,通过自定义钩子(如 useFirstMessageAnimation、useMessageBlankSize 等)、依赖 LegendList 等开源库实现消息动画、空白区域处理、键盘适配、漂浮作曲家等功能,解决了动态消息高度、滚动异常、原生交互适配等难题;同时在 Web 与原生应用间共享类型和辅助函数,通过自研 API 层保障跨端一致性,优先采用原生元素并针对 React Native 原生问题提交补丁优化;未来团队计划开源相关研究成果,持续改进 React Native 生态。
🐎 Opening up the Tuist Registry
@Kyle-Ye:Tuist Registry 宣布完全开放,无需认证或创建账户即可使用。作为 Swift 生态首个完全开放的 Package Registry,目前已托管近 10,000 个包和 160,000+ 个版本。使用 Registry 的团队可获得高达 91% 的磁盘空间节省(从 6.6 GB 降至 600 MB),CI 缓存恢复时间从 2 分钟缩短至 20 秒以内。开发者只需运行 tuist registry setup 或 swift package-registry set 命令即可配置,支持标准 Xcode 项目、Tuist 生成项目和 Swift Package。未认证用户每分钟可发起 10,000 次请求,对于大多数项目已足够使用。
🐕 Initializing @Observable classes within the SwiftUI hierarchy
@AidenRao:本文探讨了在 SwiftUI 中正确初始化和管理 @Observable 对象的几种模式。作者通过清晰的代码示例,层层递进地讲解了使用 @State 的必要性、如何通过 .task 修饰符避免不必要的初始化开销,以及如何利用 environment 实现跨场景的状态共享。如果你对 @Observable 的生命周期管理还有疑惑,这篇文章会给你清晰的答案。
🐕 Demystifying the profraw format
@david-clang:本文深入剖析了 LLVM 用于代码覆盖率分析的 .profraw 二进制文件格式及其生成机制。其核心原理分为编译时插桩与运行时记录两步:
- 编译时,Clang 的
-fprofile-instr-generate选项会在程序中插入计数器 (__profc_*) 和元数据 (__profd_*) 到特定的 ELF 节中,并在关键执行点插入 Load/Add/Store 指令进行实时计量。 - 运行时,LLVM 运行时库通过
atexit()钩子,在程序终止时自动将内存中这些节的最终数据序列化到.profraw文件中。该文件依次包含 Header、Data 段(元数据)、Counters 段(执行次数)和 Names 段,完整记录了代码执行轨迹。
工具
🐕 CodeEdit
@JonyFang:CodeEdit 是一个面向 macOS 的开源代码编辑器项目,使用 Swift/SwiftUI 开发并由社区维护。README 将其定位为纯 macOS 原生编辑器,并以 TextEdit 与 Xcode 作为两端参照:在保持更简洁的使用体验的同时,按需扩展到更完整的编辑与开发能力,并遵循 Apple Human Interface Guidelines。项目目前处于开发中,官方提示暂不建议用于生产环境,可通过 pre-release 版本试用并在 Issues/Discussions 反馈。README 列出的功能包括语法高亮、代码补全、项目级查找替换、代码片段、内置终端、任务运行、调试、Git 集成、代码评审与扩展等。
代码
🐕 mlx-swift-lm
@Barney:MLX Swift LM 是一个面向 Apple 平台的 Swift 包 , 让开发者能够轻松构建 LLM 和 VLM 应用。通过一行命令即可从 Hugging Face Hub 加载数千个模型 , 支持 LoRA 微调和量化优化。提供 MLXLLM、MLXVLM、MLXLMCommon、MLXEmbedders 四个库 , 涵盖语言模型、视觉模型和嵌入模型的完整实现。开发者只需几行代码就能创建对话系统 , 所有功能通过 Swift Package Manager 便捷集成。
内推
重新开始更新「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)
老司机 iOS 周报 #359 | 2025-12-01
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🌟 🐕 从「写代码」到「验代码」:AI 搭档写走 3 年,我踩出来的协作路线图
@JonyFang: 这篇文章给我的最大启发是:AI Coding 的价值,不在于让你更快写代码,而在于让你反思、重构「整个工程流程/协作方式」。
把 AI 当成一台「超级写代码机」很容易:但如果你这样想,就容易陷入“生成–调试–纠错–折腾–没效率”的恶性循环。相反,把 AI 当成「半自动化助理 + 智能实习生」,并在团队层面投入标准化 + 自动化 + 质量流程建设 -- 才是值得的、可持续的生产力提升路径。
🐕 Open source case study: Listening to our users
@Barney:文章强调了开源软件相较于 Apple 官方框架的核心优势:与用户的紧密互动。通过 SQLiteData 库的三个案例,用户驱动的功能定制、社区贡献的工具改进、快速修复的共享 bug,充分说明了活跃维护者的价值所在。开源库能在数小时到数周内响应用户需求,无需等待 WWDC 或新版本发布,这种敏捷迭代的开发模式,正是第三方库相比官方框架最值得信赖的地方。
🐎 A deep dive into notifications and messages on iOS 26
@极速男孩:这篇文章分析了 iOS 26 的新消息(Message)API。它作为传统 NotificationCenter 的替代品,提供了编译时的类型安全和并发安全保证,解决了旧 API(如闭包式)易出错的问题。
文章详细对比了新旧 API,并重点介绍了新 API(如 MainActorMessage)的优势。一个关键特性是,新旧 API 可以“桥接”互通,允许开发者逐步迁移。尽管新 API 在观察时获取具体发送者上有限制,但仍是未来的首选方案。
🐎 When To Kill A Project
@含笑饮砒霜:这篇文章是《War Stories》系列访谈的一部分,聚焦 iOS 领域知名开发者戴夫・弗沃(Dave Verwer)30 年职业生涯中的项目经验,核心围绕 “何时该终止一个项目” 展开,通过多个真实案例分享了成功与失败带来的关键启示。戴夫的经验本质上围绕 “理性决策” 展开:无论是失败的项目(及时止损、诚信负责)、误判市场的项目(重视真实需求调研),还是完成使命的成功项目(主动退出),核心都是 “聚焦有价值的部分,砍掉无效投入”。同时,信任、社区协作和对行业趋势的预判,也是项目决策中不可或缺的因素。
🐢 How to Build Scalable White-Label iOS Apps: From Multi-Target to Modular Architecture
@AidenRao:白标 iOS 应用是一个可重用的应用模板,可以针对多个客户 / 品牌进行定制和重新包装。本文探讨了 iOS 白标 App 的架构演进之路,从多 Target 方案的维护困境出发,深入讲解了如何借助模块化思想,通过有效的依赖与配置管理,构建一个更具可维护性与可扩展性的统一代码库。
🐎 Task Identity
极速男孩:文章指出 SwiftUI .task 的常见陷阱:它默认只在视图出现时运行,不会自动响应属性变化。若 View 的入参更新,Task 不会重跑,导致数据不同步。解决方案是使用 .task(id: 依赖项)。通过显式绑定依赖(如 url),当值变化时,SwiftUI 会自动取消旧任务并重启新任务,确保副作用逻辑与最新状态保持一致。
🐎 Pitfalls of Parameterized Tests
@david-clang:本文分享了 Swift Testing 中参数化测试的五大常见陷阱,并提出了关键的最佳实践。其核心思想是:应在测试数据中预先建立清晰的“输入-输出”映射关系,并使用预定义的静态值作为期望结果,从根本上避免测试逻辑与实现逻辑的耦合。
🐎 ScrollView snapping in SwiftUI
@DylanYang:作者向我们介绍了在 SwiftUI 中如何通过设置 scrollTargetBehavior 来调整 ScrollView 滑动的目标位置,除了我们在 UIKit 中熟知的按页滑动 .paging 选项外,还有 .viewAligned 选项允许我们按照 view 的尺寸来决定滑动的终点。文中有较多动图展示,感兴趣的读者可以阅读本文了解更详细的信息。
🐎 Building Peer-to-Peer Sessions: Advertising and Browsing Devices
@Damien:文章详解用 Multipeer Connectivity 框架实现 iOS 近场通信:配置权限、初始化 PeerSessionManager,用 MCNearbyServiceAdvertiser 广播自身并自动接受连接,同时用 MCNearbyServiceBrowser 发现与维护设备列表,附完整 Swift 源码展示如何整合广告、浏览、会话管理等功能,实现设备间的加密点对点通信。
工具
Mole:像鼹鼠一样深入挖掘来清理你的 Mac
@EyreFree:Mole 是一款面向 macOS 系统的工具,可以大概理解为是 CleanMyMac + AppCleaner + DaisyDisk + Sensei + iStat 的聚合,主要作用如下:
- 系统状态监控:通过
mo status命令提供交互式仪表盘,实时展示 CPU、内存、磁盘、网络等系统关键指标,支持 Vim 风格导航操作; - 系统清理功能:可安全清理系统缓存,提供
--dry-run预览模式和白名单管理功能,降低误删风险,还支持通过mo touchid启用 Touch ID 授权sudo操作; - 磁盘分析能力:借助
mo analyze命令分析磁盘占用情况,帮助识别大文件和缓存条目,便于用户释放存储空间。
对于需要管理 macOS 系统资源、进行系统清理或监控的团队成员来说,Mole 是一个实用的工具选择。
🐎 30 分钟解决 Claude 封号问题:程序员的终极自救指南
@阿权:文章详细介绍如何通过自建 VPS 解决 Claude 封号问题,包含完整的服务器搭建、客户端配置和开发工具设置步骤,让你稳定使用 Claude Code 等 AI 开发工具。
关键解决的痛点是:IP 不纯净。使用公共代理(机场 / VPN)易触发 Claude 风控封号。解决思路也很简单:自建 VPS。
代码
🐎 MachOSwiftSection: 🔬 A Swift library for parsing mach-o files to obtain Swift information.
@Kyle-Ye: MachOSwiftSection 是一个用于解析 Mach-O 文件并提取 Swift 元数据信息的 Swift 库。它基于 MachOKit 扩展实现 , 可以从编译后的二进制文件中提取协议描述符(Protocol Descriptors)、协议遵循关系(Protocol Conformance)和类型上下文描述符(Type Context Descriptors)等核心信息。该库同时提供了 Swift 包和命令行工具 swift-section,支持对二进制文件进行多架构分析和信息导出。对于需要进行逆向工程、安全分析或从编译产物生成 Swift 接口文件的开发者来说,这是一个实用的底层工具。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
- [北京/上海] 京东 - iOS/Android/鸿蒙/前端
具体信息请移步: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)
老司机 iOS 周报 #358 | 2025-11-17
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新闻
objc4-950 源码更新
Runtime 的源码发布新版本,主要更新的是 Xcode26 的 objc_storeStrong 的逻辑,有兴趣可以自行查看。
App Store Mini App Partner Program 隆重推出
参与计划的开发者在销售符合条件的 App 内购买项目时,可享受 15% 的收益抽成减免。需要适配 Advanced Commerce API (ACA) 。微信已经发公告预计会进行接入,期待后续更多中国公司都能同样谈成优惠,让更多增值业务在 iOS 端上线。
文章
🌟 🐢 Optimize your app's speed and efficiency | Meet with Apple
@Smallfly:该视频围绕应用性能优化展开,结合苹果开发中心的实践场景,系统讲解了从 Swift UI 渲染到数据流管理的多维度优化策略。核心内容包括:
- 工具与调试:通过 Xcode 实时观察界面渲染状态(黄色闪烁标记),使用功耗分析工具量化优化效果;推荐 Instruments 分析视图更新效率,明确性能瓶颈。
- 技术实践:针对 Swift UI 提出减少视图更新的关键方法——避免存储闭包、初始化时预计算视图结果;利用
Observable类优化数据流,降低卡片视图对状态变量的依赖。 - 性能指标:强调监控启动时间、镜头应用延迟等关键指标,通过自动化测试发现问题;结合 Snap 的实践案例,说明团队协作与指标导向对维护应用健康的重要性。
视频通过代码演示与数据对比,为开发者提供了从工具使用到工程实践的全链路优化指南,特别提到 Liquid Glass 和 SwiftUI 的优化,推荐有兴趣的同学按需观看。
🐕 何时组建计算机性能工程团队(2025 年)第 1 部分(共 2 部分
@含笑饮砒霜:作者在文章中分享了非厂商性质技术密集型企业组建性能工程团队的核心建议,指出该团队能通过基础设施成本节约、延迟降低、可扩展性与可靠性提升、工程速度加快实现显著投资回报(如初期可减半基础设施成本,长期每年目标 5%-10% 成本节约),详细说明了性能工程师在新产品测试调优、内部工具开发、瓶颈分析、参数优化等十大核心职责,并给出组建时机与团队规模的参考规则(基础设施年支出超 100 万美元配 1 名工程师,后续每 1000-2000 万美元增 1 名;团队支出应不低于可观测性监测支出;延迟或可靠性阻碍增长时需组建),同时提及部分企业已有相关专职人员可纳入考量,后续第二部分将补充职位描述、潜在陷阱等内容。
🐕 TN3193: Managing the on-device foundation model’s context window
@JonyFang: Apple 在这篇技术说明中系统讲解了设备端基础模型的上下文窗口限制以及开发者应如何应对。文章强调:本地模型不会自动截断超长输入,超过窗口会直接报错,因此必须在应用设计中主动“预算”与管理上下文。Apple 建议使用三类策略来保持对话连续性同时不溢出窗口:
- 滑动窗口:只保留最新内容,旧内容逐步丢弃;
- 机会型摘要:上下文接近上限时触发自动总结,把详细内容压缩成短摘要继续对话;
- 选择性保留 / 层级压缩:按重要性保留关键信息,把次要内容丢弃或按主题分层压缩,需要时再检索。
整体来看,TN3193 的核心信息是:Apple 设备端模型的上下文有限,开发者必须自行设计“记忆管理策略”,否则会遇到输入过长错误。通过“滑动 + 摘要 + 保留”组合策略,可在有限窗口内维持长对话与复杂任务的质量。
🐕 Demystifying AI Coding Agents in Swift
@Cooper Chen:这篇文章不仅手把手带你构建了一个可工作的 Swift AI Coding Agent,更重要的是,它用非常清晰、务实的方式揭开了 "AI 编码助理" 背后的底层原理。作者强调:这些看似强大的智能行为,其实都是从「语言模型 + 工具 + 循环」这三件极其简单的事组合而成,让人一下子从使用者变成真正理解者。
文章最大的价值在于 去魅 + 实操。它不讲虚的,不堆概念,而是用不到 300 行的 Swift 代码,就实现了一个能读文件、写代码、重构逻辑、与用户来回对话的 Coding Agent,让读者第一次意识到 Cursor、Claude Code 这类产品背后并没有不可思议的魔法。
与此同时,作者也展示了真实工程中会遇到的问题:上下文膨胀、循环保护、安全、错误处理、工具设计等,让内容不仅能“跑起来”,还具备工程实用性。
如果你想理解 Coding Agent 的本质,或者想自己打造一个轻量但功能完整的 Swift Agent,这篇文章绝对值得一读。它让复杂的概念变得透明,让看似神秘的 AI 能力真正变成可掌握、可自行构建的技术。
🐢 Roadmap for Improving the Type Checker
@AidenRao:你是否也曾被 the compiler is unable to type-check this expression in reasonable time 的错误困扰?Swift 编译器团队最近发布了一份详细的路线图,旨在系统性地解决这一由来已久的问题。文章深入浅出地解释了类型检查慢的根源——由类型推导和重载解析带来的指数级复杂度。
路线图不仅展示了近期 Swift 6.2 和 6.3 在编译速度上取得的显著成果(真实项目检查时间从 42 秒降至 10 秒),还规划了未来的改进方向:包括加速大型集合字面量检查、移除历史性能 Hack,乃至引入更先进的 SAT 求解技术。如果你对 Swift 编译性能的未来走向感兴趣,这篇文章值得一读。
🐎 来了解一下,为什么你的 Flutter WebView 在 iOS 26 上有点击问题?
@david-clang:iOS 26 上 WebView 点击失效,核心仍是 iOS 18.2 起 WKWebView 的手势状态缓存问题。
当 WebView 被 Flutter overlay 遮挡时,Flutter 通过 delayingGestureRecognizer 延迟 overlay 下方的 UIKit recognizer,使其暂时不触发,从而让 overlay 接管触摸。但 iOS 18.2 起 WKWebView 的手势状态缓存问题导致 overlay 消失后,WKWebView 内部的点击 recognizer 状态仍停留在延迟状态,未能恢复到 recognized,tap 或 JS click 无法派发,元素只能高亮却无法响应点击。
解决方案:
- 短期规避:使用 pointer_interceptor 在 WebView 上方覆盖一个透明层,阻止 overlay 引发的手势中断,从而避免点击失效。
- 长期方案:Flutter 官方正在弃用 delayingRecognizer,改为基于 hitTest + FFI 同步判断 的手势体系,在触点处直接判断是否应拦截手势,从根本解决 WebView、AdMob 等 PlatformView 的手势冲突问题。
代码
🐢 Swift Binary Parsing
@阿权:Apple 官方开源的二进制解析库,使用纯 Swift 编写,旨在构建安全、高效的二进制解析。该库提供了一系列用于安全解析二进制数据的工具,同时管理类型和内存安全,以消除常见的基于值的未定义行为,例如类型溢出。
Swift 一直致力于将不安全的内存操作尽可能安全地让用户访问、修改,此库跟 Swift 的思想如出一辙,本来之前 Apple 强推用 Swift 替代 C/C++ 直接操作内存,包括嵌入式也是这个切入点,此库一出如同如虎添翼了,也算是给内存操作提供一套完整的最佳实践了。
内推
重新开始更新「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)
老司机 iOS 周报 #356 | 2025-10-27
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新手推荐
🐕 Derived Data: 5 Things iOS Developers Do Wrong
@极速男孩:这篇文章总结了 iOS 开发者常对 Derived Data 犯的 5 个错误:
- 不理解其用途
- 手动查找文件夹
- 出错时删除整个根目录(应只删特定项目的)
- 不监控构建时间
- 不检查
.app产物以优化
文章
🐕 Why a custom ViewModifier is often useless
@Barney:文章主要阐述何时需要创建自定义 ViewModifier。作者指出,若只需封装不涉及 @State 或 @Environment 的修饰符,直接使用 View 扩展方法即可,无需创建 ViewModifier 结构体。仅当需要管理状态或使用属性包装器时,才必须创建 ViewModifier 以正确处理这些需求。简而言之,ViewModifier 并非总是必需的,应根据实际需求选择合适的实现方式。
🐎 Don't make this mistake with a TaskGroup
@Smallfly:这篇文章聚焦 Swift 并发编程中 TaskGroup 的常见误用场景,通过示例代码揭示任务结果顺序的潜在问题,并提供简洁的解决方案。核心内容包括:
- 问题现象:首次使用
TaskGroup时,任务结果默认按完成顺序返回,而非任务创建顺序,导致数组结果顺序随机(如fetchData(id:)模拟网络延迟后,结果顺序与id无关)。 - 解决方法:修改任务返回值为元组(包含原始参数与结果),例如
(index, result),收集结果后通过参数排序,确保最终数组顺序与任务创建顺序一致。
文章通过具体代码演示问题与修复过程,为开发者避免 TaskGroup 使用中的「顺序陷阱」提供了清晰的实践指导。
🐕 深入理解 Flutter 的 PlatformView 如何在鸿蒙平台实现混合开发
@david-clang:本文深入解析了 Flutter 在鸿蒙平台实现 PlatformView 同层渲染的技术方案,其核心实现机制如下:
- 渲染架构基础:采用类似 Android 的 VD 模式,通过 ArkUI 的
NodeContainer作为占位容器,BuilderNode将原生 ArkUI 组件转换为可渲染纹理。 - 数据驱动管理:基于
DVModel数据模型驱动DynamicView进行节点的动态挂载与更新,契合鸿蒙声明式 UI 架构。 - 纹理合成流水线:Flutter Engine 通过鸿蒙 Graphic2D 创建
OH_NativeImage,该实例同时作为 Surface 供BuilderNode渲染 ArkUI 控件,并作为 Texture 供 Flutter 引用与合成。 - 事件传递机制:触摸事件从 Dart 层下发,经
EmbeddingNodeController中转并转发至原生组件,确保交互响应。 - 组件生命周期:通过
EmbeddingNodeController管理BuilderNode的创建与销毁,实现 PlatformView 的完整生命周期管理。
代码
🐕 An Apple Intelligence-Style Glow Effect in SwiftUI
@阿权:文章通过“多图层描边 + 模糊 + 动态渐变”的组合,复现了 Apple Intelligence 风格的发光效果,且支持所有 InsettableShape。你可以用它来突出按钮、卡片或文本容器,为界面增添现代感和表现力。
代码细节详见 GitHub repo。
内推
重新开始更新「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)
老司机 iOS 周报 #355 | 2025-10-20
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🐎 使用 @_private(sourceFile:) 测试 Swift 私有成员
@阿权:私有成员一直是单元测试的难题,以往的做法要么公开其成员,要么封装供测试的接口,本文提出可以用 @_private(sourceFile:) 测试私有成员。该标识是非公开 API,是编译器专用的接口,可绕过访问控制。不过前提需要为目标模块添加编译标志 -enable-private-imports,允许其私有成员被外部测试访问,并需用条件编译宏包裹,以防后续编译器更新导致 API 不可用。
通过这种方式,可以在完全不修改原有接口的前提下自由地编写单元测试代码。
Building 17 Agentic AI Patterns and Their Role in Large-Scale AI Systems
@EyreFree:本文聚焦大规模 AI 系统构建,提出 17 种智能体架构及应用场景,含多智能体系统、集成决策、思维树(ToT)等。以 LangChain、LangGraph、LangSmith 为工具栈,详细解析各架构实现流程,如反思架构通过生成 - 批判 - 优化提升输出质量,ReAct 架构借 “思考 - 行动 - 观察” 循环解决多步骤问题,PEV 架构增验证环节应对工具失效。还介绍组合架构思路,强调不同架构协同可实现复杂任务,且附 GitHub 代码库供实践,为大规模 AI 系统开发提供全面参考,在做 AI 相关开发的同学可以看看。
🐎 iOS 26 你的 property 崩了吗?
@Kyle-Ye: iOS 26 Runtime 在 objc_storeStrong 实现中引入了哨兵值机制(0x400000000000bad0),主动暴露 nonatomic 属性的并发访问问题。新实现在写入新值之前,会先向属性地址写入哨兵值,创建一个"危险窗口"。任何在此窗口期间的并发读写操作都会必然触发 EXC_BAD_ACCESS 崩溃,而不再依赖于对象引用计数等不确定因素。文章详细剖析了写写并发(objc_release 崩溃)和读写并发(objc_retain 崩溃)两种典型场景,并介绍了快手自研的 Ekko 安全气垫框架如何通过兜底 Mach 异常来进行崩溃止损。对于维护线上 App 稳定性的开发者来说,这个系统级变更影响全量版本,建议重点关注 nonatomic 属性的线程安全问题,必要时改用 atomic 或添加额外的安全气垫机制进行兜底。
🐕 Build Your First 24/7 Agentic Loop
@Cooper Chen:如果你想了解“ AI Agent 是否能真正实现持续自主执行任务”,WeZZard 的文章与配套项目是极具价值的入门参考。
该文章提出了一个极简且可工程化复用的方法论:
Contract(合同)+ Loop(循环)+ Runtime(运行时)。借助高阶模型(如 Claude 4 或未来的 GPT-5),通过结构化 JSON 协议与工具调用,系统即可在评估者(Evaluator)与执行者(Executor)之间持续推进任务,实现 24/7 agentic 工作流。
配套开源仓库 《agentic-loop-playground》实现了一个完整示例:
- 自动扫描并处理代码中的
TODO/FIXME - evaluator 决策,executor 执行
- 循环驱动任务直至完成
这是一种无需复杂框架即可落地的智能代理构建方式,非常适合开发者快速启动个人或团队级 Agent 流程。
🐕 Understanding Live Activities: visual micro-storytelling
@AidenRao:这篇文章是关于 iOS 16 引入的 Live Activities(实时活动)功能的设计指南。
- Live Activities 是一种实时微界面,可以在锁屏、灵动岛等处显示应用动态更新。适用于有时间敏感、状态变化的任务,例如:
- 状态跟踪:如外卖配送、出行导航。
- 计时器:如烹饪、停车计时。
- 阶段进程:如电商订单进度。
- 实时更新:如体育比赛得分。
- 不适用情况:静态信息(如天气温度)或非关键更新(如社交点赞),应使用通知或小组件。
Live Activities 的核心是帮助用户快速获取关键动态信息,减少频繁打开应用的需要。设计时应以用户需求为中心,避免滥用。
🐎 iOS 17 + SwiftUI TextField 内存泄漏分析
@DylanYang:iOS 17 引入的 AutoFillUI 框架使得在使用 UITextField 时会发生不预期的内存泄漏,当 UITextField 成为第一响应者且用户离开视图时就会发生。由于在 SwfitUI 中 TextField 可以通过 .environmentObject() 保持对大型对象图的引用,因此在 SwiftUI 中内存泄漏的问题会更严重一点。对问题起因和绕过方式感兴趣的同学可以阅读本文作进一步了解。
内推
重新开始更新「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)
老司机 iOS 周报 #354 | 2025-10-13
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新手推荐
🐎 Understanding Deflate
@xiaofei86:本文通过手工解码一个 gzip 文件,简单探究了其压缩算法 Deflate 的工作机制,Deflate 结合了 LZ77 算法与 Huffman 编码,通过用 “复制指令” 替代重复片段实现无损压缩。作者以字符串 "TOBEORNOTTOBEORTOBEORNOT" 为例,先解析 gzip 文件头尾结构,再根据 Deflate 规范逐位还原压缩块内容,实现了从 24 字节到 16 字节的压缩。感兴趣的同学可以阅读更多文章了解 ~
文章
🐢 Code along with the Foundation Models framework
@Cooper Chen:这篇文章介绍了 Apple 在 WWDC 2025 推出的 Foundation Models 框架,展示了如何在 iOS 与 macOS 应用中直接调用系统内置的大语言模型,实现真正的 on-device AI。通过一个“旅行行程生成器”的示例,作者带你一步步完成从文本生成到结构化输出的全过程,深入展示 Apple Intelligence 的开发潜力。
主要亮点包括:
- 隐私与安全:模型完全在设备上运行,无需上传数据或调用云端接口。
- 结构化输出:利用
@Generable让模型直接生成 Swift 类型的数据,而非普通文本。 - 提示优化技巧:通过 instructions、示例(one-shot)提升输出质量与稳定性。
- 流式响应:实时展示生成过程,让用户体验更自然流畅。
- 工具调用(Tool Calling):让模型能主动调用外部函数或服务,融合实时数据与智能生成。
这篇文章不仅是一份技术指南,更是 Apple 对 AI 未来方向的实践展示。
它强调 隐私优先、系统原生、开发高效 的理念,是每位希望深入了解 Apple Intelligence 的开发者必读之作。
🐎 Enabling enhanced security for your app
@Damien:这篇文章介绍了如何在 Xcode 中为应用启用增强安全性的方法,包括启用地址空间布局随机化(ASLR)、栈保护、堆保护、整数溢出检查和缓冲区溢出检查等编译器安全功能,以防御常见漏洞并提升应用抗攻击能力。
🐕 How to install Xcode 26's Metal Toolchain on CI/CD
@Barney:我来帮您获取并总结这篇文章的内容。这篇文章介绍了 Xcode 26 不再默认包含 Metal 工具链的问题及解决方案。在本地开发时可通过 Xcode 偏好设置安装,但在 CI/CD 环境(包括 Xcode Cloud)中需要使用 xcodebuild 命令行工具手动下载和安装。文章提供了具体的脚本代码,建议在 Xcode Cloud 中作为 post clone 脚本运行。
工具
swift-profile-recorder
@Smallfly:Swift Profile Recorder 是一款「进程内」采样分析器,专为受限容器环境而生:不需要 CAP_SYS_PTRACE,就能在 Linux 与 macOS 上抓取 on-CPU 与 off-CPU 样本,定位真实的性能瓶颈。你只需以 Swift 包集成并启用内置服务器,即可用一次 curl 拿到已符号化的 Linux perf 格式数据,直接拖到 Speedscope / Firefox Profiler 或用 FlameGraph 生成火焰图。集成轻量、开销可控,特别适合线上 Kubernetes/Docker 场景的故障排查与持续优化。
内推
重新开始更新「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)
老司机 iOS 周报 #353 | 2025-09-29
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🐢 We Need to Talk About Observation
@Smallfly:这篇文章深度探讨了 Swift 观察机制的新旧范式更迭,从 ObservableObject + Combine 的旧时代到 @Observable 宏 + Observations 结构体的新生态,揭示了迁移过程中的关键挑战与设计考量。核心内容包括:
- 旧范式的价值:回顾
@Published+Combine在对象间观察(如UserCoordinator与SyncEngine)的简洁性——自动管理订阅生命周期、支持跨对象响应,为复杂业务逻辑提供低耦合解决方案。 - 新范式的突破与局限:分析
@Observable宏在 SwiftUI 集成(属性访问优化、嵌套支持)的优势,同时指出withObservationTracking(单次触发需递归调用)与Observations结构体(任务生命周期管理复杂)在非 UI 场景的不足——订阅取消需手动管理Task、对象弱引用易出错。 - 迁移建议:强调选择方案时需超越 UI 层考量,关注业务逻辑中对象间观察的实际需求,避免因新特性的「表面简洁」忽略生命周期管理的潜在风险。
文章以开发者视角对比新旧机制的工程实践差异,为理解 Swift 观察体系演进提供了务实的参考。
🐕 Xcode Migrations: From Stone Age to AI Mastery
@Barney:这篇文章讲述了 Qonto 团队如何将 Xcode 升级从三周噩梦转变为一天自动化流程。
背景: 60+ iOS 工程师团队面临 Xcode 升级瘫痪开发流程的问题,依赖管理冲突和构建失败频发。
核心改进:
- 架构优化:移除 CocoaPods,统一使用 Swift Package Manager
- 自动化监控:Swift 构建的 Xcode Release Checker,CI 监控版本发布并 Slack 通知
- 沟通策略:建立迁移门户和可视化时间线,团队理解度从 33% 提升至 90%
- CLI 工具:Swift 自动化迁移流程,包括分支创建、构建清理、版本更新等
- AI 集成:构建 Swift MCP 工具和 Xcode Migrator AI 助手,提供 24/7 技术支持
⠀效果: 迁移时间从 21+ 天缩短至 5 天(75% 减少),60+ 工程师零工作中断。通过持续改进理念,将最大痛点转化为竞争优势,目标进一步缩短至 1 小时。
🐢 iOS Rendering Documentation
@Kyle-Ye: 这份文档深入剖析了 iOS 渲染系统的底层架构,详细阐述了从 UIView 到 CALayer、CAContext 再到 FBSScene 的完整渲染管道。文档特别解释了 Front Board Scene (FBS) 的工作机制以及 CAContext 的 contextID 如何用于跨进程 IPC 通信。内容涵盖了层级合成模型、场景管理、渲染同步、动画协调等核心概念,为理解 iOS 图形系统提供了前所未有的技术深度。对于需要进行系统级渲染研究、性能优化或底层拦截开发的高级 iOS 开发者来说,这是一份极其宝贵的参考资料。
🐎 Should you opt-in to Swift 6.2 ’ s Main Actor isolation?
@DylanYang:Xcode26 为工程带来了新的 actor 隔离默认配置值,允许全局的代码默认运行在 main actor 上。作者通过一些 demo 讲述了启动此配置后能帮助我们简化大量的标记 @mainactor 的代码,降低了并发代码的复杂度。同时作者建议大部分情况下可以默认开启此配置,并通过 @Concurrent 标记来让特定代码去后台线程运行。感兴趣的开发者可以阅读本文详细了解下开关带来的实际影响。
🐎 Flutter 官方 LLM 动态 UI 库 flutter_genui 发布,让 App UI 自己生成 UI
@Crazy:现今在开发者领域 AI 已经进入了日常开发的方方面面,AI 生成 UI 也是大模型落地的一个方面,Flutter 官方更是开发了一个可以利用大模型动态生成 UI 的库,该库用“受控、可组合、可回传状态”的运行时 UI 替代文本,显著提升 AI 交互质量,并且与主流 LLM 框架的顺滑对接。但是更新也更加频繁,UI 的更新消耗也是很大的。该库主要的五个概念分别为 :UiAgent、Widget Catalog、AiClient、GenUiManager、GenUiSurface。关于具体的生成,可以看文章中的实例与图片演示。文章中提到的 Filebase 与 Gemini,都是由 Google 开发的,对国内开发者都不是很友好。
内推
重新开始更新「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)









