Releases: SwiftOldDriver/iOS-Weekly
老司机 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)
老司机 iOS 周报 #338 | 2025-06-16
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新闻
Redesigned Swift.org is now live
Swift 上线了新的官网,新官网的设计目标是突出 Swift 易于上手的特性。并且还提供了 软件包、Swift 实际应用示例、代码片段以及进一步学习的资源链接等信息。
文章
🐕 What's new in Swift 6.2?
@含笑饮砒霜:Swift 6.2 带来了一系列语言特性增强和并发模型优化,旨在提升开发效率并简化并发编程。以下是核心更新要点:
- 一.并发编程改进
- 1.默认 actor 隔离推断
- 2.非隔离异步函数默认在调用者 actor 执行
- 3.任务优先级升级 API
- 4.任务命名
- 二.语言特性增强
- 1.Raw Identifier 大扩展
- 2.字符串插值的默认值
- 3.enumerated () 遵循 Collection 协议
- 4.方法和初始化器键路径
- 三.内存安全与调试
- 1.可选严格内存安全检查
- 2.回溯 API
- 四.测试框架升级
- 1.退出测试
- 2.测试附件
- 3.条件特性公共 API
- 五.其他重要更新
- 1.弱常量
- 2.内联数组
- 3.正则表达式后向断言
- 4.全局 actor 协议一致性
Swift 6.2 通过简化并发入门门槛、增强语言灵活性和测试能力,持续推动 Swift 在多平台开发中的易用性与专业性。
🐕 Accessorise Your Context Menu Interactions
@Smallfly:这篇文章介绍了如何通过苹果的私有 API,实现类似 iMessage 消息气泡上的 Tapback 表情选择器效果。作者详细介绍了相关 API 的使用,并给出 Objective-C 桥接和 Swift 运行时动态调用两套完整的方案,巧妙的规避审核风险。有相关需求的同学值得一读。
🐕 A (Re-)Introduction to ExtensionKit
@Cooper Chen:这篇文章全面解析了苹果 ExtensionKit 框架的核心功能与应用价值,其中包括:
- 跨平台扩展:支持应用间功能调用与 UI 嵌入(SwiftUI 远程视图),覆盖 macOS/iOS;
- 高效安全:基于 XPC 通信,强制沙盒化但允许文件共享;
- 开发要点:需内置于 .app 分发,iOS 支持自动授权;推荐开源库 Extendable 降低复杂度;
- 应用场景:专业工具集成(如相机 + 修图)、编辑器插件等,为开发者创造跨应用协作新机会;
适合以下开发者深入阅读:
- iOS/macOS 开发者:想要实现跨应用功能集成的技术团队;
- SwiftUI 使用者:需要深度整合原生 UI 的开发者;
- 独立开发者:寻找商业化新机会的个人或小团队;
建议关注 iOS 26 对该框架的支持进展,把握跨平台开发新趋势。
🐎 iOS 26 beta1 重新禁止 JIT 执行,Flutter 下的 iOS 真机 hot load 暂时无法使用
@david-clang:iOS 26 beta1 并未“禁止 JIT ”,而是精确封堵了 App 进程自身动态修改内存权限并执行未签名代码的能力,目标是打击利用此机制的恶意软件(App Fraud),同时保留合法的开发调试功能。但 Flutter iOS 真机 hot load 因依赖此机制而“误伤”,需通过解释器等新方案适配。
文章还介绍了几个适配思路,其中混合模式执行的思路很有意思,因为这是 Flutter 热更新框架 shorebird 在 iOS 上目前的热更新方案:App 整体通过 AOT 运行,只有热更新 patch 存在的时候,针对该部分进行解释执行。
工具
SourceKitten
SourceKit 是一个由 Apple 开发的框架,它构成了 Xcode 等开发工具中大部分语言功能的基础,例如代码补齐,定义跳转等等。尽管 SourceKit 功能强大,但其底层通信协议(基于 XPC)相对复杂,直接使用并不方便。这时,SourceKitten 就应运而生了。
SourceKitten 是一个由社区驱动的开源 SPM 项目,它将与 sourcekitd 的复杂交互封装成了简单易用的命令行工具和 Swift 框架。开发者可以轻松地利用 SourceKitten 来调用 SourceKit 的强大功能,而无需关心底层的实现细节。
可以用来替代 sourcekitd-test,不推荐直接与 sourcekitd-test 交互,输入格式可读性不强。
SourceKitten 默认使用 sourcekitdInProc.framework/Versions/A/sourcekitdInProc
处理请求,当然也可以替换为自己本地编译的 Sourcekit (之前已开源)方便排查与定位问题。
内推
重新开始更新「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 周报 #337 | 2025-06-09
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🐕 Optimized mathematical computations in Swift
@Barney:这篇文章介绍如何用 Swift
的 Accelerate
框架 (特别是 vDSP
模块) 高效处理大规模数学计算 (如求和、平均值、标准差)。它替代传统低效方法(如 reduce
), 显著提升大数据场景性能 (如百万级健康数据点)。核心展示了 vDSP.sum
、vDSP.mean
和 vDSP.standardDeviation
的简洁用法,并指出该框架还支持更复杂计算(如机器学习、信号处理)。
🐢 微信自研高性能推理计算引擎 XNet-DNN:跨平台 GPU 部署大语言模型及优化实践
@Cooper Chen:在 AI 大模型落地浪潮中,微信团队的 XNet-DNN 引擎以“一次开发,全平台高效运行”的理念,解决了 LLM 部署的两大痛点:硬件碎片化适配和边缘计算性能瓶颈。其技术突破性体现在三方面:
-
跨平台统一性
-- 通过自研 RCI 框架,将 NVIDIA TensorCore、Apple M 系列 GPU、高通 Adreno 等异构硬件的计算能力抽象为统一接口,大幅降低开发成本。对比社区方案(如 llama.cpp),仅需少量代码即可实现更广的硬件覆盖。 -
性能压榨艺术
-- 从宏观的系统级优化(Command Tape 减少 CPU 开销)到微观的指令级调优(寄存器分配、Cache 命中),结合硬件逆向工程,真正“榨干”每颗 GPU 的算力潜力。实测显示,其推理速度在多个平台领先竞品 30% 以上。 -
工业级落地价值
-- 包体积优化适合移动端,长序列支持(FlashAttention-2)契合实际业务场景,且已通过微信生态验证。对于亟需在端侧部署 LLM 的开发者,XNet-DNN 提供了从理论到实践的完整技术路径。
该技术特别适合三类专业人士深入研读:需要跨平台部署大语言模型的工程师可通过该引擎实现"一次开发,多端适配",大幅提升开发效率;专注边缘计算性能优化的架构师能从其系统级设计思路中获得异构硬件资源调度的创新启发;而致力于 GPU 底层调优的研究者则可借鉴其从硬件逆向到指令级优化的完整方法论,这套基于 Roofline 模型和微基准测试的优化体系具有普适性参考价值。
🐕 一行代码解决 iOS 18 iPad TabBar 位置变化,还你熟悉的底部导航
@BluesJiang: 在 WWDC24 上,苹果对 iPadOS 上的原生 TabBar Controller 的 UI 作了很大的改版。将 SideBar 移动到了顶部,原本在底部的 UI 也移动到了页面的顶部。这种底层 UI 的改动影响到了我们线上的 UI 表现。这篇文章就给出了三个可行的解决方案,将 UI 还原成原来的的样子,
🐎 Compose Multiplatform Skia 对比 Flutter Impeller ,都是跨平台自绘有什么差异
@david-clang:本文大概介绍了 Compose Multiplatform 中的 Skia 和 Flutter 中的 Impeller 的差异,它们最大的区别是两个:
- Impeller 定位只为 Flutter 服务,而 Skia 更多考虑兼顾通用性支持。
- Impeller 着色器是提前编译,而 Skia 是运行时动态编译。
- Impeller:通过
impellerc
工具链在应用构建期将 GLSL 转换为 SPIR-V ,再编译为平台原生代码(如 Metal MSL),彻底消除运行时编译开销。 - Skia:依赖传统 Ganesh 后端,需在运行时动态生成着色器(GPU 指令),首次执行复杂动画易引发卡顿(Jank)
- Impeller:通过
解析二进制重排优化方案,介绍了如何通过 Clang 插桩和 Page Fault 优化提升 iOS 启动性能,附带了 Swift 项目实战技巧与进阶思路。
🐕 『极致』的二进制重排
@JonyFang: 本文介绍了基于 Clang
静态插桩的二进制重排方案,主要解决了 Page Fault
符号部分剩余未彻底清理的问题。基于 SanitizerCoverage
完善符号收集机制,也针对 C++ 静态初始化和 Swift 项目等特殊场景提出优化思路。
工具
🐎 Data Scout: SwiftData debugging tool
@阿权:Data Scout 是一款 SwiftData 调试工具。SwiftData 底层也会使用 SQLite 能力,但读取文件上会有一些细微的差别。
- 发现数据库:支持从模拟器、App 或本地目录中自动发现 SwiftData 数据库。
- 查看数据库结构与内容:与 SwiftData 一致,以 Swift 模型的形式展示数据库的结构。并支持层级导航。
- 支持使用谓词进行高级筛选。
- 实时更新:支持数据库在外部被更新时实时展示在 Data Scout App 中。
Data Scout 是作者技术的试验场,其使用了 SwiftSyntax、SourceKit、CoreML、Rust 等技术,App 还在持续更新中,更多内容可以阅读:Behind the Scenes of DataScout: A SwiftData Debugging Tool。
代码
Swift Embedded ESP32C6 OLED Demo
@Kyle-Ye: 这个项目展示了如何在 ESP32C6 嵌入式环境中使用 Swift 进行开发,实现了在 OLED 显示屏上渲染旋转 3D 立方体动画。项目的亮点在于演示了 Swift Package Manager 与 CMake 的集成方案,提供了完整的 Swift 嵌入式开发工作流。特别值得关注的是其解决了 Swift 与 C 互操作时的符号链接问题,以及 U8g2 字体优化方案。对于想要探索 Swift 在嵌入式领域应用的开发者来说,这是一个很好的实践参考项目。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
[上海] 米哈游 - 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 周报 #336 | 2025-05-26
老司机 iOS 周报 #336 | 2025-05-26
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🌟 🐢 LLM 学习笔记:最好的学习方法是带着问题去寻找答案
@Cooper Chen:这篇文章以日常 AI 聊天场景为切入点,生动解析了大语言模型背后的技术原理。特别值得关注的是:
- 完整训练流程剖析
- 数据清洗:详细讲解如何通过 MinHash 去重、PII 移除、Gopher 过滤等技术处理海量原始数据
- Tokenization 优化:深入解析 BPE/WordPiece 算法,对比不同模型的词汇表设计(如 GPT-4 的 10 万 token 词汇表)
- 分布式训练:揭秘千亿参数模型如何在数千 GPU 上高效并行训练
- 监督微调(SFT):展示如何用人工标注的高质量对话数据优化模型输出
- 奖励建模(RM):详解如何训练小型网络评估回答质量,实现人类偏好对齐
- DeepSeek-R1 的创新实践
-
GRPO 算法详解:
- 创新性地采用分组相对策略优化(Group Relative Policy Optimization)
- 通过分组奖励估计替代传统批评模型,降低 40% 训练成本
- 结合准确性奖励(基于规则验证)和格式奖励(强制结构化输出)
-
自主推理能力涌现:
- 训练过程中自然发展出自我验证和反思能力
- 在数学(AIME 2024)任务上 pass@1 达 71%
- 自动生成长思维链(CoT)推理过程,平均生成 500+ 推理 token
文章用大量实例和图表,将复杂的模型训练过程讲解得通俗易懂。无论是想了解 AI 工作原理的初学者,还是希望深入掌握训练技巧的开发者都能从中获得启发。
🐎 What's new in Swift 6.2?
@Smallfly:这篇文章介绍了 Swift 6.2 将会迎来的重大更新,聚焦于提升开发效率与代码安全性。其核心改进包括:
- 并发编程简化:通过编译器标志
-default-isolation MainActor
支持模块级主线程默认隔离,大幅降低异步代码复杂度;新增Task.immediate
实现同步任务初始化,优化执行逻辑。 - 语法增强:引入原始标识符(如
`Strip HTML tags`()
)提升测试可读性,字符串插值支持默认值(\(age, default: "Unknown")
),KeyPath 扩展支持方法调用(map(\.uppercased())
)。 - 工具升级:
Backtrace
API 提供运行时堆栈追踪,任务命名功能(Task(name: "FetchNews")
)助力异步调试,InlineArray
实现高性能定长存储。 - 测试革新:支持验证程序崩溃逻辑(
#expect(processExitsWith:)
),失败测试可附加日志 / 数据(Attachment.record()
)。 - 安全强化:严格内存检查要求显式标记
@unsafe
代码,全局 Actor 隔离协议提升并发安全。
此次更新通过 20+ 项提案优化了语言一致性,为开发者提供更简洁、安全的工具链,尤其助力 SwiftUI 和服务器端开发的深度整合。
🐎 Dependency container on top of task local values in Swift
@Cooper Chen:这篇文章由 Swift 专家 Majid 撰写,深入探讨了 Swift 并发编程中的 Task Local Values(任务本地值),并创新性地将其应用于依赖注入容器的实现。
文章首先解析了 @TaskLocal 宏的核心机制,展示了它如何在异步任务间隐式传递数据,类似于 SwiftUI 的 Environment。随后,作者通过构建一个支持多环境(生产 / 测试)的依赖容器,演示了如何利用这一特性优雅地管理全局依赖,特别是在单元测试中快速切换 mock 实现。适合中高级 Swift 开发者学习现代并发编程范式,为复杂应用架构提供新思路。
🐎 2025 上半年 Flutter iOS 大坑超汇总,看看你踩中了没
@david-clang:本文汇总了 2025 上半年 Flutter iOS 影响比较大的 6 个问题,好在这些问题都有对应的解决办法,它们分别是:
- iOS 18.4 Beta 的 JIT 权限问题(#163984)
- macOS 15.4 打包 IPA 的 ITMS-90048 错误(#166367)
- macOS 15.4 模拟器的调试服务问题(#166333)
- iOS 设备 Hot Restart 延迟(#165656)
- iOS 18.5 Beta 字体粗细异常(#167343)
- iOS 输入框崩溃问题(#138464)
🐎 Default isolation with Swift 6.2
@DylanYang:本文作者通过 Swift 默认可见性的类比形象的为大家解释了默认隔离态 (Isolation) 的含义。修改默认隔离态是 Swift 6.2 新引入的特性,帮助开发者方便的修改一个模块默认的隔离态。原先模块默认的隔离态均为无隔离 (nonisolated),而通过修改默认隔离态,我们可以将一个模块的隔离态默认改为使用主线程隔离,相当于默认带上了 @MainActor
。不过作者随后也提到此修改有利有弊,大家实际使用时需要认真权衡。
代码
OpenAsyncImage
SwiftUI 的 AsyncImage
开源 backport:
- 最低支持 iOS 13
- 基于 iOS 18 的
State.wrappedValue
setter 进行优化 - 全平台统一一致的行为
内推
重新开始更新「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 周报 #335 | 2025-05-19
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新闻
Apple 公布将于今年晚些时候推出的强大辅助功能
苹果在辅助功能的上的设计还是非常先进的,现有的一些辅助功能适配起来相对来说还是比较轻松的,期待苹果更多的辅助功能。
文章
🐎 UIApplication delegate deprecation coming in iOS 19 SDK
@Damien:作者通过关注 WebKit 提交记录发现 iOS 19 SDK 中 UIApplicationDelegate 协议中的部分 API 将被弃用,原因是修复因新 SDK 导致的弃用警告,作者预测“新 SDK ”指的是即将在 6 月 WWDC 发布的 iOS 19,苹果工程师们已经在用 iOS 19 SDK 编译 WebKit,所以出现了这些弃用警告。
🐕 Using Model Context Protocol in iOS apps
@含笑饮砒霜:MCP(Model Context Protocol,模型上下文协议)是一种用于大语言模型(LLM)与外部工具交互的协议。它允许模型在对话过程中调用开发者自定义的函数(称为“工具”),以访问本地或远程的数据和服务,从而增强模型的实际能力。这篇文章介绍了如何在 iOS 应用中使用 Model Context Protocol(MCP)集成大模型能力。作者通过示例展示了如何实现一个 MCP Server(用于获取 Apple Health 中的血压数据)和一个 MCP Client(通过 Anthropic Claude API 实现聊天功能)。整个流程包括定义工具、调用本地服务、解析大模型响应,并在用户请求与工具调用之间建立桥梁,实现智能对话与本地数据交互的结合。
🐕 Xtool: cross-platform Xcode replacement. Build iOS apps on Linux and more!
@Kyle-Ye: 这篇贴子介绍了作者的开发名为 Xtool 的跨平台 Xcode 替代工具。Xtool 可以在 Linux 和 Windows 上构建和部署 iOS 应用程序 , 同时也可以在 macOS 上替代 Xcode。它支持使用 SwiftPM 构建 iOS 应用程序、签名和安装应用程序。中间还提到了一些 Xtool 目前还不支持的功能 , 如 Interface Builder、资产目录和 LLDB 调试等,作者表示未来会继续完善这些功能。
🐕 Vibe Xcoding your apps
@EyreFree:本文探讨了 LLMs 驱动的氛围编程(Vibe Coding)在 Xcode 生态的应用,介绍了 Alex、CopilotForXcode 等社区开发的 AI 代码助手,提及 MCP 协议对上下文交互的作用。同时指出了 Xcode 的扩展性局限,期待苹果开放底层接口(如借鉴 VSCode 模式)优化集成,强调了上下文、运行时数据和文档对 AI 辅助的重要性。作者认为氛围编程将推动苹果革新开发者工具,建议感兴趣的朋友持续关注社区在 Xcode 与 AI 整合方面的探索。
🐎 A flowing WebGL gradient, deconstructed
@莲叔: 一篇非常棒的科普文章,通过由浅入深的例子,娓娓道来的揭开了复杂动效的神秘面纱。本质上,绝大多数动画都可以解构为 时间 + 公式 + 图形 api。本篇文章从渐变开始、过度到波浪、贝塞尔曲线等复杂动效,都以思路,公式到代码予以实现,一直到最后实现了一个非常炫酷的动态模糊效果,标题中虽然有 WebGL,但绝大多数代码其实可以非常方便的移植到其他图形 api,如 OpenGL 和 Metal 等等。对动画和图形学有兴趣的同学千万不能错过。
🐕 Unlocking the Real Power of Swift 6's Typed Throws with Error Chains
@阿权:本文围绕 Swift 6 的类型化抛出(Typed Throws)特性展开,重点解决错误处理中的「嵌套地狱」问题,核心内容如下:
- 类型化抛出的优势与挑战
- 优势:编译时错误检查、类型安全、自文档化 API、IDE 支持。
- 挑战:抛出类型只能指定一个,不支持嵌套。多层架构中错误需手动转换,导致代码冗余、类型激增和上下文丢失。
- Catching 协议与 ErrorKit 解决方案
- 引入 ErrorKit,通过
Catching
协议为错误类型添加caught(Error)
case,统一包装子层错误。 - 关键函数:
catch
函数:自动将闭包中抛出的错误包装为当前层错误类型,避免手动转换。errorChainDescription
函数:递归构建层级化错误链,保留原始错误上下文,提升调试效率。
- 引入 ErrorKit,通过
- 总结
- 类型化抛出结合
Catching
协议,在保证类型安全的同时简化错误处理,ErrorKit 提供的工具链进一步增强了调试能力。 - 适用于复杂多层架构,尤其适合需要清晰错误追踪和高效调试的场景。
- 类型化抛出结合
🐕 Debug crashes in iOS using MetricKit
@Barney:文章介绍如何通过苹果 MetricKit 实现系统级崩溃诊断,捕获内存 / 系统信号等传统工具遗漏的崩溃。涵盖框架配置、调用栈分析和 iOS 版本差异化报告机制(13-14 每日汇总,15+ 即时推送),提供崩溃模拟方案,并展示与 Zoho Apptics 整合实现符号解析与数据可视化。
🐕 Fitting the Lapse experience into 15 MegaBytes
@DylanYang:本文讲述了作者在开发 App Clip 时如何将包体压缩到 15 MB 的方式。作者通过重构依赖关系,减少核心功能的依赖库大小,减少、压缩内置的图片、字体等文件,分割核心模块,较少不必要的代码,裁剪字体包,编译优化等各种手段来极致的压缩包体。虽然这是 App Clip,但是对 App 本体的包体有诉求的开发者也有不错的参考价值。
代码
ButtonKit
@Smallfly:ButtonKit 的设计背景源于 SwiftUI 对异步任务交互的不足,旨在简化开发者在处理复杂用户交互时的工作量。其主要作用是提供一个支持异步操作、进度展示和自定义样式的按钮组件,特别适合需要处理网络请求、文件操作或其他耗时任务的 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 周报 #334 | 2025-05-12
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🐕 Adding dependencies to binary Swift packages
@含笑饮砒霜:这篇文章介绍了作者如何为 Swift 的二进制包(binary Swift packages)添加依赖的问题和解决方案。普通 Swift 包可以直接声明依赖,但二进制包无法这样做,这给闭源 SDK 的开发带来了挑战。过去作者采用复制依赖库源代码到二进制包中的方式来解决,但这种方式混乱、低效、并增加了编译时间。后来作者发现可以通过在 Swift 包中同时声明多个二进制目标(binary target),并将它们一起加入到产品中,从而实现依赖的间接引入,这样包管理器就会自动下载和链接所需的依赖库。作者用这种方法解决了 VietnameseInput 这类闭源 SDK 的依赖管理问题,大大简化了项目结构并提升了构建效率,同时也指出这种方案尚未在更多场景下验证,需要更多开发者一起探索和交流。
🐎 支付宝客户端 Kotlin/Native 包体积优化实践
@Kyle-Ye:支付宝在使用 Kotlin/Native 进行跨端开发时 , 针对应用安装包体积过大的问题 , 采取了一系列优化措施。通过增加 LLVM 优化参数和 DCE 优化,支付宝团队成功将 iOS 和鸿蒙平台上的 Kotlin/Native 应用包体积分别减少了 50% 和 15% 以上。对于正在使用或计划使用 Kotlin/Native 的开发者来说,这篇文章或是一份很好的优化实践参考。
🐢 使用 AVPlayer 播放 FairPlay DRM 视频的最佳实践
@阿权:DRM,数字版权管理,可以简单理解为加密媒体 / 音视频。文章围绕使用 AVPlayer 播放 FairPlay DRM 视频展开,详细介绍了相关技术要点和操作方法,具体内容如下:
- DRM 介绍:DRM 原理、方案;FairPlay 播放 DRM 视频原理。
- FairPlay 密钥的两种管理方式:AVAssetResourceLoader、AVContentKeySession,及其应用场景。
- 使用 AVAssetDownloadTask 下载 DRM 资产:使用流程、下载后本地文件组成。
对于 DRM 视频,其场景不仅可用于点播视频,直播视频场景也可以使用。只要是 Apple 支持的格式,使用系统的 AVPlayer 播放 DRM 足矣,系统提供一定自由度来让用户定义自己的加解密业务流程,剩下的音视频编解码就交由 AVPlayer 自身管理了。这样实现一个满足自身业务的 DRM 播放器门槛自然就低了很多,也不一定都要白手起家捣鼓起 FFmpeg 来。
🐕 Gatekeeper change in macOS 15.4
@Cooper Chen:苹果在 macOS 15.4 中调整了安全策略:用户下载文件后,拖拽至部分应用(如 TextEdit)时会反复弹出安全警告,而 Preview 等应用却不受影响。
问题核心:
- 触发条件取决于应用声明的文件类型。若包含"高危类型"(如 Unix 可执行文件),任何下载文件都会触发警告
- 文件扩展名直接影响判定结果,暴露逻辑漏洞
解决方案:
- 普通用户:终端执行 xattr -d com.apple.quarantine 文件名
- 开发者:需检查应用配置,避免声明高危文件类型
这一调整究竟是安全升级还是过度防护?目前苹果尚未回应,用户可暂用上述方法应对。
🐎 How a Single Line Of Code Could Brick Your iPhone
@david-clang:本文介绍了 Darwin Notify 的系统漏洞,仅一行代码 notify_post("com.apple.MobileSync.BackupAgent.RestoreStarted")
即可让设备进入“恢复中”界面且无法退出,只能重启设备,再利用 iOS 自动唤醒小组件的机制,使设备在每次重启后重复触发漏洞,最终实现一行代码把 iPhone 变砖。不限制该敏感通知发送权限的漏洞疑似 iOS 18.2 beta 2 引入的,在作者报告漏洞后,iOS 18.3 已修复。
工具
DeepWiki
@EyreFree:DeepWiki 是一个将 GitHub 仓库转化为交互式 wiki 的工具网站,它能够根据项目代码、文档等内容为 GitHub 上的 Public 项目生成详细文档、绘制交互式图表、提供对话式 AI 助手等。用法是把 GitHub 项目 URL 中的 github
换成 deepwiki
,例如 kingfisher 的对应访问地址就是 deepwiki.com/onevcat/Kingfisher,或直接在 DeepWiki 官网搜索仓库名称,主流项目基本上已经做了预处理,搜不到的话在主页点击 Add repo
等待处理即可。
代码
swift-subprocess
@kemchenj:Swift 近日开源了 swift-subprocess 这个库,作为 Swift Foundation 团队的提案,旨在提高 Process 相关 API 的易用性,支持更多的 Swift 现代化的特性,设计部份参考了 Python 和 Rust,目前属于 0.1 版本,并且在后续可能会直接加入 Swift Foundation 库。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
- [深圳] Lalamove 司机端(Huolala 海外业务)- 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 周报 #333 | 2025-04-28
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
下周就是五一劳动节了,老司机周报轮休一周,提前祝大家劳动节快乐!
新闻
重磅上线 | 一次性购买通知 ONE_TIME_CHARGE 即将正式发布 / A new App Store Server Notification type will soon be available
@SeaHub:自 2024/06/10 沙箱环境首发以来,该通知历经大半年的稳定性验证,现即将进入现网发布阶段。以下内容值得我们重点关注:
-
全商品类型覆盖能力
突破原有仅自动续期订阅型存在后台发货通知的限制。新通知囊括消耗型商品、非续期订阅型商品及非消耗型商品等所有类型,彻底解决一次性购买场景的后台通知缺位问题 -
客户端依赖解耦
通过一次性购买通知,针对发货阶段,我们不再需要依赖客户端与服务端通信。客户端不再作为发货主路径,实现发货逻辑的解耦 -
实时发货闭环
结合一次性购买通知与 appAccountToken 订单透传字段,可构建起媲美国内主流支付平台(微信支付 / 支付宝)的实时发货体系
该通知于 2025/05/27 正式上线,推荐大家优先接入。我们通过一次性购买通知更加优雅的处理订单发货场景,构建更健壮的业务履约体系
新手推荐
🐎 Using singletons in Swift 6
@Smallfly:本文介绍了 Swift 6 中单例模式因并发安全性触发的编译错误及解决方案。针对「全局可变状态不安全」和「非 Sendable
类型共享状态」等典型问题,文章提出多场景应对策略:通过 MainActor
隔离属性或类型、将共享实例重构为 actor
、使用 Sendable
协议确保类型安全,并谨慎使用 nonisolated(unsafe)
或 @unchecked Sendable
作为临时过渡。作者强调遵循 Swift 6 规范的同时,平衡代码安全性与迁移成本。
🐎 Using Swift ’ s defer keyword within async and throwing contexts
defer
常用在代码块(花括号)作用域结束时执行代码。我们常常用来清理在当前作用域内创建的资源或其他上下文,如配置 lock-unlock。这一思想在 async 方法中同样适用,defer
为异步流程提供一个处理成功或失败绝佳的节点,类似异步的 finally。不过 defer
会打破传统的流程控制流顺序,带来便利的同时也会削弱一些代码可读性。详细可阅读原文,文章从这几方面介绍了 defer
的应用:
defer
关键字基础介绍。- 在异常抛出场景中的应用。
- 在异步场景中的应用。
文章
🌟 🐕 Dynamically Constructing Generic Types in Swift
@JonyFang: 在 Swift 这种强类型语言里,运行时拼泛型一直是个痛点 —— 比如我们想动态生成 Optional<T>
、Array<T>
这样的类型,通常只能在编译期确定。
- 作者先带着扒了扒 Swift 元数据(Metadata)的底层结构,包含
Metadata
、ProtocolDescriptor
、ConditionalProtocolDescriptor
等核心数据布局,并封装成易用的辅助类型,帮你在运行时拿到任意类型的信息和协议类型。 - 接着用 SwiftUI 的
_ConditionalContent<TrueContent, FalseContent>
举例,演示如何调用元数据访问器函数,动态组装出三种常见场景下的泛型:optional
、either
、atom
,整个过程零配置、可复用。 - 最后给出一个基于 Swift Runtime 的完整实现方案,从元数据解析、函数指针调用到类型实例化全流程演示,并对该方案在 ABI 稳定性和未来演进方向上的局限性给出了思考。
如果你在做框架或底层库,需要在运行期才知道类型,或者想探索 Swift ABI / Runtime 的更多玩法,这篇文章绝对值得一读。
🐕 20 years of Git. Still weird, still wonderful.
@AidenRao:这篇文章回顾了 Git 诞生 20 周年的历程,最初由 Linus 为解决 Linux 内核协作问题开发,以高效跟踪代码快照为核心设计。从仅 7 个底层命令的"内容跟踪器"起步,逐步整合社区贡献(如 rebase、log 功能),演变为分布式版本控制系统。GitHub 的诞生及其章鱼猫形象推动普及,使其成为全球开发基石。20 年来核心数据结构和"愚蠢但极快"的理念未变,持续支撑从代码管理到内容分发的创新(如 GitButler),奠定现代软件开发基础设施地位。
🐕 SwiftFiddle/swiftregex: Swift Regex is an online tool to learn, build and test Swift Regex Regex and Regex Builder.
@Barney:Swift Regex 是开源在线工具,支持 Swift 正则表达式及 Regex Builder 的实时测试与调试,提供语法高亮和错误定位。基于 Swift、JavaScript 及 Vapor 框架开发,采用 MIT 协议,含 Docker 部署配置。支持命名捕获组、自动化依赖更新及安全策略,适合开发者快速验证正则逻辑。
🐕 Creating MCP Servers in Swift
@Kyle-Ye:作者深入探讨了如何在 Swift 中创建 MCP 服务器。这篇文章不仅为开发者提供了有关 MCP(Multi-Channel Protocol)通信协议的详细背景,还通过代码示例展示了如何在 Swift 中实现一个基本的 MCP 服务器,最后介绍了如何在 VSCode 和其他客户端中使用该 MCP 服务器。
🐕 Make your app content show on Spotlight
@极速男孩:这篇文章介绍了如何让应用内容出现在 iOS 的 Spotlight 搜索中。主要有两种方法:一是通过 AppShortcutsProvider.updateAppShortcutParameters() 自动索引应用数据;二是使用 Core Spotlight API 手动创建索引,步骤包括为数据模型实现 IndexedEntity 协议、设置 attributeSet 元数据、在添加或删除内容时分别调用 indexAppEntities 和 deleteAppEntities 方法。文章还提到从 iOS 18.4 起,可以用 hideInSpotlight 控制内容是否显示在搜索结果中。
内推
重新开始更新「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 周报 #332 | 2025-04-21
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🐕 DocC for Multi-Platform Documentation
@Kyle-Ye: 这篇文章介绍了如何手动创建 Swift 包的跨平台文档。虽然 DocC SPM 插件最近添加了对多目标文档生成的支持,但目前仍不支持跨平台包的文档生成。作者分享了一种解决方案,通过直接使用 Xcode 自带的 DocC 工具来实现。
文章详细讲解了三个主要步骤:
- 为各平台构建项目并生成符号图
- 将.docc 包转换为 DocC 存档
- 将存档处理成可托管的 HTML 文件
作者提供了完整的代码示例,包括如何设置 DocC 包结构、创建 Info.plist 文件定义各平台的部署目标,以及编写 shell 脚本来自动化整个构建过程。这种方法可以有效地显示每个 API 在 iOS、watchOS、visionOS、tvOS 和 macOS 上的可用性。
🐕 iOS 静态代码检查方案解读
@含笑饮砒霜:这篇文章对比了 iOS 开发中三大主流静态代码检查工具:SonarQube、Infer 和 Clang Static Analyzer。SonarQube 存在资源消耗大、配置复杂及 Xcode 适配等问题;Infer 存在语言局限和误报、漏报等问题;Xcode 原生集成的 Clang Static Analyzer,相比 SonarQube 和 Infer,Clang 静态分析在底层问题检测、编译阶段的高效性和多语言支持方面具有显著优势。其凭借增量分析、路径敏感检测和零配置优势,通过脚本筛选增量文件并转换分析结果,可以实现高效自动化检查与定制化报告生成,成为平衡开发效率与质量的中大型项目优选方案。
🐕 How to inspect .ipa files and secure your iOS app from common mistakes
@Barney:本文介绍了如何检查 iOS 应用的 .ipa 文件结构,揭示潜在安全隐患。通过 Apple Configurator 等工具获取 .ipa 文件后,可解压分析 Info.plist(含明文密钥 /URL scheme)、Frameworks(第三方 SDK)和 Resources(测试账户 / 配置文件)。并提出三准则:勿在 Info.plist 存敏感数据,移除开发测试资料,避免明文存储密钥。强调攻击者常用逆向工具(如 Hopper)解析未加密信息,开发者应定期自查 .ipa 文件,强化安全防护。
🐎 你为什么需要了解 Dart AST?一个简单的 bug 带你快速认识下 Dart Kernel AST
@david-clang:作者在调用 extension 拓展 BuildContext 的 context.l10n 时报运行时错误 NoSuchMethodError
,最终通过 ast_to_text.dart 相关工具将 IR 层的 dill 文件转成可读文本,定位到问题根本原因是未显式声明函数参数是 BuildContext 类型,导致编译时 context 被推断为 dynamic 类型,最终导致运行时 NoSuchMethodError
错误。文章里通过分析 Dart AST 来找到代码根本问题的思路值得我们学习。
🐎 SwiftUI Keyboard Shortcut Scope
@Smallfly:本文聚焦 SwiftUI 键盘快捷键的「跨视图生效」问题,当控件通过导航跳转离开屏幕时,其关联的快捷键仍被系统识别并响应,导致操作冲突。核心原因是系统按视图层级解析快捷键,而非视图可见性。解决方案是利用状态变量动态禁用父视图控件,间接关闭其快捷键响应。若你在 SwiftUI 开发中需精准管理多层级导航的快捷键作用域,本文可帮助你快速定位逻辑隐患。
代码
🐎 Supercharging SwiftUI Text with Dynamic Content Styling
@阿权:文章提供了一种扩展 SwiftUI Text
视图的思路,通过自定义文本替换规则,允许对文本中的特定字符串(如单词或段落)应用自定义样式。核心实现包括:
TextReplacementView
:提供单个或多个替换规则的初始化接口。processReplacements
:查找文本中的匹配范围,按顺序处理非重叠替换,拼接生成带有不同样式的Text
视图。
文章最后展示了简单和复杂场景下的用法,支持灵活的视图修饰符(如字体、颜色、斜体等)。其优势在于简化了原有通过组合多个 Text
视图实现样式定制的繁琐流程,提供了更统一的解决方案。
更详细的实现和用法可前往开源库 TextReplacements。
内推
重新开始更新「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)