架构技术评论

拆一拆 Dia 浏览器:它在 macOS 上是怎么做的?

Image

如果你最近关注过 Arc,那你大概已经听说过 Dia。 这是 The Browser Company 推出的另一款浏览器产品,目前主要面向 macOS。

从使用层面看,Dia 延续了 Arc 的一些思路;但如果你打开 Dia.app 的包内容,会发现它在工程结构和系统集成上,其实挺“传统”,也挺有意思。

这篇文章不讨论体验好坏,也不预测方向,只做一件事:

看看 Dia 在技术上到底是怎么构建出来的。


Dia 背后的公司:The Browser Company 简介

先简单交代下背景。

The Browser Company 成立于 2019 年,总部位于纽约,最早因 Arc 浏览器 而受到关注。公司的公开目标一直比较明确:围绕“浏览器”这个载体,探索新的交互和使用方式。

在融资方面,根据公开资料整理:

  • 公司累计融资约 1.28 亿美元
  • 其中包括 2024 年的一轮 约 5000 万美元融资
  • 投资方既有风投机构,也有多位互联网产品背景的个人投资者

截至目前,The Browser Company 并未被收购,仍作为独立公司运营,Dia 也是其自研产品线的一部分。


Dia 是什么形态的应用?

打开 Dia.app 的 Contents/MacOS/Dia,你会看到一个很熟悉的东西:

  • arm64 Mach-O
  • 使用 Xcode 16.4 构建
  • 最低系统版本:macOS 14
  • 入口是 AppKit 的 MainMenu.nib

这基本已经把结论写在脸上了:

Dia 是一个标准的原生 macOS 应用。

它不是 Electron,也不是“套壳网页”。 这点从它对系统能力的使用上也能看出来,比如:

  • AppleScript(Dia.sdef)
  • Dock Tile 插件
  • NSUserActivityTypeBrowsingWeb
  • 原生注册 http / https scheme
  • 对相机、麦克风、蓝牙、位置、桌面、下载等权限的声明

这些都是 AppKit 世界里的常规操作,但在跨平台框架里通常比较麻烦。


浏览器内核:不是 WebKit,而是 ArcCore

在渲染层面,Dia 并没有走 Safari 的 WebKit 路线。

它依赖的是一个叫 ArcCore.framework 的私有框架。 从 Info 信息可以看到:

  • 版本号:143.0.7499.170
  • 对应 Chromium:branch-heads/7499@{#3400}

也就是说,Dia 内嵌的是 Arc 团队维护的 Chromium 分支。

如果你用 otool -L 看依赖,会发现一个很典型的组合:

  • UI / 系统层:AppKit、SwiftUI、Combine
  • 渲染 / 脚本:Chromium(通过 ArcCore)、JavaScriptCore
  • 性能相关:Metal、Accelerate

整体结构可以理解成:

原生 macOS 应用 + Chromium 作为网页渲染组件

浏览器窗口、动画、交互都在原生层完成,Chromium 主要负责网页内容本身。


一个比较显眼的设计:大量 bundle

真正“有工程味”的地方,在 Contents/Resources。

这里不是一个简单的资源目录,而是塞满了 bundle,比如:

  • BoostBrowser_TabUI.bundle
  • 下载面板相关 bundle
  • 个性化模块
  • Supertab 相关组件
  • 一系列 ARC_* bundle

这些 bundle 的共同点是:

  • 都有独立的 Info.plist
  • 由 Xcode 单独构建
  • 各自声明最低 macOS 版本

这说明 Dia 在功能层面采用了 模块化拆分 的方式: 标签页 UI、下载、个性化等功能,并不是全部编进一个大二进制里。

从工程角度看,这种方式更容易:

  • 独立开发和调试
  • 控制功能加载
  • 管理复杂 UI 组件

数据、更新和稳定性:比较“常规”的选择

在基础设施这块,Dia 用的都是成熟方案:

  • GRDB.framework(SQLite ORM)用于本地数据存储
  • Sparkle.framework用于应用自动更新 更新源在 Info.plist 中明确声明
  • Sentry.framework用于崩溃和性能监控

此外还能看到 Datadog、ZIPFoundation、SDWebImage 等依赖,基本都是围绕日志、资源处理和稳定性展开。

整体看下来,这一层并没有太多“实验性设计”,更偏向稳妥实现。


关于本地 AI:已经有基础设施

在资源目录里,还有一组比较引人注意的 bundle:

  • swift-transformers_Hub.bundle
  • mlx-swift_Cmlx.bundle
  • AIInfra_LocalClassification.bundle
  • OnDeviceLoRAadaptors.bundle

从名称和 Info 信息来看,这些组件涉及:

  • Swift Transformers
  • Apple MLX
  • 本地模型推理
  • LoRA 适配

它们同样由 Xcode 构建,最低支持 macOS 13。 这说明 Dia 在工程上已经预留了本地 ML 推理的结构位置,至于具体用在什么功能上,则取决于产品层的实现。


简单收个尾

如果只从应用包和依赖结构来看,Dia 的轮廓其实很清晰:

  • 它是一个 原生 macOS 应用
  • 使用 定制 Chromium 分支 作为网页渲染内核
  • 功能上采用 bundle 化的模块组织
  • 基础设施选择偏向成熟、稳定
  • 已经为本地 ML 能力准备了工程基础

不激进,也不保守,更像是在 macOS 体系里认真“做浏览器” 的一种实现方式。