普通视图

发现新文章,点击刷新页面。
今天 — 2025年10月14日首页

高通收购 Arduino:历史的轮回 | 肘子的 Swift 周报 #0106

作者 东坡肘子
2025年10月14日 07:54

issue106.webp

weekly.fatbobman.com 订阅本周报的电子邮件版本。访问我的博客 肘子的 Swift 记事本 查看更多的文章。加入 Discord 社区,与 2000+ 中文开发者深入交流 Swift、SwiftUI 开发体验。

高通收购 Arduino:历史的轮回

上周,高通宣布收购知名开源硬件平台 Arduino,并同步发布首款搭载自家芯片的 Arduino UNO Q。与经典版本不同,UNO Q 采用了“双脑”架构——由运行 Linux 的 Qualcomm Dragonwing 处理器负责高性能计算,同时保留 STM32 微控制器以执行实时控制任务。这种设计无疑强大,却也悄然偏离了 Arduino 一直以来“简单、低成本、易上手”的初心。

尽管高通承诺保持 Arduino 的品牌独立与开源特性,但考虑到其在专利授权领域一贯的强势作风,以及深植于商业化的企业基因,社区的担忧并非杞人忧天。44 美元的定价,也让这款产品距离 Arduino 最初面向教育与创客的定位愈发遥远。

有趣的是,“Arduino” 这个名字本身就带着宿命的意味。2005 年项目诞生时,创始人们常在意大利伊夫雷亚的 Bar di Re Arduino (阿尔杜因国王酒吧)聚会,遂以此命名。而那位意大利国王 Arduin of Ivrea,曾代表本土势力反抗神圣罗马帝国的统治,坚守 12 年后终告退位。自此,意大利北部并入帝国版图,失去独立地位近 850 年。

千年之后,以反抗者命名的 Arduino,在独立运营 20 年后,同样被美国科技“帝国”收编。这种历史的轮回,令人唏嘘。或许在命名的那一刻,命运的伏笔已悄然埋下。

然而,正如 Arduin 国王虽败犹荣,其反抗精神流传千年。愿 Arduino 所代表的开源理想与创客精神,也能超越公司所有权的变迁,继续在世界各地延续与发芽。

这场收购映照出开源世界的恒久困境:如何在坚持理想主义的同时,实现商业的可持续?

也许,实体终将归于凡尘,而唯有精神才能长久流传。

前一期内容全部周报列表

近期推荐

静默执行后台任务 (Do Job Silently)

在 iOS 中,应用进入后台后,系统会严格限制其资源使用。若开发者希望执行数据刷新或周期性计算等任务,可以借助后台任务机制,让系统在合适的时机自动触发相应逻辑。Kyryl Horbushko 在本文中详细介绍了后台任务的两种实现方式:传统的 BGTaskScheduler 与更现代的 .backgroundTask 修饰符。文章的亮点在于提供了完整的配置清单、调试技巧与常见陷阱的规避方案——包括使用 LLDB 命令模拟任务触发、通过本地通知获得可视化反馈等实用方法。作者认为,对于新的 SwiftUI 项目,.backgroundTask 更契合声明式编程范式,是更自然的首选方案。


OpenSwiftUI 集成指南 (How to Integrate OpenSwiftUI into Your Project)

OpenSwiftUI 是一个面向研究与教育的 SwiftUI 开源实现。随着框架的不断完善,越来越多的开发者开始关注并尝试使用它。但在实际集成时,你会发现它并非“即插即用”——需要手动处理私有框架依赖。为此,项目主要开发者 Kyle Ye 撰写了本文,详细介绍了通过 Swift Package Manager 集成 OpenSwiftUI 的完整步骤,包括处理 DarwinPrivateFrameworks 等关键环节。

OpenSwiftUI 是少数能让开发者深入理解 SwiftUI 内部渲染机制的实践项目。现阶段,它更适合作为探索工具,而非生产方案。


Foundation Models 框架实操问答 (iOS 26: Foundation Model Framework - Code-Along Q&A)

Apple 在今年推出了全新的开发者教育形式——Code-Along,这是一种结合实时编码演示与即时答疑的在线教学活动。在 9 月举行的首场 Code-Along 中,Apple 工程师用两个小时详细演示了如何将 iOS 26 的 Foundation Models 框架集成到应用中,从基础 API 调用到性能优化技巧,同时实时回答了众多的开发者问题。

