阅读视图

发现新文章,点击刷新页面。

老司机 iOS 周报 #358 | 2025-11-17

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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 同层渲染的技术方案,其核心实现机制如下:

  1. 渲染架构基础:采用类似 Android 的 VD 模式,通过 ArkUI 的 NodeContainer 作为占位容器,BuilderNode 将原生 ArkUI 组件转换为可渲染纹理。
  2. 数据驱动管理:基于 DVModel 数据模型驱动 DynamicView 进行节点的动态挂载与更新,契合鸿蒙声明式 UI 架构。
  3. 纹理合成流水线:Flutter Engine 通过鸿蒙 Graphic2D 创建 OH_NativeImage,该实例同时作为 Surface 供 BuilderNode 渲染 ArkUI 控件,并作为 Texture 供 Flutter 引用与合成。
  4. 事件传递机制:触摸事件从 Dart 层下发,经 EmbeddingNodeController 中转并转发至原生组件,确保交互响应。
  5. 组件生命周期:通过 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

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

文章

🐢 We Need to Talk About Observation

@Smallfly:这篇文章深度探讨了 Swift 观察机制的新旧范式更迭,从 ObservableObject + Combine 的旧时代到 @Observable 宏 + Observations 结构体的新生态,揭示了迁移过程中的关键挑战与设计考量。核心内容包括:

  • 旧范式的价值:回顾 @Published + Combine 在对象间观察(如 UserCoordinatorSyncEngine)的简洁性——自动管理订阅生命周期、支持跨对象响应,为复杂业务逻辑提供低耦合解决方案。
  • 新范式的突破与局限:分析 @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)

老司机 iOS 周报 #352 | 2025-09-22

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

🌟 🐕 Swift 6.2 正式发布

@kemchenj:随着 Swift 语言本身走向成熟,每年的更新慢慢的已经不是集中在语言功能上,投入了更多的精力到工具链和生态建设上。

更加平易近人的 Concurrency

  • 默认使用 @MainActor,减少显式的 isolation 标记
  • 更加直观的 async 函数,默认在 caller 的上下文里执行,让 class 类型里可以用更简洁直观的方式去实现没有数据竞争的逻辑
  • 新增 @concurrent 函数注解,把任务派发到全局任务池

前两个功能都是可以手动开启和关闭的,由于前面两个功能开启后,非 actor 环境下的 async 函数全部都会派发到 @MainActor 执行,导致主线程负载变大,所以新增 @concurrent 可以制定任务派发到全局线程。这几套组合拳下来大大加强了 Concurrency 的易用性。

安全的系统级编程功能

  • InlineArray:固定大小的内联数组
  • Span:可以理解为类型安全的 Buffer 类型
  • 嵌入式 Swift:新增全套 String / InlineArray / Span API
  • C++ 互操作:可以通过 header 标注混合使用两个语言里的 Span 的类型

工具链

  • VSCode 插件更新
  • 更加细化的编译警告控制
  • 更快的 Macro 编译速度(通过下载预编译的 swift-syntax 包)
  • 优化 async 调试功能的体验和稳定性

核心库更新

  • Subprocess:一套全新的 Swift 原生进程接口
  • Foundation:NotificationCenter 新增一套类型安全,拥抱 Concurrency 的接口
  • Observation:提供更加易用的 async sequence 接口
  • swift-testing:新增 API 提高测试代码的表达能力

更多详细信息请查看原文。

文章

🌟 🐢 KMP on iOS 深度工程化:模块化、并发编译与 98% 增量构建加速

@JonyFang: 本文主要介绍了 Bilibili KMP 在 iOS 工程化的一些深度改造,达成模块化、并发编译与 98% 增量构建加速的目标。主要通过对 Kotlin/Native 编译管线的深度拆解与重构,系统性地解决了其在模块化、编译并发和增量构建方面的核心瓶颈。

在构建系统与编译速度上 :实现了 Parallel Compilation,将每个 Kotlin 模块独立编译为 .a 文件,在一些日常的底层修改的场景下最终产物编译耗时降低 98% 。这充分释放了 Bazel 的高并发优势,结合可靠的 remote cache 机制达到 Never clean build 的预期。

在编码与跨语言交互上:摆脱了 KMP 默认的“大一统”框架模式。通过为每个 Kotlin 模块生成独立的 Clang module ,并以 @ObjCExport 注解精确控制导出,实现了真正的模块化。

在调试与工程化上:通过修复 source-map 路径和实现可靠的 implementation_deps ,保证了跨语言调试的稳定性和构建的确定性,解决了社区方案中的常见痛点。

也推荐几篇前几期的相关阅读:

🐎 Automating Github Action Workflows For Swift

@Damien:作者重启搁置的 ActionBuilder 项目,通过扫描 Package.swift 实现零配置生成 GitHub Actions tests.yml,借 Swiftly 自动识别 Swift 版本并调度 Linux/macOS runner,对 iOS 等 Apple 平台则调用 Xcode 构建且已适配 Swift 6.0-6.2,未来将以轻量 CLI 取代插件,可直接嵌入 Xcode build phase 随编译自动更新工作流。

🐕 认知负荷才是关键

@zhangferry:编程领域有很多指导性的理论知识,但这些业界的实践,为什么并非总是有效呢?基于这个问题本文引出认知负荷这个概念:认知负荷是指开发者为了完成一项任务需要动多少脑子。从人的视角出发,以是否便于理解来衡量代码好坏,并给出了以下 4 个降低认知负荷的原则:

  • 模块设计:不应一味的强调小方法,小模块,这会导致过多的接口和代码关联,增加认知负荷。深方法,深模块,一定程度把复杂度限定在特定范围,整体维护成本更低。

  • 架构选择:不应为体现技术水平采用过于复杂的架构,易懂、易理解的架构才更合适。文中还建议在架构评审时可以让初级开发者参与,以识别过于复杂的设计。

  • 抽象和代码组织:不应过于追求 DRY(不要重复自己),而大量使用设计模式,微服务等,少量的重复比不必要的依赖更好。

  • 心智模型:传统推崇的心智模型(领域驱动设计 DDD)有其优势,但副作用是会引入很多主观理解,这个基础之上开发的代码往往会有更高的认知负荷。好的代码应该便于理解,而不是追求优雅和复杂。

延伸的几种观念,可能只看名称你就能知道个大概了:「可能是时候停止推荐《代码整洁之道》」、「小型函数的弊端」、「为什么我讨厌“框架”」、「设计牺牲」

🐢 阿权的开发经验小集

@阿权:阿权的日常开发小集,记录了日常开发中踩过的大小坑,内容主要涵盖 Git、iOS、Swift、Xcode 等方面问题的总结。按需搜索,说不定有意外的惊喜。

🐕 iOS26 Runtime Changes:Concurrent mutation of nonatomic properties

@ChengzhiHuang:对于 NSObject 的 property 是 nonatomic 的对象类型时,多线程的 set/get 会存在线程安全问题(非对象一样存在问题,只是不会崩溃),一个简单的修改方案是改为 atomic,注意这个只对一般对象有效。如果是 NSMutableDictionary 等容器对象,还需要考虑对其容器内内容的修改也要注意线程安全,一般得加锁解决;更极端需要多个属性同时保持同步则也得加锁。问题不仅在 property 中存在,全局变量也一样存在问题。具体可以参考我们推荐过的 头条稳定性治理:ARC 环境中对 Objective-C 对象赋值的 Crash 隐患

在 iOS 26 以前,一般概率发生的崩溃崩溃的栈顶也在 objc_retain/objc_release 中;在 iOS 26 及之后,则如果发生这种线程安全问题,栈顶函数不变的情况下,会有明确的 EXC_BAD_ACCESS(KERN_INVALID_ADDRESS) 地址为 0x400000000000bad0 让这种情况更容易被辨识。

当然这也会带来一定的副作用,由于实现方式是通过 objc_storeStrong 方法中插入汇编,实现在调用 objc_retain 前,将 0x400000000000bad0 写入 x1 ,再正常调用 objc_retain 方法(正常 objc_retain 只接收一个参数,因此只需要 x0 即可)。因此原本偶现的问题,概率是会被放大的(以前即使有问题,但也有概率不崩溃),因此 iOS 26 的崩溃率对大部分应用来说会上升。稳定性同学要面临年末指标上涨的压力了,毕竟 iOS 26 的覆盖率会快速提升。

但从更长的视角来看,在 iOS 26 暴露了更多问题后,开发者修复后,后续的新版本对低 OS 的用户也带来体验的提升,所以总体我还是偏正常得看待这个 feature 的,等于苹果开启了对一类问题的线上 TSan ,并且对性能的影响微乎其微。短期的阵痛后带来的是更长期的体验提升。美中不足的就是如果这项 feature 能像 malloc 的一些开关(malloc stack logging 等),能让开发者自主控制按一定比例开启就更好了,能有更多时间修复以及控制对升级到 iOS 26 用户的影响。

更具体的一些细节可以看链接。

🐕 How to disable Liquid Glass

@Cooper Chen:在 iOS 26 中,苹果推出了全新的 Liquid Glass 设计系统,为界面带来了更透明、流动的视觉体验。但如果你的 App 还没做好适配,用户可能会遇到界面错乱的问题。作者在文章中给出了一个简洁的解决方案:通过在 Info.plist 中新增键值 UIDesignRequiresCompatibility = YES,就能让应用暂时保持旧版设计,避免因 Liquid Glass 引发的兼容性 bug。不过要注意,这只是临时方案,苹果计划在 iOS 27 移除该选项。也就是说,开发者需要尽快着手适配 Liquid Glass,以确保用户体验的连贯性和未来的稳定性。对于想稳妥过渡到新系统的团队来说,这是一个既务实又必须关注的技巧。

