几天前,The Browser Company 的 CEO Josh Miller 发表了一封致 Arc 用户的公开信,分享了一些社区广泛关注的内容,包括团队为何从 Arc 转向 Dia、从 Arc 项目中获得的经验教训、Dia 的设计理念、为何未将 Dia 功能整合进 Arc,以及 Arc 的未来发展规划等。
信中一句话:“Specifically, sunsetting our use of TCA and SwiftUI to make Dia lightweight, snappy, and responsive”,在 Swift 开发者社区引起了广泛讨论。尽管随后一条推文澄清 Arc 使用的 TCA 是一个早期的特殊分支,与正式发布的版本存在较大差异,但这个话题仍然值得开发者深入思考。
Arc 作为一款使用 Swift 开发的跨平台浏览器,在推出初期便获得了不少关注。虽然在激烈的浏览器市场竞争中未能取得预期的成功,但 The Browser Company 在推动 Swift 更好地支持 Windows 平台方面的贡献依然值得肯定。有意思的是,在 Arc 最初亮相时,官方曾强调 TCA 显著降低了跨平台开发的复杂度,但仅仅几个月之后,团队在技术选型方面就发生了明显的变化。
从技术角度来看,Arc 的最低系统要求是 macOS Ventura。在这样一个大型项目中选择 SwiftUI 确实令人好奇。毕竟 SwiftUI 直到最近两个版本才在 macOS 平台有较明显的进步,且这些进步主要集中在 API 的丰富程度上,而性能表现仍存在明显短板。客观而言,SwiftUI 与 AppKit 在 macOS 上的性能差距,要比 SwiftUI 与 UIKit 在 iOS 上的差距更为明显。此外,Arc 基于 Chromium 开发,这也让人对 SwiftUI 与 TCA 的组合对性能的具体影响更加感兴趣。
值得一提的是,SwiftUI 与 AppKit/UIKit 并非竞争关系,而更多的是互补关系。在相当长一段时间内,这些框架都会拥有各自适合的应用场景。开发者可以根据具体的需求灵活地选择技术方案,在 SwiftUI 尚未成熟的领域(如复杂导航、文本编辑、高性能列表等)继续使用 AppKit/UIKit。响应式框架受限于其底层机制,相较于命令式框架必然存在一定的性能差距,不过随着框架持续优化和硬件性能不断提升,这种差异会逐渐被开发者和使用者所忽略。
随着 WWDC 2025 的临近,SwiftUI 已即将步入第七个年头。回顾过去,与 UIKit 在相同发展阶段相比,SwiftUI 在功能完整性、稳定性以及开发者接受程度方面依然有不少成长空间。苹果官方有必要在更多第一方应用中进一步使用 SwiftUI,通过实际产品表现来验证这一框架作为未来主流 UI 技术的可行性和优势。只有看到更多苹果核心应用成功迁移到 SwiftUI,并展现出色的性能和用户体验,整个开发者社区才能更有信心地全面拥抱这一框架。
Arc 团队的技术选型变化也提醒我们,技术决策应该始终基于具体的项目需求和约束条件。没有绝对完美的技术方案,只有在特定场景下最适合的选择。对 Swift 开发者而言,保持开放且务实的态度,既积极探索新技术的潜力,也理性评估其成熟度,寻求功能需求、开发效率与性能表现之间的最佳平衡,或许才是最重要的。
WWDC 2025 上,你最期待的 SwiftUI 改进是什么呢?
近期推荐
相机类 App Swift 6 重构实战 - SLIT_STUDIO 开发日志
尽管 Swift 6 已发布一段时间,但不少苹果第一方框架仍未完成适配,导致部分依赖这些框架的开发者在迁移过程中遇到阻碍。Megabits 在开发 SLIT_STUDIO 相机 App 时也面临类似挑战,但他选择迎难而上。在本文中他将分享如何通过引入 actor
、GlobalActor
以及职责清晰的组件(如 Recorder 和 CaptureManageObject),应对 Swift 6 的线程安全变更,解决 AVFoundation 与 Swift Concurrency 的兼容性问题,同时提升代码结构与安全性,避免依赖 @preconcurrency
和 nonisolated
等临时方案。
让你的 iOS App 更好地支持动态字体 (Making Your iOS App More Accessible with Dynamic Type)
动态字体(Dynamic Type)是苹果生态中辅助功能的核心组成,但在实际项目中对其进行良好支持并没有想象中那样简单。简单粗暴地“全量支持”反而可能让应用的可用性变差。Shaun 深入探讨了动态字体引发的典型问题(如内容无法滚动、水平空间不足等),并给出了 SwiftUI 下的实用解决方案,包括 ScrollViewIfNeeded
、ViewThatFits
与 dynamicTypeSize
的巧妙使用。他还封装了一个通用布局组件 HOrVStack
,有效避免了动态字体适配中常见的代码重复问题。Shaun 总结了三条极具价值的建议:“尽早支持”、“保持代码简洁”以及“实用优先于完美”。
🪜 如何正确使用 SwiftUI 的 Form (Forming an Opinion on SwiftUI Forms)
顾名思义,Form
是 SwiftUI 中处理表单场景的首选容器,但它并不总能满足所有需求。Danny Bolella 在本文中系统性地拆解了 Form
的特性、局限与适用场景,并通过实际代码对比展示了 FormStyle
与自定义容器在开发体验上的异同。Danny 清晰总结了使用 Form
的优势(如系统一致性、无障碍支持、设计更新“自动跟进”)与潜在问题(如样式限制、跨平台差异、定制难度),并提出了一条实用的中间路径:在追求原生一致性的界面中使用 Form
,而在强调品牌风格与像素级控制的界面中,则建议自建容器。
Swift 微应用架构的扩展实践 (Microapps Architecture in Swift: Scaling)
随着越来越多开发者体会到 SPM 带来的模块化优势,项目中将不同功能封装为单独 Target 已成为常态。但当模块数量快速增长时,将所有内容集中在一个 Swift Package 中会逐渐暴露出问题——如 Package.swift
文件臃肿、依赖关系难以管理、Xcode 构建效率下降等。在本文中,Majid Jabrayilov 建议转向“每个功能一个 Package”的策略,每个功能内部再细分为 Domain、UI、Service 等模块,从而实现更清晰的依赖关系与更好的构建性能。本文是其 Microapps Architecture in Swift 系列的第五篇,聚焦如何让这种架构模式在大型项目中顺利扩展。
SwiftUI 中 ViewBuilder 的实用技巧 (Tips and Tricks for When Using SwiftUI’s ViewBuilder)
@ViewBuilder
是 SwiftUI 中至关重要的构建机制之一,但我们在日常开发中往往低估了它的灵活性和潜力。本文中,John Sundell 深入讲解了 ViewBuilder
的实际能力与最佳实践,尤其是在构建自定义组件(如 Container)时,如何通过它实现多视图声明、灵活控制布局,并打造符合 SwiftUI 风格的清晰 API。
Enum vs Struct:Swift 中的类型选择指南 (Swift Enums vs Structs - Picking the Best Tool for the Job)
在 Swift 生态中,值类型通常是开发者的首选,而其中最常用的莫过于 struct
与 enum
。在建模应用状态或构建配置系统时,该如何选择?Daniel Saidi 在本文中通过具体示例,深入比较了两者在有限状态管理与可扩展配置表达中的适用场景,并清晰总结了各自的优势与局限。Daniel 指出:枚举适用于有限且互斥的状态建模,具备模式匹配和编译期穷举校验的优势;而结构体则更适合处理风格、样式等可扩展需求,可通过默认值、扩展方法或环境注入实现灵活配置。
详解订阅宽限期:机制与启用理由 (Billing Grace Period Explained: How It Works and Why It Matters)
你是否遇到过因支付失败而导致 App Store 订阅突然中断的情况?想象一下,如果你的应用用户也遇到类似问题,可能就此流失。为此,苹果提供了“Billing Grace Period(宽限期)”机制,允许用户在支付失败后继续享受高级功能,同时后台自动重试付款流程。但这个功能并不会默认启用。在本文中,Antoine van der Lee 详细介绍了 Billing Grace Period 的运作方式、为何它有助于降低用户流失,以及如何在 App Store Connect 中正确配置该功能。
🪜 你可能忽略的 Swift static 技巧 (Swift Static Secrets)
在 Swift 中,static
常被视为“类级别的工具方法或常量”的代名词,但它的能力远不止于此。在这篇文章中,Koti Avula 通过多个实际例子,深入挖掘了 static
在不同上下文中的用途与优势。你将看到它如何用于锁定类行为(与 class
的可重写性对比)、为枚举添加共享配置、在协议中定义类型级别的契约、实现一次性加载和类型缓存、在单元测试中复用测试数据,以及通过静态常量替代“魔法字符串”来增强自动补全与代码安全性。
工具
SkyLightWindow – 让你的视图一键置顶
由 Lakr 开发的 SkyLightWindow
是一款 macOS 框架,可将视图显示在系统所有窗口之上,甚至覆盖全屏应用、浮动窗口甚至锁屏界面,为持久置顶类 UI 提供解决方案。该框架支持 SwiftUI,只需使用 .moveToSky()
修饰符,即可将任意视图移动至系统最顶层空间。它还支持透明背景、多屏适配、自定义样式和手动窗口委托,非常适合用于构建 HUD、悬浮工具栏、辅助调试面板等系统级功能。
⚠️ 注意:该库基于私有 API 实现,不需要特殊沙箱权限,可用于 Mac App Store,但仍存在系统兼容性风险。
CIMetalCompilerPlugin - 用 Swift Package Plugin 构建 Core Image Metal Shaders
如果你在用 Core Image 编写图片处理效果,并希望用 Metal 写自定义着色器,可能会发现一个问题:Swift Package 并不能直接编译这些 Metal 文件,因为它不支持设置必要的编译参数。为了解决这个问题,Weichao Deng 创建了这个插件 —— CIMetalCompilerPlugin
。它的作用是:
- ✅ 自动帮你编译放在
Shaders
文件夹里的.metal
文件 - ✅ 把它们打包成可以在代码中使用的
metallib
文件 - ✅ 你只需要像平时加载资源一样,用
Bundle.module
拿到它就能用了 - ✅ 不需要额外建 framework 或手动配置 Xcode,非常适合用 Swift Package 管理项目
简单来说,这个插件让你能在 Swift Package 里安心用 Core Image + Metal 写自定义滤镜,不用再为构建流程发愁。
求贤
寻找 iOS 工程师
Dasein Studio 的所有产品均面向海外市场,现招聘 iOS 工程师,可 100% 远程,时区灵活。
我们希望你具备独立完成 App 的能力,熟悉 Swift / SwiftUI / Combine,或对 ARKit、RealityKit、Metal 等前沿技术有热情并能快速落地。如果拥有全栈背景,会是加分项。欢迎附上 2–3 个作品(上线或 Demo 均可),并提供 GitHub、TestFlight、App Store 或演示链接。
当前项目在实时互动、动画表现和可扩展性方面有较高技术挑战(技术深度不低于 Snapchat / BeReal),适合热爱打磨细节、具备视觉还原力的开发者。你将与有技术背景的创始人并肩推进产品与探索。初期可先试合作两个月,薪资 ≥ 20K RMB/月(全职),具体面议。
- 📧 联系邮箱:julian.ding@getcha.fm
- 📄 查看更多信息