Anton Gubarenko 对本次活动问答记录进行了详尽的整理,内容涵盖了模型的 4K token 上下文限制、1.2GB 内存占用、结构化输出(Generable)、流式响应、并发处理等关键技术细节,以及开发者最关心的隐私保护、App Store 审核等实践问题。


在 SwiftUI 中使用 SwiftData 实现搜索 (Performing Search with SwiftData in a SwiftUI app)

由于 SwiftData 的 @Query 不支持在视图内动态更新谓词,因此在使用 searchable 构建搜索功能时,需要进行一些额外处理。本文中,Letizia Granata 提出了一个巧妙的解决方案:通过分离视图结构——主视图负责管理搜索状态,子视图负责处理动态查询,从而优雅地解决了这一限制。她还建议在谓词中使用 localizedStandardContains 进行比较,以忽略大小写并提升本地化搜索体验。


为 Toggle 添加动态图标覆盖层 (SwiftUI Toggle with Dynamic Image Overlay)

虽然开发者可以通过自定义 ToggleStyle 完全控制 Toggle 的外观,但这往往意味着需要重新实现所有系统原生行为——包括尺寸适配、色调处理和动画效果。Artem Mirzabekian 在本文中展示了一种更务实的方案:保留原生 Toggle,通过 GeometryReader 获取尺寸、DragGesture 捕获触摸位置,以 overlay 的方式添加能够响应用户交互的动态图标。这种扩展而非重写的思路,既保持了系统一致性,又实现了视觉增强。


Apple 平台的 macOS DNA (Apple Platforms Runs on macOS DNA)

为什么 Swift 开发中会遇到 NS 前缀?为什么在 iOS 设备上,TARGET_OS_MAC 也会返回 true?这些看似奇怪的设计其实都有其历史渊源。Uwais Alqadri 在本文中探讨了 Apple 平台架构的三个关键节点:NeXTSTEP 合并带来的 NS 前缀与 Objective-C 体系、Darwin 作为共享的 Unix 基础,以及各平台实际上都“运行在” macOS 技术栈之上的分层架构。

了解这段历史,不仅能解释那些“反直觉”的设计决策,也能帮助我们正确使用平台条件编译,并理解这些特性为何至今仍然存在、并且难以改变。

工具

Swift Profile Recorder:无需系统权限的性能分析利器

Swift Profile Recorder 是 Apple 开源的进程内采样分析器,专为 Swift 服务端应用设计,已在 Apple 内部大规模使用多年。与传统性能分析工具(如 eBPF、DTrace)需要系统特权不同,它以 Swift Package 形式直接运行在应用进程内部,无需额外权限即可进行 On-CPU 和 Off-CPU 分析。这使其能够在 Kubernetes、Docker 容器等受限环境中正常工作,只需通过 curl 命令即可采集性能样本,并支持 Speedscope、Firefox Profiler 等主流工具可视化。

该项目的“零权限、易集成、跨平台”特性,让生产环境的性能分析不再是特权环境的专属。想深入了解其背景和 Apple 的实践经验,推荐阅读 Johannes WeissMitchell Allison 撰写的 Introducing Swift Profile Recorder: Identifying Performance Bottlenecks in Production


RichText:让文本与视图自由混排的 SwiftUI 组件

SwiftUI 的 Text 无法自由嵌入可交互视图,文本选择体验也不够好。由 LiYanan 开发的 RichText 通过声明式语法实现文本与视图混排,基于 TextKit 2 精确排版,嵌入的视图(例如 Button)完全保留交互能力,同时支持流畅的文本选择和复制。

TextView {
      Text("Hi, This is **RichText**.")   // Markdown 会被解析
      " Hello "                           // 普通字符串
      Button("Tap Me") {                  // 完全可交互的按钮
          print("Button Clicked")
      }
      .id("button")                       // 建议所有视图都加 id
      Text(.now, style: .timer)           // 动态文本
          .id("timer")                    // 通过 id 保持为视图以维持动态更新
}

Foundation Models Playgrounds