设计

🐕 marioaguzman Design Guidelines layout marioaguzman Design Guidelines toolbar

@含笑饮砒霜:这两篇文章系统阐述了 macOS 应用在窗口布局和工具栏设计上的核心规范与实践原则:在窗口布局上,需要遵循中心均衡、对齐、留白和视觉平衡的原则,合理安排常规、小型和迷你控件的位置与间距,并通过空白、分隔线或分组框组织控件,确保界面简洁一致;在工具栏设计上,应基于用户的心智模型挑选并排序常用功能,合理区分全局与界面项,正确处理侧边栏和检查器的切换,注意标题、副标题、溢出优先级与居中项的使用,同时结合不同样式(统一、紧凑、扩展、偏好)以及底部栏、附加栏和系统内置特殊控件,实现美观、直观且高效的用户体验。

内推

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

What's Changed

Full Changelog: #351...#352

老司机 iOS 周报 #351 | 2025-09-15

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

Memory Integrity Enforcement: A complete vision for memory safety in Apple devices

@Damien:本文章是 Apple 推出的 Memory Integrity Enforcement(MIE)技术,结合自研芯片与系统级安全机制,为 iPhone 17 系列提供业界首个全时开启的内存安全保护,无需用户感知即可防御缓冲区溢出、释放后使用等漏洞。该功能基于增强版 Arm 内存标记扩展(EMTE),配合安全内存分配器与标签保密技术,显著增加间谍软件等高级攻击的开发成本,Apple 称之为“消费级操作系统内存安全史上最大升级”。

文章

🐎 SwiftUI WebView

@DylanYang:作者向我们介绍了 Swift UI 中新引入的 WebView 组件。它有非常简单的初始化方式,同时也兼具了很多我们在使用 WKWebview 时经常会用到的功能,如页面加载各个时机的回调、自定义的 scheme handler、js 注入等。作者提供了一个完善的 demo 来展示这些能力。感兴趣的读者可以阅读下本文。

🐎 Debugging Swift Concurrency: “ Am I on the Main Actor? ”

@JonyFang: Swift Concurrency 调试推荐做思维上的转变:从线程思维转向 Actor 思维,关注"我在哪个 Actor 上"而非"我在哪个线程上"。文中描述了 MainActor.assertIsolated()MainActor.preconditionIsolated() 在 Debug 和 Release 模式下的差异用法。整体在推荐拥抱 Swift 6 的并发安全模型,让 Actor 成为开发过程中思考并发的基础单元。

🐎 Building a design system at Genius Scan

@david-clang:文章详细介绍了如何利用 SwiftUI 的组合思想和环境机制,为应用构建灵活的设计系统。核心是通过创建可复用的基础组件(如 Row),并利用 ViewBuilder 和 Environment 实现样式配置与定制,从而高效解决 UI 一致性与代码复用问题。

🐕 Four Corners: the first game in Catalog written in Swift

@极速男孩:Playdate 游戏《Four Corners》被开发者 Steven Chipman 用 Swift 重写,成为 Catalog 中首款 Swift 游戏。此举旨在探索 Swift 在 Playdate 上的性能潜力。Chipman 熟悉 Swift,选择重写此游戏是因为它相对简单且存在性能瓶颈。尽管遇到了缺少部分 API 和 Foundation 库的挑战,以及调试困难,但 PlaydateKit 库极大地简化了开发。Chipman 认为 Swift 的优势(如 C 级性能和易用性)胜过这些不便,并计划未来继续使用 Swift 开发 Playdate 游戏。他还因此重启了《Four Corners》的 iOS 版本。

🐎 Implementing a Refractive Glass Shader in Metal

@BluesJiang:这篇文章使用 Metal Shader 来自己尝试实现类似苹果 Liquid Glass 的效果,介绍了玻璃效果的各个组成部分,已经相关的算法。同时也演示了算法中的各个参数是如何影响最终的效果的。推荐有自定义液态玻璃效果的需求或者是想了解相关的实现方式的开发者阅读。

内推

重新开始更新「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 周报 #350 | 2025-09-08

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

文章

🐕 What's New in the Lambda V2 Runtime (Beta)

@Kyle-Ye: Lambda V2 Runtime 是 AWS Lambda Swift 运行时的重大升级,核心改进是使用 Swift 结构化并发重写了内部实现。新版本引入了更灵活的执行模型,开发者可以控制 main 函数入口,支持后台执行(LambdaWithBackgroundProcessingHandler)和流式响应(StreamingLambdaHandler)等高级特性。同时提供了统一的服务生命周期管理机制,让 Lambda 函数能够优雅地处理初始化和清理工作。对于需要在 AWS Lambda 上运行 Swift 代码的开发者来说,V2 运行时带来了更强大的控制能力和更好的性能表现,值得关注并适时迁移。

🐎 Flutter 小技巧之有趣的 UI 骨架屏框架 skeletonizer

@Crazy:骨架图是 app 中经常用来等待网络加载的一种方式,这种方式可以更友好的让用户知道 app 的状态。Skeletonizer 可以让使用者快速的完成骨架图的功能开发,只需把布局包裹在 Skeletonizer 外层,开启 enabled: true 即可得到骨架屏动画。简单来说 skeletonizer 就是通过自定义 PaintingContext 拦截处理 child 的渲染,让原 UI 直接转化为骨架,而不是手写一份骨架版 UI。还可以通过配置来实现更精细的控制骨架化逻辑,比如跳过、合并等。但是越复杂的界面实现起来也就越困难,很多时候需要自己来实现骨架图。这篇文章主要是给大家一个思路,这种实现方案不仅可以用于骨架图,也可以用来其他的功能开发。

🐕 果味儿幽灵 -- Xcode 新 AI 助手深度解析

@Smallfly:这篇文章深度拆解了 Xcode 26 全新 AI 助手的技术内核,从源码到行为策略揭示其「苹果味儿」的设计逻辑。核心内容包括:

  • 架构设计:采用 Planner-Executor 模型,planner 负责意图分类与方案规划,executor 调用 edit_file 等工具执行代码修改,确保行为确定性。
  • 策略驱动:通过外部 .idechatprompttemplate 文件定义「苹果优先」规则,强制使用 Swift Concurrency、Swift Testing 等技术,甚至要求回答「苹果新特性」前必须调用 search_additional_documentation 检索内部文档。
  • 扩展潜力:prompts 外置、工具动态加载的设计,为开发者定制助手提供可能——修改文本模板或注入自定义工具即可调整其「灵魂」。
  • 对比价值:与 Cursor、Claude Code 等工具对比,突出 Xcode AI 在 IDE 深度集成、企业合规上的优势。

文章结合框架源码与实践案例,为开发者理解这一「执拗」助手的行为逻辑,甚至是二次定制提供了关键视角。

🐎 iOS 26 正式版即将发布,Flutter 完成全新 devicectl + lldb 的 Debug JIT 运行支持

@david-clang:Apple 在 iOS 26 中禁止 Debug 时 mprotectRX 权限,将导致真机无法在 Debug Mode 编译成功的错误,Flutter 之前采取的 hack 方案会导致容易出现 Timed out *** to update 错误,现在的方案是在  iOS 17+ 和 Xcode 26+ 上利用 devicectllldb 突破 RX 权限限制, 完成了全新 LLDB 调试的适配迁移。

🐎 What makes Claude Code so damn good (and how to recreate that magic in your agent)!?

@zhangferry:在编程领域为什么总感觉 Claude Code 比其他 Agent 要强不少?除了模型本身的差异,更重要的是对 Agent 的设计逻辑上,本文罗列了几点值得借鉴的 Agent 设计原则。

  1. 控制逻辑设计
  • 只保留一个主循环,最多增加一个处理分支。过多分支路径下既容易出错,还不容易调试
  • 一些简单工作比如读文件、总结记录等交给小模型处理
  1. Prompts 设计
  • 要有一个整体的配置文件(类似 claude.md)以记录用户偏好,比如跳过某些文件夹,使用特定的库。来自 MinusX 的实践,在 AI 首次遇到一些不了解的专有名词时,会自动提醒要不要补充信息到该配置文件。
  • 一些标记或者示例,可以使用 XML 标签或者 Markdown 语法,以强化提醒
  1. Tools 设计
  • 在内容搜索时使用 jq、find 这类轻量工具而不是 RAG 这种重工具
  • 给工具分类,低级工具(bash 命令、读文件)、中级工具(grep、glob)、高级工具(网页搜索等 MCP),每个工具都注明其适用场景
  • 让 AI 自己管理 todo list。长任务里,AI 容易忘事,就让它自己写待办、随时看,还能中途改,避免做到一半 “跑偏”
  1. 可控性设计
  • 语气和风格限制,使得 AI 回答更简洁
  • 对于重要的规则,使用这些关键字 IMPORTANTNEVER 会很有效
  • 「什么时候该做什么,不该做什么」不易过多,因为他们容易冲突,处理逻辑的关键步骤需补充一些启发式的方法和处理策略

代码

awesome-nano-bananaawesome-gpt4o-images

@EyreFree:当下 AI 生图技术发展迅猛,Nano Banana 和 GPT-4o 备受关注。Nano Banana 基于谷歌 Gemini 2.5 Flash Image 架构,解决了角色一致性等难题,能深度理解物理逻辑,支持对话式编辑,在商业、营销及个人创作等领域应用广泛。GPT-4o 是 OpenAI 的多模态大模型,风格多样,构图真实,便于再编辑且响应迅速,常用于广告、艺术、设计等场景。相关的 JimmyLv/awesome-nano-bananajamez-bondos/awesome-gpt4o-images 仓库,收集了大量图像案例与提示词,为探索 AI 生图技术提供了丰富资源。

