Skip to content

Releases: SwiftOldDriver/iOS-Weekly

老司机 iOS 周报 #346 | 2025-08-11

10 Aug 12:34
Compare
Choose a tag to compare

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

03 Aug 09:42
Compare
Choose a tag to compare

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

27 Jul 09:32
Compare
Choose a tag to compare

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

20 Jul 14:23
Compare
Choose a tag to compare

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

13 Jul 14:09
Compare
Choose a tag to compare

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

06 Jul 11:13
Compare
Choose a tag to compare

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

29 Jun 10:50
Compare
Choose a tag to compare

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

22 Jun 12:38
Compare
Choose a tag to compare

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)

老司机 iOS 周报 #338 | 2025-06-16

15 Jun 11:31
Compare
Choose a tag to compare

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

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

08 Jun 11:47
Compare
Choose a tag to compare

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

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

文章

🐕 Optimized mathematical computations in Swift

@Barney:这篇文章介绍如何用 SwiftAccelerate 框架 (特别是 vDSP 模块) 高效处理大规模数学计算 (如求和、平均值、标准差)。它替代传统低效方法(如 reduce), 显著提升大数据场景性能 (如百万级健康数据点)。核心展示了 vDSP.sumvDSP.meanvDSP.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 的差异,它们最大的区别是两个:

  1. Impeller 定位只为 Flutter 服务,而 Skia 更多考虑兼顾通用性支持。
  2. Impeller 着色器是提前编译,而 Skia 是运行时动态编译。
    • Impeller:通过 impellerc 工具链在应用构建期将 GLSL 转换为 SPIR-V ,再编译为平台原生代码(如 Metal MSL),彻底消除运行时编译开销。
    • Skia:依赖传统 Ganesh 后端,需在运行时动态生成着色器(GPU 指令),首次执行复杂动画易引发卡顿(Jank)

解析二进制重排优化方案,介绍了如何通过 Clang 插桩和 Page Fault 优化提升 iOS 启动性能,附带了 Swift 项目实战技巧与进阶思路。

🐕 『极致』的二进制重排

@JonyFang: 本文介绍了基于 Clang 静态插桩的二进制重排方案,主要解决了 Page Fault 符号部分剩余未彻底清理的问题。基于 SanitizerCoverage 完善符号收集机制,也针对 C++ 静态初始化和 Swift 项目等特殊场景提出优化思路。

工具

🐎 Data Scout: SwiftData debugging tool

@阿权:Data Scout 是一款 SwiftData 调试工具。SwiftData 底层也会使用 SQLite 能力,但读取文件上会有一些细微的差别。

  1. 发现数据库:支持从模拟器、App 或本地目录中自动发现 SwiftData 数据库。
  2. 查看数据库结构与内容:与 SwiftData 一致,以 Swift 模型的形式展示数据库的结构。并支持层级导航。
  3. 支持使用谓词进行高级筛选。
  4. 实时更新:支持数据库在外部被更新时实时展示在 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)