Ivan Campos 构建并维护的 Playgrounds 集合,展示如何调用 Apple Foundation Models 框架完成对话、摘要、创作、工具调用等场景。依主题划分示例:聊天对话、摘要解释、内容生成、代码与数据、图文多模态、安全评测、垂直工具、智能体模式等,每个 Playground 都聚焦一个能力点。

image-20251011081702134

往期内容

THANK YOU

如果你觉得这份周报或者我的文章对你有所帮助,欢迎 点赞 并将其 转发 给更多的朋友。

weekly.fatbobman.com 订阅本周报的电子邮件版本。访问我的博客 肘子的 Swift 记事本 查看更多的文章。加入 Discord 社区,与 2000+ 中文开发者深入交流 Swift、SwiftUI 开发体验。

昨天以前首页

Swift 6.2 来了 | 肘子的 Swift 周报 #0103

作者 东坡肘子
2025年9月23日 08:04

issue103.webp

weekly.fatbobman.com 订阅本周报的电子邮件版本。访问我的博客 肘子的 Swift 记事本 查看更多的文章。加入 Discord 社区,与 2000+ 中文开发者深入交流 Swift、SwiftUI 开发体验。

Swift 6.2 来了

在 Swift 6.0 发布一年后,Swift 6 迎来了第二个重要版本更新。除了备受关注的 Default Actor Isolation 外,Swift 6.2 还带来了诸多实用的新功能

相比语言能力的提升,我更欣赏 Swift 团队在工具链方面所做的努力:VS Code 插件获得官方认证、swift-syntax 支持预编译包等。这些更新为第三方编辑器带来更可靠的支持,也实实在在地提升了构建效率与可维护性。

然而,作为 Swift 开发者,我们不得不面对一个长期存在的现实困境:Swift 仍然紧密依附于苹果的产品发布节奏。无论是新版本发布时机与 Xcode 的强绑定,还是 Xcode 工具链与官方开源版本间的差异,都在提醒我们:开源的 Swift,距离真正的“开放”还有一段距离。

苹果是 Swift 的缔造者,也是迄今最主要的贡献者,这点无可否认。但或许,只有当 Swift 在形式上逐步摆脱对苹果年度节奏的依赖,建立起独立的发布机制与治理结构,才能真正激发社区的参与热情,也才能让这门语言在更广阔的平台与领域中实现它应有的潜力。

前一期内容全部周报列表

近期推荐

iOS 17+ SwiftUI TextField 内存泄漏分析

有开发者发现,自 iOS 17 起在包含 TextField 的视图中出现了一个可稳定复现的内存泄漏问题(截至 iOS 26 仍未修复):即便视图已经销毁,UITextField 及其关联的环境对象仍会滞留在内存中,直到另一个输入源被激活才会延迟释放。这个问题不仅影响 SwiftUI,同样存在于 UIKit。Kyle Ye 在本文中深入分析了其根本原因 —— 来自 AutoFillUI 框架中的 AFUITargetDetectionController 引起的引用保留,并提供了包括 .autocorrectionDisabled(true) 在内的多种实用应对方案。


深入消化 Swift Actor 使用建议 (Zettelkasten for Programmers: Processing Swift Actor Usage Advice in Depth)

本文是 Christian Tietze 对 Matt Massicotte 上周文章《When should you use an actor?》的回应。在赞同 Matt 提出的 Actor 使用三原则的基础上,Christian 进一步指出:Swift 中的 actor 是一种昂贵且语义明确的并发工具,只有在确实满足特定技术与设计前提时才值得引入。否则,应优先考虑更轻量、明确的手段来实现并发与隔离。

Actor 作为 Swift 新并发模型中的重要组成部分,何时使用、如何使用,仍需更多项目经验的积累与总结。而像这样的理性探讨与实践反思,正是构建现代 Swift 并发知识体系中最珍贵的材料。


Swift 中的功能开关 (Feature flags in Swift)

在项目开发中,许多功能通常只在特定构建模式(如 Debug、TestFlight 或 Release)中启用。在本文中,Majid Jabrayilov 分享了他的实践经验:通过结合构建配置与 FeatureFlags 模型,并借助 @Entry 属性包装器将功能开关注入 SwiftUI 的 EnvironmentValues,开发者可以实现更快速的开发流程、更灵活的测试手段以及更安全的功能上线方式。