内推

重新开始更新「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 周报 #349 | 2025-09-01

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

文章

🐎 Why I'm Not Using Xcode 26's AI Chat Integration (And What Could Change My Mind)

@阿权:文章者结合自身开发体验,分析了 Xcode 26 中 AI 集成的不足,并建议 Apple 补齐(作者也是恨铁不成钢啊!):

  1. 请求队列:AI 功能会阻塞输入,无法 “边等待边规划”,打断开发思路。
  2. 上下文工程支持:不支持输入上下文文档,需反复解释编码规则,难以调教。
  3. 构建验证能力:无法自行构建、读取错误日志,频繁依赖人工操作,打断开发节奏。
  4. Git 集成:无法搜索历史、对比版本、自动提交,无法利用代码历史辅助开发(如恢复旧代码、更新文档)。
  5. 终端与 CLI 访问:无法通过终端运行自定义的 CLI 工具,简化多任务工作流。
  6. 项目文件限制:无法打开多仓库文件夹,适配复杂项目结构的能力差。
  7. 网页搜索与文档访问:无法获取最新 API / 提案信息,需手动查找,降低信息获取效率。

作者认为 Xcode AI 目前更像个 “功能展示”(有但难用),而非真正的生产力工具,核心问题是未围绕 “ AI 驱动开发” 的工作流设计(如频繁的人工干预、缺少自动化能力)。

为此,作者也是放弃了 Xcode 转向了 Cursor + Claude Code。

🐎 Working with partially generated content in Xcode previews

@DylanYang:iOS 26 有了新的 Foundation Models 框架支持开发者通过系统端侧的模型来生成一些数据,本文作者在此之上探索了如何让 Xcode Preview 功能和这些端生成的数据结构进行交互预览。预览 SwiftUI 的静态布局的话我们可以通过代码构造对应的数据结构来 mock 一个实现,此外也可以通过 json 的方式构造一个 GeneratedContent 作为端生成数据结构的初始化参数。如果需要验证流式输出对于 UI 布局的影响,则可以借助 AsyncThrowingStream 来模拟模型生成的场景。

🐢 From GPT-2 to gpt-oss: Analyzing the Architectural Advances And How They Stack Up Against Qwen3

@阿权:本文围绕 OpenAI 新发布的开放权重模型 gpt-oss(20B/120B)展开,对比了从 GPT-2 的架构演进,并与 Qwen3 的特性进行对比,最后总结其实用价值和局限。内容可概括为:

从 GPT-2 到 gpt-oss 的架构演进:

演进点 旧设计(GPT-2) 新设计(gpt-oss) 收益
正则化 Dropout 无 Dropout 单轮训练场景无过拟合风险,提升效率
位置编码 绝对位置编码 RoPE(旋转位置编码) 支持更长上下文,减少参数
激活函数 GELU + 2 层前馈 SwiGLU + 3 层门控前馈 降低计算成本,增强表达能力
前馈模块 单前馈模块 MoE(混合专家模型) 平衡模型容量与推理效率
注意力机制 MHA(多头注意力) GQA(分组查询注意力) 减少显存与计算开销
长上下文优化 滑动窗口注意力(128 token) 进一步降低长文本推理成本
归一化层 LayerNorm RMSNorm 简化计算,提升 GPU 训练效率
推理控制 推理强度可调(低 / 中 / 高) 平衡成本与准确率

gpt-oss 与 Qwen3 模型差异较小,在一些特性上各有千秋:

维度 gpt-oss-20B Qwen3 30B-A3B
架构权衡 更宽(嵌入维度 2880)、少量大型专家(32 个) 更深(48 个 Transformer 块)、大量小型专家(128 个)
长上下文处理 滑动窗口(13.1 万 token),但设计了 Attention Bias、Attention Sinks 纯 GQA 支持更长上下文(26.2 万 token)

实用价值与局限:

  • 优势:MXFP4 优化适配单 GPU(20B 需 16GB 显存,120B 需 80GB 显存),推理强度可调,性能接近闭源模型;
  • 局限:幻觉率较高,无训练代码 / 数据集(仅开源权重与推理代码),未提供基础模型;
  • 未来潜力:随着工具集成成熟,可通过调用外部资源(如搜索引擎)弥补知识遗忘,进一步释放推理能力。

总体而言,gpt-oss 的发布丰富了开源 LLM 生态,为需要本地部署、高推理能力的场景提供了新选择,也为研究 Transformer 架构演进提供了重要参考。

注意:尽管 gpt-oss 名称中,oss 为 Open-source Software,但官方明确它只是开放权重(Open-weight)模型,仅提供模型权重与推理代码,而非完全开源。

🐕 GPT-5 Thinking System Prompts Leak

@Barney:这份提示词让我们看到 GPT-5 Thinking 模型的内部运作机制。核心内容包括:
知识边界:模型知识截止 2024 年 6 月,当前时间设定为 2025 年 8 月,具备 Web 搜索、Python 分析、图像生成等多种工具集成能力
交互规范:采用三通道架构(analysis、commentary、final),支持富文本 UI 组件(图片轮播、产品卡片、图表),强制要求立即完成任务不可推诿
安全机制:严格的事实核查要求(需引用来源),时效性信息强制网络验证,设有 1-10 级详细度控制参数
为理解大语言模型的提示工程和安全设计提供了珍贵的第一手资料,对 AI 应用开发者极具参考价值。

🐕 Corner concentricity in SwiftUI on iOS 26

@AidenRao:iOS 26 的同心圆角(Corner Concentricity)是苹果在 WWDC 2025 上强调的一项重要设计理念和视觉特性。同心圆角的核心思想是让嵌套的 UI 元素具有和谐一致的圆角,即使它们的大小或层级不同,其圆角的视觉“圆心”也尽可能保持一致,从而营造出统一、精致且富有纵深感的界面效果。

SwiftUI 引入了 ConcentricRectangle 这个新的 API,帮助开发者更高效地在复杂布局中实现完美的同心圆角效果,让界面设计更加统一与精致。

🐕 MNN LLM Chat iOS 流式输出优化实践

@JonyFang: 本文针对 iOS 应用中部署大语言模型(LLM)时出现的文字流式输出卡顿问题,提出了一套高效的三层优化方案:通过智能流缓冲解决模型输出与 UI 更新的频率不匹配,利用 UI 更新批处理与节流降低主线程压力,并借助打字机动画渲染增强视觉流畅性。这一方案提升了本地 LLM 应用的交互体验,适合开发高性能 AI 聊天应用的团队参考实践。其开源实现:MNN GitHub 项目 - https://github.com/alibaba/MNN

内推

重新开始更新「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 周报 #348 | 2025-08-25

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新手推荐

🐎 High Level Anatomy of a Camera Capturing Session

@AidenRao:这边文章用比较简单易懂的话,介绍苹果的相机从拍摄到 Swift 中展示的完整流程。文章不长,比较适合做个相机原理了解。

文章

🌟 🐕 从 DisplayList 到 Transaction: SwiftUI 调试实战

@Kyle-Ye: 文章介绍了如何通过 SwiftUI 中的相关环境变量,使用 DisplayList 输出分析视图渲染问题,通过符号断点和汇编调试深入分析 SwiftUI 内部机制,并使用 AttributeGraph 等调试工具进行问题定位。

🐕 Faster Equatable and Hashable conformances with Identifiable

@Smallfly:这篇文章聚焦 Swift 中 EquatableHashable 协议的性能优化,揭示了编译器自动合成实现的潜在瓶颈,并提出结合 Identifiable 协议的改进方案。核心内容包括:

  • 问题分析:默认合成的 Equatable/Hashable 会逐成员比较或哈希,对含大集合(如 [User])或嵌套结构的类型,复杂度达 O(N),在 SwiftUI 视图更新、Set 操作中易成性能瓶颈。
  • 优化方案:利用 Identifiableid 属性(如 UUID),仅基于唯一标识实现 EquatableHashable,将操作复杂度降至 O(1)。
  • 数据验证:基准测试显示,含 1000+ 员工的 Company 类型,Identifiable 方案的 Equatable 快 3 倍,Hashable 快 3 万倍。

文章结合编译器源码与 SwiftUI 实践,为性能敏感场景提供了可落地的优化思路。

🐢 What's New in UIKit

@Barney:这篇文章详细总结了 iOS 26 中 UIKit 的全面更新。尽管 UIKit 不再是 WWDC 的主角,但今年仍获得了大量新特性。
主要更新概况:
Liquid Glass 设计语言:新增 UIGlassEffectUIButton.Configuration 的玻璃按钮样式,以及 UIBarButtonItem 的共享背景支持
• 导航栏增强:UINavigationItem 新增 subtitlelargeTitleattributedTitle 等属性,支持更丰富的标题展示
• 分割视图改进:UISplitViewController 支持新的 inspector 列,提供类似 macOS 的检查器面板
• 标签栏配件:UITabAccessory 允许在标签栏上方添加浮动工具栏,支持折叠展开动画
• HDR 色彩支持:UIColor 新增 HDR 初始化方法,UIColorPickerViewController 支持曝光调节
• 角落配置 API:UICornerConfiguration 提供统一的圆角设置方案,支持容器同心圆角
• 自然文本选择:UITextView 支持混合左右文字的自然选择,selectedRanges 替代 selectedRange
• 主菜单系统:UIMainMenuSystemiPadOS 提供 macOS 风格的菜单栏
• 观察者模式集成:UIViewUIViewController 原生支持 Swift Observation 框架
• 滑块增强:UISlider 新增刻度配置和无拖柄样式
整体而言,iOS 26 的 UIKit 更新聚焦于视觉现代化、跨平台一致性和开发便利性的提升。

