Releases: SwiftOldDriver/iOS-Weekly
老司机 iOS 周报 #348 | 2025-08-25
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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 中 Equatable 与 Hashable 协议的性能优化,揭示了编译器自动合成实现的潜在瓶颈,并提出结合 Identifiable 协议的改进方案。核心内容包括:
- 问题分析:默认合成的
Equatable/Hashable会逐成员比较或哈希,对含大集合(如[User])或嵌套结构的类型,复杂度达 O(N),在 SwiftUI 视图更新、Set操作中易成性能瓶颈。 - 优化方案:利用
Identifiable的id属性(如UUID),仅基于唯一标识实现Equatable和Hashable,将操作复杂度降至 O(1)。 - 数据验证:基准测试显示,含 1000+ 员工的
Company类型,Identifiable方案的Equatable快 3 倍,Hashable快 3 万倍。
文章结合编译器源码与 SwiftUI 实践,为性能敏感场景提供了可落地的优化思路。
🐢 What's New in UIKit
@Barney:这篇文章详细总结了 iOS 26 中 UIKit 的全面更新。尽管 UIKit 不再是 WWDC 的主角,但今年仍获得了大量新特性。
主要更新概况:
• Liquid Glass 设计语言:新增 UIGlassEffect、UIButton.Configuration 的玻璃按钮样式,以及 UIBarButtonItem 的共享背景支持
• 导航栏增强:UINavigationItem 新增 subtitle、largeTitle、attributedTitle 等属性,支持更丰富的标题展示
• 分割视图改进:UISplitViewController 支持新的 inspector 列,提供类似 macOS 的检查器面板
• 标签栏配件:UITabAccessory 允许在标签栏上方添加浮动工具栏,支持折叠展开动画
• HDR 色彩支持:UIColor 新增 HDR 初始化方法,UIColorPickerViewController 支持曝光调节
• 角落配置 API:UICornerConfiguration 提供统一的圆角设置方案,支持容器同心圆角
• 自然文本选择:UITextView 支持混合左右文字的自然选择,selectedRanges 替代 selectedRange
• 主菜单系统:UIMainMenuSystem 为 iPadOS 提供 macOS 风格的菜单栏
• 观察者模式集成:UIView 和 UIViewController 原生支持 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
- fix #5107 by @BarneyZhaoooo in #5117
Full Changelog: #347...#348
老司机 iOS 周报 #347 | 2025-08-18
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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:这次更新除了常规的控件更新和性能优化外,还有两点值得关注下:
-
多窗口支持:在 Engine 层已实现在 Windows 和 macOS 中创建和更新窗口的基础逻辑 ( #168728 ),后续版本将更新 Linux 系统,并引入实验性 API 以支持多窗口功能。
- 虽然官方还没提供多窗口 Demo 来展示 API 的使用,但社区已有人提交 Windows Demo 的PR,也可以通过 Multi Window 了解官方的进度。
-
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.
@Barney:Swift 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
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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
@阿权:本文围绕 "视觉错觉矫正" 展开,探讨其在排版与建筑中的应用,内容如下:
- 视觉错觉的普遍性
- 以穆勒・莱尔错觉为例,说明视觉错觉对所有人(无论文化背景)的影响一致,甚至适用于动物与触觉感知。
- 保罗・雷纳在《排版艺术》中指出:视觉艺术应以 "视觉呈现" 为基准,而非严格的测量数据—— 因为人类感知存在共性偏差。
- 排版中的视觉矫正
- 以字体 "Futura" 为例,说明字体需通过微调来对抗视觉错觉:如字母 "O" 并非完美圆形,而是略宽于高,水平线条稍细于垂直线条,以避免 "蛋形" 错觉。
- 字母设计需考虑整体协调:如 FF Tisa 的 "O" 上伸部分超出参考线,以平衡与其他字母的视觉重量,避免显得过小。
- 建筑中的视觉矫正
- 以帕特农神庙为例,古希腊建筑师通过系统性调整抵消视觉偏差:
- 柱身 "鼓肚"(entasis):柱子中间微凸,避免因收分导致的 "纤细感";
- 地基弯曲:柱基呈凸形,防止视觉上的 "塌陷";
- 柱子倾斜:所有柱子微微内倾,避免 "外倒" 错觉。
- 这些调整让建筑 "看起来协调",而非追求几何完美,赋予其生命力。
- 以帕特农神庙为例,古希腊建筑师通过系统性调整抵消视觉偏差:
- 深层意义:反对平庸,追求美与文化
- 视觉矫正的本质是对 "视觉真实" 的尊重,体现了对细节与美的极致追求。
- 对比现代 " 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
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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 的最佳实践与注意事项展开,内容如下:
- 结构体的可变性规则
- 可变性遵循“整体不可变则部分也不可变”规则(即使属性使用 var 声明)。
- var 声明的实例仅 var 属性可变,let 属性始终不可变。
- let 的使用场景
- 唯一 id 属性:一旦创建就不应改变,始终确保实例全局唯一的场景。
- 依赖初始化的属性:值初始化完成后,后续无需改变的场景。
- 声明为 let,表达了本质不可变的语义,避免了意外修改,也保证了数据一致性。
- var 的使用场景
- 状态属性:需随业务逻辑动态更新。
- 依赖属性:值需依赖外部条件刷新。
- 语义表达
- 两者的使用应更多考虑语义的表达,使其自文档性,let 暗示着永久不可变,var 暗示着可动态调整。
- 应管控 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 布局(
HStack改overlay)解决。 - 性能优化:利用 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 标记的方法时,当通知从非主线程发出会导致崩溃。
关键风险: Combine 的 sink 闭包缺乏编译时线程安全检查,而直接使用 NotificationCenter 的 addObserver 方法则会在编译时报错。这种隐蔽性使得问题只在运行时暴露。
解决方案: 推荐迁移到 Swift Concurrency 的 for await 语法观察通知,获得编译时安全保障。对于必须保留的 Combine 管道,建议在 sink 内使用 Task 包装或通过 receive(on:) 指定执行队列。
总结:Combine 与 Swift 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
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新手推荐
🐎 Meet the Inspector view in SwiftUI
@阿权:文章介绍了 SwiftUI 中检查器视图(Inspector View)的用法:
- 基本概念与使用场景:
- 检查器视图用于展示主内容的附加信息,默认在右侧展示(macOS/iPadOS),在紧凑尺寸设备(如竖屏 iPhone)上以 sheet 形式呈现。
- 需要 macOS 14+ 和 iOS 17+。
- 基本用法:通过
inspector(isPresented:content:)控制检查视图的显隐。 - 自定义宽度:支持固定宽度
inspectorColumnWidth(_:),和用户拖拽控制宽度inspectorColumnWidth(min:ideal:max:)。 - 检查器入口按钮与导航工具栏的适配,问题提供了三种适配方案。
- 在紧凑尺寸中的展示效果及其适配方案。
在苹果提供中的 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 协议共享核心属性(minLength, axis, requireTextBaselineSpacing)
🐕 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
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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 的市场渗透率、技术进展、未来方向,其中有几个有趣的点:
-
市场渗透率:
- Flutter 比 RN 的整体渗透率高:根据 2025 年 6 月腾讯端服务统计整体渗透率,Flutter 约 13%,RN 约 9%。另外,根据 Apptopia 统计,2024 年 AppStore 里 Flutter 占据所有新免费 iOS 应用的近 30%。
-
技术进展:
- 线程合并:之前的 3.29 Android 和 iOS 默认合并 Dart UI 线程和平台线程,从最近 3.32 开始, Windows 和 macOS 也支持合并 Dart UI 线程和平台线程。
- 多窗口:在本文发布后 2 天,对多窗口的支持已经合到主分支(#168728),在 Engine 层引入在 Windows、macOS 和未来 Linux 平台上创建并管理多个窗口的机制。
-
未来方向:
- 移除 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
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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 界面中出现的诡异细线,本质原因是:
- 逻辑像素到物理像素转换出现浮点值(非整数 DPR、布局误差)。
- Skia 默认开启 AAA(Analytic Anti-Aliasing)抗锯齿处理,处理相邻同色元素时各自计算的像素覆盖率总和可能不足 100%(如 40% + 50% = 90%)。
- 未被覆盖的剩余部分(如上例的 10%)会显露背景色,形成半透明的细线。
解决方案是:
- pixel_snap:提前将逻辑像素换算物理像素,根本上避免转换后出现物理像素不对齐。
- 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 上架的全流程。
文章的价值在于:
- 真实的成本分析 - 详细记录了理论花费 $353 vs 实际花费 $20 的对比,以及每日开发进度
- 实用的最佳实践 - 总结了大量 Claude Code 使用技巧,如使用
--quiet标志、合理管理上下文窗口、创建反馈循环等 - 架构升级经验 - 展示了如何利用 AI 工具进行大规模重构,从传统架构升级到现代的 swift-dependencies + swift-sharing 架构
- 完整的开发流程 - 涵盖了从数据迁移、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
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🌟 🐢 btrace 3.0 对外开源:重磅新增 iOS 支持!免插桩原理大揭秘!
@JonyFang: btrace 是字节开源的一款高性能 Android/iOS 端性能追踪(Tracing)工具,基于 Perfetto 进行数据展示。它能够详细记录方法的调用过程,精准分析耗时,并归因性能瓶颈,兼具高采样精度和低性能损耗。与 Apple 的 Time Profiler 等传统工具相比,btrace 更加灵活、可自定义,并支持系统方法追踪、有丰富的数据归因和可视化能力,能帮助开发者深入理解和优化 App 性能。
btrace 3.0 相比 2.0 的优化(iOS 视角):
-
采集方案升级。
3.0 由单一编译期插桩,升级为“同步抓栈 + 异步抓栈”的混合采样方案。同步抓栈通过 hook 高频系统方法和关键节点,实时采集 Trace 数据;异步抓栈则通过独立采样线程定时回溯线程调用栈,保证采集的时间连续性。相比 2.0,3.0 大幅降低了接入和维护成本,采集更全面、对系统方法也支持更好。 -
数据存储与压缩优化。
3.0 针对 Trace 数据量大、存储压力大等问题,设计了高效的调用栈去重与压缩结构。通过空间相似性(调用栈公共前缀合并)、时间相似性(连续相同栈合并)等手段,进一步减少内存和磁盘占用,提升了大体量数据下的可用性。 -
多线程与性能再提升。
3.0 优化了多线程数据写入的并发安全性与性能,采用 CAS 等无锁 / 低锁技术,兼顾高性能与数据一致性,在复杂多线程场景下依然保持低开销。 -
死锁规避与线程采样精细化。
异步采样时规避了 Time Profiler 可能导致的死锁风险,通过黑名单和信号安全 API 控制,提升了工具的稳定性。同时,仅采集活跃线程,有效降低了对 App 性能的影响。 -
丰富的性能归因与可视化。
除了基本的方法调用追踪,3.0 进一步支持 CPU 时间、对象分配、缺页 / 上下文切换、线程阻塞等多维度的耗时归因,配合 Perfetto 可视化,帮助开发者一站式定位性能瓶颈。 -
易用性和生态提升。
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 的心得体会与收益:
- 反馈的价值:
- 作者自 2014 年起提交超 1000 条反馈,推动漏洞修复、文档更新及新功能开发(如 HealthKit、MetricKit 等框架的改进)。
- 对开发者而言,可以理清技术思路、记录测试用例,形成可复用的技术文档;提升沟通能力,强化对平台的理解,甚至在撰写反馈过程中解决问题。
- 有效提交反馈的策略:
- 内容结构化:
- 标题:包含框架名和关键词(如 “生产问题”“测试版”),例:“ HealthKit: 锻炼会话中 paddleSports 的 totalDistance 弃用导致数据保存失败”。
- 内容:遵循 “问题描述→预期→复现步骤→重要性→示例项目” 结构,附日志、截图或 sysdiagnose 文件。
- 高优场景:
- 生产环境漏洞、重大回归、影响广泛的 API 问题;
- beta 版本期间,及时提交问题,利用 WWDC 与工程师面对面跟进。
- 内容结构化:
- 作者的反馈实践案例。
开发者可以积极参与反馈提交,尤其在 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
@Barney:EFQRCode 是一个轻量级纯 Swift 二维码库,支持生成带水印 / 图标的风格化二维码和图片识别功能。基于 CoreGraphics、CoreImage 和 ImageIO,全平台支持 iOS/macOS/watchOS/tvOS/visionOS 。最新 7.0.0 版本重构了 API,引入 EFQRCodeGenerator 和 EFQRCodeRecognizer 类,支持链式配置,改进 Objective-C 兼容性。可通过 CocoaPods、Carthage 或 SPM 集成。
音视频
🐢 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
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新手推荐
🐎 Unique values in Swift: Removing duplicates from an array
@阿权:文章介绍了 Swift 中数组去重一些最佳实践。
- 使用 Set 去重(O(n)),要求元素遵循 Hashable:
- 不关心顺序场景,可以直接创建对应的 Set,再转换为数组来去重。
- 对于保留顺序场景,也可以增加 Set 来跟踪出现过的元组,过滤出重复项。
- 使用 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 实现的纯代码杰作。
核心亮点在于:
- 「画笔」效果: 用特殊的 虚线路径(dash pattern) 技巧,模拟出画笔逐渐绘制出飞鸟轨迹的动态。
- 精准遮罩: 通过 globalCompositeOperation 技术,将绘制出的动态路径作为「模具」,精准地揭示出底层的精美图像。
- 流畅动画: 借助 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)