对采用 trunk-based 开发流程的 Swift 项目尤其值得参考。


Liquid Glass 设计系统三原则 (The Northern Stars of Liquid Glass)

本文是 Danny Bolella 对 Apple 人机界面指南(HIG)中围绕 Liquid Glass 所提出的三大设计原则 —— Hierarchy(层级)、Harmony(协调)、Consistency(一致性) 的深入解读。Danny 不仅阐释了每条原则在视觉系统中的意义,还结合 SwiftUI 示例展示了如何在实际开发中落地这些理念,例如通过 .buttonStyle(.glass) 营造界面层级、使用 ConcentricRectangle 建立视觉节奏,以及借助 ViewThatFits 实现跨平台一致性。


空间计算为何必然崛起:下一代计算平台路线图 (Why VR, AR and Spatial Computing Will Inevitably Take Off: the Roadmap to the Next Computing Platform)

作为一位专注 VR/AR 领域的投资人,Wu Xu 在本文中系统回顾了计算平台从主机、PC、智能手机到可穿戴设备的演进路径,并结合硬件能力、产业节奏与产品形态,深入分析了 VR、空间计算与智能眼镜三条路径将如何并行演化并最终收敛。他将这一趋势称为下一代计算平台的“三线合围”。文中提出多个极具洞察力的判断,例如:“Vision Pro 是 iPhone 发布前的 Mac”;“真正改变日常的智能眼镜,关键不在硬件,而在 AI 是否能带来显著的主观优势感知”。


iOS 应用渲染架构深度解析 (iOS Application Rendering: A Deep Dive)

在这篇深入的技术文档中,Ethan Arbuckle 系统梳理了 iOS 应用渲染的完整架构流程——从 UIView 构建、CALayer 合成,到 CAContext 与系统渲染服务的协同,再到最终像素输出。文章详尽覆盖了 UIKit、QuartzCore、FrontBoardServices、BackBoardServices 与 Render Server 等核心组件的职责划分与协作机制,并深入剖析了多进程环境下如何通过 contextID 实现输入事件路由、动画同步与场景托管等关键能力。

工具

edge-agent: Swift 边缘计算运行时平台

虽然 Swift 支持 Linux,但在边缘设备(如 Raspberry Pi、Jetson Orin Nano)上部署和调试 Swift 应用程序一直缺乏成体系的解决方案。edge-agent 正是为了解决这一痛点而生——它是一个专为 Swift 开发者打造的边缘计算运行时平台,结合 Swift 静态 Linux SDK 与 Docker,提供从跨平台构建、容器化部署到远程调试的完整流程。通过预构建的 EdgeOS 镜像和 CLI 工具,开发者无需深入配置交叉编译环境,即可将 Swift 应用快速运行于边缘设备,并借助 LLDB 实现远程调试。

求贤

美团 iOS / Android 开发岗位招聘中!

美团客户端团队现招聘多个方向的开发工程师,偏向中级(含较丰富基础组件 /性能 /动态化架构经验者优先)。

卡片容器方向(Android / iOS / 鸿蒙)

  • 地点:北京望京
  • 职责包括负责公司级卡片运行时框架、DSL 与编译/发布流水线,参与容器化或动态化卡片的架构设计与优化。
  • 技术要求:熟悉 iOS 客户端架构,理解跨平台(Android / 鸿蒙)动态组件/容器化机制;性能调优能力;中级经验(3‑5 年或同等能力)。

首页业务 & 性能优化方向

  • 业务场景:美团首页,高频业务 & 大量用户访问;关注首页加载性能、滚动流畅性、内存占用与渲染效率等体验指标。
  • 技能要求:能用性能工具进行 Profiling/诊断;有 UI 渲染、动画/布局优化经历;有实战经历优先。

往期内容

THANK YOU

如果你觉得这份周报或者我的文章对你有所帮助,欢迎 点赞 并将其 转发 给更多的朋友。

weekly.fatbobman.com 订阅本周报的电子邮件版本。访问我的博客 肘子的 Swift 记事本 查看更多的文章。加入 Discord 社区,与 2000+ 中文开发者深入交流 Swift、SwiftUI 开发体验。

❌
❌