🐕 SwiftUI for Mac 2025

@Cooper Chen:这篇文章总结了 SwiftUI 在 macOS 26 上的多项改进,主要亮点包括:

  • 统一图标格式:Xcode 26 新增 Icon Composer,可用 SVG 分层生成跨平台图标,并向下兼容旧系统。
  • Liquid Glass 风格:按钮、滑块、切换等控件拥有玻璃质感与动态反馈,UI 更现代。
  • 原生 WebView:SwiftUI 首次内置 WebView,无需桥接即可加载网页并追踪导航事件。
  • 列表性能优化:List 在处理上万条数据时依然流畅,适合大数据量展示。

整体来看,SwiftUI 在 Mac 上的易用性与表现力进一步提升,对想要打造现代化界面的开发者非常有参考价值。

🐎 Git 2.51 support push/pull stash

@david-clang:过去 git stash 难以在不同机器之间迁移,Git 在 8 月 18 日发布的 2.51.0 版本支持 push/pull stash,实现跨机器共享 stash。但要在 GUI 工具上应用该特性,还要再等等,目前 Fork 支持的 Git 版本是 2.45.2。

内推

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

What's Changed

Full Changelog: #347...#348

老司机 iOS 周报 #347 | 2025-08-18

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

文章

🐕 万字长文解码如何玩转Prompt(附实践应用)

@zhanggferry:这是一篇来自淘宝团队,讲解提示词工程(PE)非常全面的文章,包含业界各类优秀方法论,当你苦于 AI 「不听话」时可以从这里获取灵感。除了提示词设计的七个核心原则,还可以结合你的应用场景,考虑使用这六大高级技巧:

  • 思维链:提供「推理过程 + 答案」范例,激发 LLM 深度逻辑思考
  • 零样本思维链:无需范例,仅追加 “让我们一步一步地思考”,触发 LLM 分步推理
  • 自我一致性:调高模型温度,多次独立解答同一问题,按 “少数服从多数” 选最终答案
  • ReAct(思考与行动):以 “思考→行动→观察” 循环,让 LLM 调用外部工具(API、搜索引擎等)
  • 生成知识提示:先让 LLM 生成问题相关背景知识,再结合知识回答原问题
  • 结构化提示:用 XML、JSON、YAML 等严格格式定义提示词,消除歧义

🐕 @isolated(any)

@Smallfly:在 Swift 并发模型逐渐完善的过程中,@isolated(any) 作为一个相对低调却关键的特性,正在为 API 设计与任务调度提供新的可能性。

这篇文章系统地阐释了 @isolated(any) 的设计动机、语义价值以及在实际 API 中的应用方式。作者通过对比 GCD 与 Swift Concurrency,结合异步函数和 actor 隔离的案例,清晰展示了该属性如何让调度系统基于隔离信息做出更合理的决策。

对于大多数开发者而言,@isolated(any) 在日常编码中可能并不直接显现;但若你正在编写并发 API、涉及跨 actor 调度,或希望深入理解 Swift 并发体系的演进方向,这篇文章将为你提供扎实的理论支撑与实践启发。

🐎 Flutter 3.35 发布,快来看看有什么更新吧

@david-clang:这次更新除了常规的控件更新和性能优化外,还有两点值得关注下:

  1. 多窗口支持:在 Engine 层已实现在 Windows 和 macOS 中创建和更新窗口的基础逻辑 ( #168728 ),后续版本将更新 Linux 系统,并引入实验性 API 以支持多窗口功能。

    • 虽然官方还没提供多窗口 Demo 来展示 API 的使用,但社区已有人提交 Windows Demo 的PR,也可以通过 Multi Window 了解官方的进度。
  2. Dart & Flutter MCP:Dart 和 Flutter MCP Server 正式 stable 发布,主要是增强了 AI 编码助手的 Dart 和 Flutter 上下文,Dart 和 Flutter MCP Server 充当桥梁,可以让 AI 通过 Dart 和 Flutter 工具链访问项目的更多上下文:

    • 修复运行时错误 :检查实时 Widget 树,识别 Flutter RenderFlex 溢出,并自动应用正确的修复。
    • 管理依赖项 :在 pub.dev 上找到针对特定任务的最佳包,将其添加到 pubspec.yaml ,然后运行 pub get
    • 编写和纠正代码 :为新功能生成样板,然后自行纠正其在此过程中引入的任何分析错误。

代码

🐕 swiftlang/swift-subprocess: Subprocess is a cross-platform package for spawning processes in Swift.

@BarneySwift Subprocess 是 Apple 官方提供的一个用于在 Swift 中执行外部进程的现代化库。它提供了类型安全、结构化并发的 API 来启动和管理子进程,支持灵活的输入输出重定向、环境变量配置和进程控制。相比传统的 Process/NSTask API,它采用了 Swift 并发模型,让异步执行和错误处理更加优雅。该库是 Swift 生态系统中处理外部命令执行的标准解决方案。

🐎 Define the scroll edge effect style of a scroll view for Liquid Glass

@AidenRao:在 OS 26 的液态玻璃适配中,需要借助 OS 26 中引入的 scrollEdgeEffectStyle(_:for:) 方法,去控制滚动视图在边缘区域的样式,尤其是在与安全区域或系统 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 周报 #346 | 2025-08-11

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

文章

🐎 Uncertain

@DylanYang:作者向我们描述了原生确定的 Bool 值无法精确表达一些概率出现的场景,因此引入了 Uncertain 这样一个库。它将不确定性引入到了编码之中,它可以通过概率建模来描述一个事件的概率而非结果。这可以被用于 GPS 定位或者传感器噪声等含有不确定性的场景。实际使用时,开发者可以通过比对概率值来进行需要的逻辑开发。感兴趣的读者,可以阅读原文进一步了解。

🐢 一个半月高强度 Claude Code 使用后感受

@JonyFang: Claude Code 在"读懂代码→规划变更→实施改造→文档 / 测试"整链路提效明显,但必须用工程化流程与成本控制兜底。把它当"结对编程伙伴"和"高效审阅者",而不是自动合并器;产出视为草稿,经评审与测试落地更稳。

关键优势:

  • 跨文件 / 长上下文理解强,能给出可执行的分步计划
  • 重构、迁移、批量机械化改动效率高
  • 文档 / 测试 / 变更摘要产出质量好,便于知识传递
  • 对话式协作体验顺滑,降低思维切换成本

主要痛点与对策:

  • 成本易失控(重度 API/ 长上下文):设预算 / 配额与告警,精简上下文,结果缓存,订阅 +API 混合
  • 偶发幻觉 / 环境不匹配:在提示中明确版本 / 依赖,强制编译与测试,小步提交 + 代码评审
  • 长会话漂移:阶段性重置,会话内先对齐"当前共识",用固定提示模板
  • 合规与隐私:最小化 / 脱敏,优先企业版或私有部署,审计与密钥扫描

适用场景:原型与探索、跨文件重构 / 迁移、批量替换 / 格式化、补齐测试与文档、代码走查与交接

回避场景(尽量不让其直接改动):

  • 安全 / 核心关键路径:鉴权与权限、加密与密钥、支付 / 交易、隐私合规、一致性与并发、性能临界路径、底层 FFI(可让其做威胁建模 / 测试清单 / 审阅)
  • 强环境耦合构建:工具链与版本、依赖与构建系统、签名与发布、架构 /SDK 差异、链接与符号、脚本与环境变量(可让其做日志总结 / 排查清单 / 最小复现)

与其他工具对比:跨文件理解与规划普遍强于补全型 / 纯 IDE 聊天;但即时补全流畅度与深度 IDE 集成,部分竞品更占优

实施建议:

  • 工作流:先"读项目→列计划→小步提交 / 分 PR ",以测试 /CI 护栏把关
  • 提示工程:固定模板(项目约束 / 版本 / 风格 / 完成定义),限制改动范围与风险级别
  • 质量保障:单测优先、属性测试 / 回归套件、灰度发布与回滚预案

成本策略:设用量监控与告警;合并同类任务批处理;订阅与 API 按场景取舍;重度场景定期复盘性价比(作者实测重度使用可达数千美金级别)

适合人群:需要频繁跨文件改造与知识传递的团队 / 个人;维护大型代码库或做重构 / 迁移 / 文档化的工程师

🐕 @ViewConfigurable — A better way to build SwiftUI components

@AidenRao:如果你想将自定义组件有类似 SwiftUI 的语法,需要针对每一个配置去创建一个新的函数,用于实现链式调用。作者开发了一个名为 @ViewConfigurable 的宏,该宏将根据它在 ViewConfiguration 中看到的变量名自动生成这些链式调用函数,这也会让你的代码文件变的很简洁。

设计

🐢 Designing for the Eye

@阿权:本文围绕 "视觉错觉矫正" 展开,探讨其在排版与建筑中的应用,内容如下:

  1. 视觉错觉的普遍性
    • 以穆勒・莱尔错觉为例,说明视觉错觉对所有人(无论文化背景)的影响一致,甚至适用于动物与触觉感知。
    • 保罗・雷纳在《排版艺术》中指出:视觉艺术应以 "视觉呈现" 为基准,而非严格的测量数据—— 因为人类感知存在共性偏差。
  2. 排版中的视觉矫正
    • 以字体 "Futura" 为例,说明字体需通过微调来对抗视觉错觉:如字母 "O" 并非完美圆形,而是略宽于高,水平线条稍细于垂直线条,以避免 "蛋形" 错觉。
    • 字母设计需考虑整体协调:如 FF Tisa 的 "O" 上伸部分超出参考线,以平衡与其他字母的视觉重量,避免显得过小。
  3. 建筑中的视觉矫正
    • 以帕特农神庙为例,古希腊建筑师通过系统性调整抵消视觉偏差:
      • 柱身 "鼓肚"(entasis):柱子中间微凸,避免因收分导致的 "纤细感";
      • 地基弯曲:柱基呈凸形,防止视觉上的 "塌陷";
      • 柱子倾斜:所有柱子微微内倾,避免 "外倒" 错觉。
    • 这些调整让建筑 "看起来协调",而非追求几何完美,赋予其生命力。
  4. 深层意义:反对平庸,追求美与文化
    • 视觉矫正的本质是对 "视觉真实" 的尊重,体现了对细节与美的极致追求。
    • 对比现代 " Excel 思维" 主导的平庸设计(如冰冷的混凝土建筑),强调这种对微妙之处的关注是人性与文化的体现。
    • 引用乔布斯的观点:人类进步依赖于传播 "精华",让更多人理解美的微妙——这也是希腊人建造神庙、设计师打磨字体的根本原因。

文章最终呼吁:拒绝平庸,珍视那些让生活值得的 "美与文化"。

课程

Metal Shaders for SwiftUI

@BluesJiang: 这个是一个在 SwiftUI 框架上如何使用自定义的 Shader 来实现高级渲染效果的课程,包含了渲染相关的基础知识,也包含了 SwiftUI 如何兼容使用 Metal Shader 的相关知识。不算是通识的知识,但是对于那些使用 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 周报 #345 | 2025-08-04

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

App Store Connect 中的年龄分级现已更新

苹果在 iOS 26 及以后的商店中更新了更细化的年龄分级,在现有的 4+ 和 9+ 分级的基础上,更新后的年龄分级系统新增了三个分级:13+、16+ 和 18+。苹果已经向开发者发送了邮件提醒需要完成新的年龄分级调查问卷。大家可以按需填写更新分级。

分级的截止日期为 2026 年 1 月 13 日。

新手推荐

🐎 Deciding between 'let' and 'var' for Swift struct properties

@阿权:文章围绕 Swift 结构体中 let 与 var 的最佳实践与注意事项展开,内容如下:

  1. 结构体的可变性规则
    1. 可变性遵循“整体不可变则部分也不可变”规则(即使属性使用 var 声明)。
    2. var 声明的实例仅 var 属性可变,let 属性始终不可变。
  2. let 的使用场景
    1. 唯一 id 属性:一旦创建就不应改变,始终确保实例全局唯一的场景。
    2. 依赖初始化的属性:值初始化完成后,后续无需改变的场景。
    3. 声明为 let,表达了本质不可变的语义,避免了意外修改,也保证了数据一致性。
  3. var 的使用场景
    1. 状态属性:需随业务逻辑动态更新。
    2. 依赖属性:值需依赖外部条件刷新。
  4. 语义表达
    1. 两者的使用应更多考虑语义的表达,使其自文档性,let 暗示着永久不可变,var 暗示着可动态调整。
    2. 应管控 var 的使用,可提升代码的可预测性。

合理使用 let 与 var 能提升代码安全性、可读性和可维护性,也是 Swift 结构体设计的核心原则。

🐎 New Watch

@Kyle-Ye:一篇 watchOS UI 设计语言变迁的实践记录与设计取舍思考,推荐给关注 watchOS 适配与视觉一致性的开发者。

文章

🐕 A Peek into My Debugging Process (With Real Examples)

@Smallfly:这篇文章通过三个真实案例,分享了 iOS 开发者在实际项目中调试应用的完整流程,涵盖崩溃、性能回归与意外系统提示三类常见问题。核心调试策略包括:

  • 崩溃排查:结合崩溃日志(含 SwiftUI/AppKit 内部调用栈)、Diagnostics 工具定位网络失败上下文,用 Proxyman 模拟请求失败复现问题,最终通过调整 UI 布局(HStackoverlay)解决。
  • 性能优化:利用 Xcode Instruments 的 Time Profiler 发现串行网络请求,通过 Swift 结构化并发(async let 并行任务)提升加载效率。
  • 系统提示溯源:通过注释初始化代码、本地克隆第三方库,定位到 ProcessInfo().hostName 调用触发网络权限提示,最终通过库代码替换修复。

文章强调「调试时间主要花在定位而非修复」,系统掌握工具(崩溃日志、Proxyman、Instruments)与方法(二分排查、上下文分析)是提升效率的关键,为开发者提供了可复用的调试实践参考。

🐕 ChatGPT in Xcode 26: there ’ s a hidden prompt!

@AidenRao:Xcode 26 内置了 ChatGPT 功能,并在对话开始前注入一个隐藏提示词,用于优化 AI 编程助手的输出质量与安全性。了解提示的内容可以让我们更好地理解 ChatGPT 可以访问哪些信息以及苹果给出了什么上下文。

🐕 Combine and Swift Concurrency: A threading risk

@Barney:这篇文章探讨了从 Combine 迁移到 Swift Concurrency 过程中的线程安全风险。

核心问题: 作者在 RocketSim 项目升级到 Swift 6.2 严格并发模式后发现,使用 Combine 观察通知并调用 @MainActor 标记的方法时,当通知从非主线程发出会导致崩溃。

关键风险: Combinesink 闭包缺乏编译时线程安全检查,而直接使用 NotificationCenteraddObserver 方法则会在编译时报错。这种隐蔽性使得问题只在运行时暴露。

解决方案: 推荐迁移到 Swift Concurrencyfor await 语法观察通知,获得编译时安全保障。对于必须保留的 Combine 管道,建议在 sink 内使用 Task 包装或通过 receive(on:) 指定执行队列。

总结:CombineSwift Concurrency 混用存在隐性线程风险,应优先迁移到纯 Swift Concurrency 方案。

🐎 My 10 Tips for Using Claude Code

@david-clang:这篇文章总结了作者使用 Claude Code 的 10 个高效技巧,推荐给想提升 Claude 使用效率的开发者。包括自定义 Slash 命令、自动生成 commit 信息等加快开发效率的技巧,还有使用 ccusage 统计工具去监控 token 成本的技巧。

代码

Foundation Models Framework Example

@zhangferry:该仓库是 Foundation Models 框架的示例演示,除了基本能力:基础聊天、结构化数据生成、流式响应、Tools 调用的示例,还提供了基于这些能力打造的几个示例应用:语音相关的 AI 应用、健康数据分析的 AI 应用、Pokemon 分析的 AI 应用,作者还把常用的 Tools 封装成了一个 Tools 库。

Foundation Models 的优势在于本地执行、隐私保证、原生 API,一切看似很美好,但使用前别忘了这些限制:系统版本 26+ 且设备支持 Apple Intelligence。

内推

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

  • [北京 / 深圳] 抖音基础技术 - 代码分析方向 - iOS 资深研发工程师
  • [上海] BiliBili - 移动端开发实习生(社区生态)- 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 周报 #344 | 2025-07-28

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

文章

🐕 WWDC 2025: What's new for the Apple community?

@BluesJiang:这篇文章快速介绍了 WWDC25 的重要更新,很适合产品、开发者进行速览,快速发现自己关系的功能和相关技术的介绍。文章很贴心的将相关文档的链接内置的其中方便读者快速检阅。其中的液态玻璃的适配和 Apple Intelligent 是重点的更新项目,也是开发者比较值得关注的地方。因为液态玻璃的启用是系统默认行为,可能会带来不少适配的问题。文章也简单介绍了一下 Swift 和 SwiftUI 的更新。不过文章中没有特别介绍 visionOS 的相关更新,其实这方面苹果也开放了很多新能力来发掘 Apple Vision Pro 的潜能,非常值得相关开发者关注一下。

🐎 迁移至 Swift Actors

@Smallfly:这篇文章聚焦 Swift Actors 在实际项目中的迁移实践,针对传统并发方案(锁、队列)易遗漏保护、无法保证原子性的痛点,给出了 Actor 重构的具体路径。核心内容包括:

  • 数据模型重构:通过 actor 替代传统类,编译器强制属性隔离访问,从源头避免数据竞争;结合 performInIsolation 实现多属性原子操作。
  • 环境桥接:用 nonisolated 标记协议方法,通过 Task 异步调用隔离逻辑,兼容同步与并发环境。
  • 线程正确性@MainActor 标记类 / 属性,编译器检查调用链线程,解决 UI 更新等场景的崩溃隐患;解析 @preconcurrency 对 OC 导入类的影响,明确编译器警告边界。
  • 内部并发nonisolated 函数配合 async let 处理耗时任务,结合任务取消机制解决重入问题。

文章以 Uploader 和视图模型为例,串联工具链与代码细节,为老项目迁移至现代并发模型提供了可复用的实践参考。

🐢 CursorShenzhen 0608 讲师 PPT

@Cooper Chen:这是 6 月 8 日深圳 Cursor 技术讲座 PPT 合集,汇集了 6 位专家的精彩分享,其中包括:

  • 生产级 Cursor 应用——企业级开发规范、团队协作优化、工程化实践
  • AI 创业实战 —— 如何用 Cursor 构建 AI 公司,技术栈选择与商业化落地
  • 智能前端开发 —— Cursor + Figma 联动,自动生成高质量前端代码
  • 更多实战技巧——代码优化、Prompt 工程、AI 辅助调试与部署

特别适合正在使用 Cursor 的开发者学习参考。

🐕 Giving Claude Code Eyes to See Your SwiftUI Views

@Barney:本文探讨如何为 Claude Code 提供视觉能力来查看 SwiftUI 视图渲染结果,核心方案是通过 Swift Snapshot Testing 实现可视化验证工作流。

技术方案:配置测试套件,建立"生成快照→分析对比→优化代码→迭代验证"的闭环流程。
实战验证:通过重建用户列表界面测试发现,Claude Code 在图像分析方面存在局限性,难以精确识别字体、间距、颜色等细节差异。
结论:当前技术仍处于研究阶段,建议迭代不超过 3 次即引入人工干预,对于像素级需求直接提供设计稿更有效。

🐎 Modern Swift Lock: Mutex & the Synchronization Framework

@DylanYang:作者向我们介绍了 Swift 中的 Mutex 锁,Mutex 锁是 Swift 锁的其中一种,只需要在声明变量时将类型通过 Mutex 关键字包裹起来,后续所有对该变量的访问就都可以通过锁的方式进行从而避免多线程的数据竞争问题。Mutex 也可以和 Swift Concurrency 配合使用。而和 actor 相比 Mutex 更轻量,并且支持同步调用,开发者可以按需在他们之间做出选择。感兴趣的开发者可以阅读一下。

工具

Apple Docs MCP - Apple 开发者文档 MCP

@含笑饮砒霜:这是一个名为 Apple Docs MCP 的开源项目,提供一个 Model Context Protocol(MCP)服务器,专门用于让 AI 助理(如 Claude、Cursor、VS Code 中的 MCP 客户端等)能够通过自然语言查询访问 Apple 官方开发者文档:包括 iOS/macOS/watchOS/tvOS/visionOS 的框架 API、Sample Code、WWDC 视频内容等。如果你是 iOS/macOS 开发者,尤其需要查询最新 iOS 26 / SwiftUI、UIKit、AlarmKit 等 API,并希望 AI 助理能实时且正确地生成示例代码,这个工具可以极大简化流程。

内推

重新开始更新「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 周报 #343 | 2025-07-21

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新手推荐

🐎 Meet the Inspector view in SwiftUI

@阿权:文章介绍了 SwiftUI 中检查器视图(Inspector View)的用法:

  1. 基本概念与使用场景:
    1. 检查器视图用于展示主内容的附加信息,默认在右侧展示(macOS/iPadOS),在紧凑尺寸设备(如竖屏 iPhone)上以 sheet 形式呈现。
    2. 需要 macOS 14+ 和 iOS 17+。
  2. 基本用法:通过 inspector(isPresented:content:) 控制检查视图的显隐。
  3. 自定义宽度:支持固定宽度 inspectorColumnWidth(_:),和用户拖拽控制宽度 inspectorColumnWidth(min:ideal:max:)
  4. 检查器入口按钮与导航工具栏的适配,问题提供了三种适配方案。
  5. 在紧凑尺寸中的展示效果及其适配方案。

在苹果提供中的 App 中,检查视图是用户早已习惯的交互形式,使用检查视图可能提升 App 的专业性并提升用户体验。

文章

🌟 🐢 An open source tool to speed up iOS app launch

@ChengzhiHuang:Emerge Tools 提供了一个轻量级的收集 App 启动阶段内执行到的函数的收集工具,而不用修改编译选项(开启插桩),以此可以用来投喂给 Xcode 进行二进制重排,进而通过减少启动过程中的 Page In 数量来加快启动速度。技术方案是通过 Linkmap 或者 trick 的方式 收集函数起始的地址。然后对所有函数起始地址替换汇编指令为触发 ARM64_BREAK_INSTRUCTION 。在捕获断点后,记录下此方法,然后跳转原始逻辑继续执行。其中有非常多的细节,推荐对此感兴趣的同学阅读。

同时可以对此工具稍加改造,以此适配收集 App 任意阶段内的执行函数(如某个巨大模块),然后执行预热,以加快某个模块的冷启动首次进入耗时;同时其中涉及到与 SimpleDebugger 的联动,可以进行修改优化,目前是每个函数都执行一次 StopTheWorld + 替换单个函数汇编方便断点记录,可以修改为 批量执行一次 StopTheWorld + 替换所有需要函数。

🐕 Everything You Should Know About Spacer

@AidenRao:SwiftUI 提供了四种 Spacer 类型实现灵活布局:通用 Spacer 在可用空间内沿主轴扩展;_TextBaselineRelativeSpacer 支持文本基线对齐;_HSpacer/_VSpacer 严格限定方向。它们通过 PrimitiveSpacer 协议共享核心属性(minLengthaxisrequireTextBaselineSpacing

🐕 Swift 6.2 Java 互操作性实践

@含笑饮砒霜:这篇文章展示了如何通过 Swift 6.2 的 swift-java 包实现 Swift 与 Java 的高效互操作。整个过程通过标准工具链(SwiftPM + Makefile)自动化,从 Java 编译到 Swift 调用无缝衔接,大大简化了跨语言开发的复杂度。最终实现了 Swift 程序可以优雅地调用 Java 方法的目标。

🐕 What you need to know before migrating to Swift Testing

@JonyFang: 一篇 Swift Testing 迁移指南摘要,介绍了从传统 XCTest 框架迁移到 Swift Testing 框架前需要了解的关键信息。如:

  • Swift Testing 框架的主要优势和新特性
  • 迁移过程中可能遇到的常见兼容性问题
  • Swift Testing 与 XCTest 的语法和结构差异
  • 一些迁移策略建议和最佳实践

对于正在考虑升级测试框架的 iOS 开发者来说,这是一篇实用的参考指南。

代码

部分使用了 Data.bytes 的代码无法正常编译

@Smallfly:iOS 26 SDK 中 Foundation.Data 扩展了新的属性 var bytes: RawSpan { get },如果之前的实现里面使用了 CryptoSwift 对 Data 添加的 extension 中的 var bytes: Array<UInt8> 且未明确 import CryptoSwift 就会遇到编译器无法正确匹配实现的问题。

使用到的位置主动 import CryptoSwift 明确实现来源。

CryptoSwift 已将 extension 重命名为 byteArray ,PR

CrazyFanFan 提供信息

内推

重新开始更新「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 周报 #342 | 2025-07-14

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

Swift 宣布成立安卓工作组

Swift 官方宣布成立 Android 工作组,将 Android 列为官方支持的平台。该工作组的主要目标是为 Swift 语言添加并维护 Android 平台支持,让开发者能够使用 Swift 开发 Android 应用。

文章

🐕 A Swift Developer ’ s Guide to Prompt Engineering with Apple ’ s FoundationModels

@Barney:这篇文章是关于 Apple's FoundationModels 在 Swift 开发中的提示工程指南。Apple 的 Foundation Model 专门为 Swift 和 SwiftUI 训练,有 4096 token 的上下文限制。核心技术是使用 Generable 宏定义输出结构,通过 Guide 系统精确控制生成内容。文章强调属性顺序的重要性,因为 LLM 逐 token 生成。实用技巧包括自然语言长度修饰符、角色设定、少样本提示法和温度调节。对于用户输入,建议限制开放字段并妥善处理 guardrail 错误。为 Swift 开发者提供了原生、类型安全的 AI 集成方案。

🐕 Finding my Way

@Kyle-Ye: 独立 iOS 开发者 David Smith 分享了他在基于 iOS 26 设计语言重新设计 Pedometer++ 的地图功能的一些思考。文章详细描述了他的设计过程,包括如何让地图全屏显示、如何优化顶部按钮、如何设计浮动的信息面板等。

🐢 《别急于下定论:人工智能编程工具实则可能降低生产力》 Not So Fast: AI Coding Tools Can Actually Reduce Productivity

@Cooper Chen:在 AI 编程工具被广泛吹捧的背景下,METR 实验室通过一项严谨的随机对照试验(RCT)揭示了一个反直觉的结论:经验丰富的开发者在成熟项目中使用 AI 工具后,工作效率反而降低 19%。这项研究基于 16 位资深开源开发者在百万行代码项目中的 246 项真实任务,挑战了“ AI 必然提升效率”的行业共识。

关键发现:

  • 效率幻觉:开发者普遍预期 AI 能提速 24%,实际却拖慢 19%,认知偏差高达 40 个百分点。
  • 时间消耗:44% 的 AI 生成代码被废弃,开发者 9% 的时间用于修正 AI 输出,4% 在等待响应。
  • 适用场景:AI 在小型新项目中表现良好,但对复杂系统维护可能适得其反。

🐕 Schedule a countdown timer with AlarmKit

@阿权:文章详细介绍了如何使用 WWDC25 推出的 AlarmKit 框架实现倒计时提醒功能。过去要实现指定时间提醒功能,普通开发者只能通过苹果的通知推送。虽然通知能自定义时机甚至提醒铃声,但始终还是通知,在静音模式和专注模式下都无一幸免,要想像系统闹钟一样即使在静音和专注模式下还能提醒,只能通过新推出的 AlarmKit 了。AlarmKit 支持一次性闹钟、重复闹钟和立即开始的倒计时提醒,AlarmKit 提供的能力需要用户授权,并需要适配锁屏展示和灵动岛中的展示,具体配置可浏览原文。

只希望该功能不要被厂商滥用,尤其不要用在“加急”功能上啊!

🐎 Google I/O Extended :2025 Flutter 的现状与未来

@david-clang:本文的分享更侧重于科普类型的概括,包括 Flutter 的市场渗透率、技术进展、未来方向,其中有几个有趣的点:

  1. 市场渗透率:

    • Flutter 比 RN 的整体渗透率高:根据 2025 年 6 月腾讯端服务统计整体渗透率,Flutter 约 13%,RN 约 9%。另外,根据 Apptopia 统计,2024 年 AppStore 里 Flutter 占据所有新免费 iOS 应用的近 30%。
  2. 技术进展:

    • 线程合并:之前的 3.29 Android 和 iOS 默认合并 Dart UI 线程和平台线程,从最近 3.32 开始, Windows 和 macOS 也支持合并 Dart UI 线程和平台线程。
    • 多窗口:在本文发布后 2 天,对多窗口的支持已经合到主分支(#168728),在 Engine 层引入在 Windows、macOS 和未来 Linux 平台上创建并管理多个窗口的机制。
  3. 未来方向:

    • 移除 Cupertino 和 Material 的内置:对于 iOS 26 的液态玻璃实现,官方已经明确了不会内置支持,甚至连 Android 的最新  Material 3 Expressive 也是,长期来看,把特色控件从 Framework 内置移除,专注引擎优化,是个更好的方向。
    • ffigen/jnigen 持续优化:线程合并的主要目的,是为了抛弃历史产物 MethodChannel,而在互操作这件事情,未来肯定是 Dart 和平台语言直接互调用,而 3.32 也提到了,ffigen/jnigen 也在持续改进并内测,预计下半年会有全新的消息。

🐎 使用 Xcode 26 构建,在 (, iOS 26) 设备启动崩溃 Symbol not found: _NSUserActivityTypeBrowsingWeb

@DylanYang:使用 Xcode 26 构建包,跑在版本号小于 iOS 26 的系统上会在启动阶段遇到设备启动崩溃 Symbol not found: NSUserActivityTypeBrowsingWeb。原因是 CoreServices 在 iOS26 SDK 中重新导出了 NSUserActivityTypeBrowsingWeb 符号,导致链接时将符号绑定到了 CoreServices 模块。修复方案是把 Foundation 的在链接参数中的位置往前面提到 CoreServices 之前。

CrazyFanFan 提供信息

内推

重新开始更新「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 周报 #341 | 2025-07-07

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新手推荐

🐎 Don ‘ t Liquid Glass All the Things

@阿权:iOS 26 的液体玻璃效果让大家眼前一亮,大家可能已经在重新设计自己的 App,恨不得给所有 UI 都加上液态玻璃效果。文章提到液态玻璃效果容易滥用,导致界面的不和谐。使用液态玻璃的场景应该是用于突出按钮下方的内容,例如地图预览上方的操作按钮。换句话说,液态玻璃效果的控件会让控件自身与下方内容悬浮出来,形成两个解耦的交互层级,如果控件本身与内容是嵌合的二维依赖关系,则并不适合添加液态玻璃效果。

文章

🐢 深入解析| Cursor 编程实践经验分享

@Cooper Chen:本文深度剖析 AI 编程助手 Cursor 的进阶使用方法,为开发者提供一套可落地的效率提升方案:

1.Prompt 设计黄金法则

  • 采用"目标-背景-约束"三段式结构
  • 技术方案设计阶段明确禁止生成代码
  • 单测生成时附带示例代码确保风格统一

2.Rules 规范引擎

  • 自动生成项目专属开发规范(支持 Go/Java 等)
  • 中间件调用错误率降低至 0.3%
  • 通过"/"命令快速适配团队规范

3.工具链整合方案

  • 复杂需求使用 AutoGPT 进行任务分解
  • 技术调研调用 Claude 深度研究模式
  • 钉钉文档直接解析免去格式转换

本文提供的技术方案设计模板和开发规范 Rules 可直接复用,帮助开发者快速建立 AI 辅助编程工作流。文中揭示的"代码生成 + 架构决策"分层协作模式,为现代软件开发提供了高效的智能解决方案。

🐕 Flutter 里的像素对齐问题,深入理解为什么界面有时候会出现诡异的细线?

@david-clang:Flutter 界面中出现的诡异细线,本质原因是:

  1. 逻辑像素到物理像素转换出现浮点值(非整数 DPR、布局误差)。
  2. Skia 默认开启 AAA(Analytic Anti-Aliasing)抗锯齿处理,处理相邻同色元素时各自计算的像素覆盖率总和可能不足 100%(如 40% + 50% = 90%)。
  3. 未被覆盖的剩余部分(如上例的 10%)会显露背景色,形成半透明的细线。

解决方案是:

  1. pixel_snap:提前将逻辑像素换算物理像素,根本上避免转换后出现物理像素不对齐。
  2. Impeller: MSAA(Multisample Anti-Aliasing)抗锯齿处理,通过在每个像素内部采样多个点来获得更准确的边缘渲染效果,使那些原本因浮点误差产生的“半像素边缘”更加平滑自然,从而视觉上弱化或隐藏了细线问题。

🐕 Rewriting a 12 Year Old Objective-C iOS App with Claude Code

@Smallfly: 这是一篇非常详实的 AI 辅助开发实践分享。作者用 Claude Code 将一个 12 年前的 Objective-C 应用 Vinylogue 重写为 Swift + SwiftUI,仅用 7 天时间就完成了从架构升级到 App Store 上架的全流程。

文章的价值在于:

  1. 真实的成本分析 - 详细记录了理论花费 $353 vs 实际花费 $20 的对比,以及每日开发进度
  2. 实用的最佳实践 - 总结了大量 Claude Code 使用技巧,如使用 --quiet 标志、合理管理上下文窗口、创建反馈循环等
  3. 架构升级经验 - 展示了如何利用 AI 工具进行大规模重构,从传统架构升级到现代的 swift-dependencies + swift-sharing 架构
  4. 完整的开发流程 - 涵盖了从数据迁移、UI 适配到自动化截图生成的全过程

对于想要尝试 AI 辅助开发的 iOS 开发者来说,这篇文章提供了一个很好的参考框架。特别是文章中提到的"保持在宏观层面评估代码库,让 AI 处理微观层面的工作"这一理念,对提高开发效率很有启发意义。

🐕 Understanding and Improving SwiftUI Performance

@AidenRao:Airbnb 的 SwiftUI 性能优化分享:通过为视图自定义 Equatable 协议实现,仅在实际数据变化时触发重绘,避免不必要的视图更新。将大型视图分解为小型可差异化组件,配合复杂度检测工具(如 SwiftLint 规则)预警重构时机,减少单次渲染计算量。

代码

container

@老驴:Apple 最近发布了一个新的开源项目叫 Container,本质上是一个运行在 Linux 上,基于 Swift 和 Virtualization framework 的容器库。它的重点是更好地支持 Apple Silicon 芯片跑容器。 个人猜测,这可能是 Apple 为将来在自家服务器上使用 Apple Silicon 做准备的一步。毕竟一直有传言说 Apple 想让自家数据中心的服务器用上自研芯片,而要做到这一点,一个完善的容器方案是少不了的。

内推

重新开始更新「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 周报 #340 | 2025-06-30

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

文章

🌟 🐢 btrace 3.0 对外开源:重磅新增 iOS 支持!免插桩原理大揭秘!

@JonyFang: btrace 是字节开源的一款高性能 Android/iOS 端性能追踪(Tracing)工具,基于 Perfetto 进行数据展示。它能够详细记录方法的调用过程,精准分析耗时,并归因性能瓶颈,兼具高采样精度和低性能损耗。与 Apple 的 Time Profiler 等传统工具相比,btrace 更加灵活、可自定义,并支持系统方法追踪、有丰富的数据归因和可视化能力,能帮助开发者深入理解和优化 App 性能。

btrace 3.0 相比 2.0 的优化(iOS 视角):

  1. 采集方案升级。
    3.0 由单一编译期插桩,升级为“同步抓栈 + 异步抓栈”的混合采样方案。同步抓栈通过 hook 高频系统方法和关键节点,实时采集 Trace 数据;异步抓栈则通过独立采样线程定时回溯线程调用栈,保证采集的时间连续性。相比 2.0,3.0 大幅降低了接入和维护成本,采集更全面、对系统方法也支持更好。

  2. 数据存储与压缩优化。
    3.0 针对 Trace 数据量大、存储压力大等问题,设计了高效的调用栈去重与压缩结构。通过空间相似性(调用栈公共前缀合并)、时间相似性(连续相同栈合并)等手段,进一步减少内存和磁盘占用,提升了大体量数据下的可用性。

  3. 多线程与性能再提升。
    3.0 优化了多线程数据写入的并发安全性与性能,采用 CAS 等无锁 / 低锁技术,兼顾高性能与数据一致性,在复杂多线程场景下依然保持低开销。

  4. 死锁规避与线程采样精细化。
    异步采样时规避了 Time Profiler 可能导致的死锁风险,通过黑名单和信号安全 API 控制,提升了工具的稳定性。同时,仅采集活跃线程,有效降低了对 App 性能的影响。

  5. 丰富的性能归因与可视化。
    除了基本的方法调用追踪,3.0 进一步支持 CPU 时间、对象分配、缺页 / 上下文切换、线程阻塞等多维度的耗时归因,配合 Perfetto 可视化,帮助开发者一站式定位性能瓶颈。

  6. 易用性和生态提升。
    3.0 极大简化了接入流程,无需业务侧代码大改,无侵入式支持线上场景,支持性能自动诊断和多端(Android/iOS/ 鸿蒙 /Web)扩展,生态愈发完善。

整体来看,btrace 3.0 对 iOS 开发者而言,是一款集高性能、易用性、灵活性于一体的专业 Trace 工具。相比 2.0,3.0 大幅优化了采集方式、性能、安全性和数据分析能力,适合需要深入性能调优、线上问题定位和日常性能治理使用,推荐纳入工程实践!

🐕 避免在 Swift 中使用 self.

@AidenRao:这篇文章探讨了在 Swift 开发中避免不必要的 self. 前缀使用,利用编译器检查减少循环引用风险。它基于 Swift 5.3(SE-0269)和 5.8(SE-0365)的演进,在闭包中省略 self. 能让编译器强制捕获语义(如使用 [weak self]),从而暴露潜在内存泄漏问题。

🐕 Why I ’ ve Filed Over 1,000 Apple Feedbacks — And Why You Should Too

@阿权:文章分享了作者关于 Apple Feedback 的心得体会与收益:

  1. 反馈的价值:
    1. 作者自 2014 年起提交超 1000 条反馈,推动漏洞修复、文档更新及新功能开发(如 HealthKit、MetricKit 等框架的改进)。
    2. 对开发者而言,可以理清技术思路、记录测试用例,形成可复用的技术文档;提升沟通能力,强化对平台的理解,甚至在撰写反馈过程中解决问题。
  2. 有效提交反馈的策略:
    1. 内容结构化:
      1. 标题:包含框架名和关键词(如 “生产问题”“测试版”),例:“ HealthKit: 锻炼会话中 paddleSports 的 totalDistance 弃用导致数据保存失败”。
      2. 内容:遵循 “问题描述→预期→复现步骤→重要性→示例项目” 结构,附日志、截图或 sysdiagnose 文件。
    2. 高优场景:
      1. 生产环境漏洞、重大回归、影响广泛的 API 问题;
      2. beta 版本期间,及时提交问题,利用 WWDC 与工程师面对面跟进。
  3. 作者的反馈实践案例。

开发者可以积极参与反馈提交,尤其在 WWDC 和测试版周期中,通过结构化报告和社区分享推动平台改进。反馈不仅是对 Apple 的贡献,更是优化自身开发流程的重要手段。

🐢 Reverse-Engineering Xcode's Coding Intelligence prompt

@zhangferry:Xcode 26 提供了 Coding Intelligence 功能,并且支持自定义模型。但当前自定义模型支持的 URL 格式 是 ChatGPT 风格的,非这类格式例如 Gemini 还需要依赖 Proxyman 这类网络代理工具做一层转换。(感觉算是 Bug,希望后续能修复)
文中以 Xcode 中使用 Gemini 为例,抓取和分析了 AI 相关的代码解释、文档生成、代码生成这几个功能所涉及的 Prompt,每一个功能都对应一组封装好的 Prompt,可以了解到 Apple 是如何使用 PE 的:

  • 行为约束:完整理解用户意图及代码再回答问题
  • 前置知识:注意 Apple 平台的 API 选型;代码生成优先使用 Swift、OC;优先 Concurrency 而不是 Combine
  • 代码理解:使用 SEARCH 工具(函数调用)获取代码相关上下文,再丢给 LLM
  • 代码生成:除了代码本身,还会查找项目依赖,学习其 API

🐕 Flutter 又双叒叕可以在 iOS 26 的真机上 hotload 运行了,来看看又是什么黑科技

@Damien:由于 iOS 26 beta1 禁止了 Debug 时 mprotect 的 RX 权限,导致 Flutte 在 iOS 26 真机上 Debug 运行时出现了问题。为了解决这一问题,Flutter 团队采用了一种临时方案,即创建了 NOTIFY_DEBUGGER_ABOUT_RX_PAGES 函数。当 Flutter 应用需要执行新代码时,该函数会暂停应用并通知调试器,调试器随后利用其特权,通过 debugserver 修改内存权限,实现“双地址映射”,其中一个地址用于写入代码,另一个地址用于执行代码。这一方案虽然解决了当前的运行问题,但存在一定的延迟和较高的环境要求,未来仍需开发高性能的 Debug 解释器来提供更完善的解决方案。

代码

🐕 EFQRCode

@BarneyEFQRCode 是一个轻量级纯 Swift 二维码库,支持生成带水印 / 图标的风格化二维码和图片识别功能。基于 CoreGraphicsCoreImageImageIO,全平台支持 iOS/macOS/watchOS/tvOS/visionOS 。最新 7.0.0 版本重构了 API,引入 EFQRCodeGeneratorEFQRCodeRecognizer 类,支持链式配置,改进 Objective-C 兼容性。可通过 CocoaPodsCarthageSPM 集成。

音视频

🐢 SwiftData versus SQL Query Builder

@Kyle-Ye: Point-Free 团队在 WWDC 2025 期间免费放送了一期重磅视频,深入对比 SwiftData 与他们自家 SQL Query Builder(Structured Queries)在实际开发中的表现。视频以还原 Apple Reminders 复杂查询为例,展示了两种方案在代码简洁性、可组合性和类型安全等方面的差异。

Structured Queries 方案只需 23 行代码即可线性表达复杂查询逻辑,支持类型安全、可读性强;而 SwiftData 不仅写法更繁琐(32 行),还存在布尔和枚举类型无法直接排序 / 筛选、可选字段排序不灵活等问题,甚至有些写法在运行时会直接崩溃。

如果你关心 Swift 持久化方案、数据层架构,或在 SwiftData 和 SQL 之间犹豫,强烈建议观看本期视频。

内推

重新开始更新「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 周报 #339 | 2025-06-23

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新手推荐

🐎 Unique values in Swift: Removing duplicates from an array

@阿权:文章介绍了 Swift 中数组去重一些最佳实践。

  1. 使用 Set 去重(O(n)),要求元素遵循 Hashable:
    1. 不关心顺序场景,可以直接创建对应的 Set,再转换为数组来去重。
    2. 对于保留顺序场景,也可以增加 Set 来跟踪出现过的元组,过滤出重复项。
  2. 使用 Swift Algorithms Package 提供的 uniqued() 方法。虽然功能完善,不过对于这个场景可能有些大材小用了,还可以能引入不必要的依赖。

大家在工程实践中,推荐用方法一也够用了,另外这也是各公司面试题中的必考基础算法之一噢。

文章

🐕 Automatic Observation Tracking in UIKit and AppKit: The Feature Apple Forgot to Mention

@AidenRao:苹果在 iOS 18/macOS 15 中为 UIKit/AppKit 框架秘密添加了“自动观察追踪”功能。开发者只需在应用的 Info.plist 文件中启用一个键值,UI 就能自动响应数据变化,类似 Swift 的 @publish。(从 iOS 26 开始,此功能默认启用。)

🐎 Recreating the bird animation from Swift.org

@Smallfly:这篇文章揭晓了 Swift.org 首页那只「飞鸟」的诞生过程。作者深入剖析了这个令人印象深刻的动画:它并非视频,而是巧妙地利用 HTML5 Canvas 和 JavaScript 实现的纯代码杰作。
核心亮点在于:

  1. 「画笔」​效果:​ 用特殊的 虚线路径(dash pattern)​ 技巧,模拟出画笔逐渐绘制出飞鸟轨迹的动态。
  2. 精准遮罩:​ 通过 globalCompositeOperation 技术,将绘制出的动态路径作为「模具」,精准地揭示出底层的精美图像。
  3. 流畅动画:​ 借助 Anime.js 库 实现平滑自然的运动效果,并考虑了页面加载(MutationObserver)和用户偏好(prefers-reduced-motion)。

🐎 Tips and tricks for when using SwiftUI ’ s ViewBuilder

@DylanYang:本文作者主要介绍了使用 SwiftUI 中的 ViewBuilder 类型的一些实用小建议。比如通过在合适的地方添加 ViewBuilder 属性来使得我们自定义的 View 初始化时可以使用 SwiftUI 风格的 View 描述方式。以及提供了两种不同方法达成初始化参数缺省的方式,以简化自定义 View 的初始化。这些方法虽然并不起眼,但是可以让我们在组织代码的时候获得更多的灵活性。

工具

enableAppleAI

@ChengzhiHuang:可以开启国行设备体验 Apple AI 的工具,优势是不用长期关闭 SIP (完成后可重新开启)。原理是通过修改 eligibilityd 沙盒文件 + 锁权限 。需要注意的是,其中关于注入 eligibilityd 相关代码报错的描述存在一些错误,XcodeLLMEligible 并未替换系统的 eligibilityd ,仅是在开发调试 eligibilityd 时对齐系统行为所用。

Notepad.exe

@EyreFree:Notepad.exe 是专为 Swift 开发设计的原生 macOS 应用,主打轻量高效,可替代 Xcode 用于快速原型和代码实验。它支持 iOS 模拟器集成、智能代码补全、实时错误检测,具备便签式悬浮笔记、库式工作流等功能,还有内置 AI 辅助编码。工具注重隐私,数据本地存储,界面简洁无冗余,适合想避开重型 IDE 的开发者,感兴趣的朋友可以试试。

代码

🐕 macOS 26 恢复启动台小技巧

@Barney:macOS 26 恢复启动台小技巧,终端执行一下命令后重启电脑即可。


sudo mkdir -p /Library/Preferences/FeatureFlags/Domain
sudo defaults write /Library/Preferences/FeatureFlags/Domain/SpotlightUI.plist
SpotlightPlus -dict Enabled -bool false

apple-on-device-openai

@Cooper Chen:这个创新项目巧妙地将 macOS 26 内置的 Apple Intelligence 本地模型(3B 参数)封装成兼容 OpenAI API 的接口,让开发者能在第三方 AI 客户端中直接调用这个轻量级模型,实现隐私优先的本地推理。

技术亮点包括:

  • 完整的 OpenAI API 协议兼容,无缝对接现有生态
  • 针对 M 系列芯片优化的本地推理引擎
  • 智能上下文管理,支持多轮对话
  • 典型响应速度控制在 800ms 内(M3 设备实测)

目前项目已在 GitHub 开源,这种创造性地"桥接"系统级 AI 能力的思路,为桌面端 AI 应用开发提供了新范式。对于关注隐私计算和边缘 AI 的开发者,这无疑是个值得研究的样本。

内推

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

❌