Orange Cloud:开源的 Cloudflare 原生 iOS 客户端,用 OAuth 登录管理 DNS、Workers 和 R2

1次阅读
没有评论

共计 4234 个字符,预计需要花费 11 分钟才能阅读完成。

我自己名下挂在 [[Cloudflare]] 上的东西其实不算少,几个域名的 DNS、一两个跑着的 [[Workers]]、还有这个博客图床用的 R2 桶。平时管理这些都得打开电脑、登录 Dashboard,点进一层又一层的菜单。最让我难受的不是功能复杂,而是那种"明明只想改一条 DNS 记录,却得正襟危坐打开笔记本"的场景——比如人在外面,临时要把某个域名的解析切一下,或者只是想看看昨晚有没有什么异常流量。手机上 Cloudflare 官方那个网页 Dashboard 体验又实在谈不上好,缩放、点击、加载都很折磨。

所以当我看到 [[Orange Cloud]] 这个项目的时候,第一反应是有点惊喜的。它是一个第三方的 Cloudflare 原生 iOS 客户端,由一位叫 chenzhe 的开发者做出来,而且是开源的。更关键的是,它解决了我对这类第三方工具最大的一个顾虑:登录方式。这篇文章想把我了解到的这款应用梳理一遍,既是给同样重度使用 Cloudflare 的人做个参考,也想聊聊它在设计上一些让我觉得挺克制、挺讲究的地方。

Orange Cloud:开源的 Cloudflare 原生 iOS 客户端,用 OAuth 登录管理 DNS、Workers 和 R2

第三方 Cloudflare 客户端的老大难问题

要理解 Orange Cloud 好在哪,得先说说市面上同类应用普遍存在的一个尴尬。App Store 里管理 Cloudflare 的第三方客户端其实不止一个,像 Clouder、R2GO 这些都有人在用。但它们几乎无一例外,都要求你先去 Cloudflare Dashboard 里手动创建一个 API Token,把权限一个一个勾上,然后复制那串长长的字符串,再粘贴回 App 里。

这个流程本身就很反人性。你勾权限的时候会陷入一种两难:给少了,App 某些功能用不了,回头还得重新去改 Token;给多了,又总觉得心里不踏实——这串 Token 拿到了我账号这么大的权限,万一这个第三方 App 的服务器哪天被拖库了呢?毕竟很多 App 是要把你的凭证传到它自己服务器上去做中转的。对于一个挂着生产环境域名和数据的 Cloudflare 账号来说,这种不确定性是实打实的风险。Token 的管理、轮换、撤销,全都得你自己惦记着,体验非常割裂。

Orange Cloud 的开发者显然也被这个问题困扰过,所以他做的第一件事,不是堆功能,而是把登录这一关重新设计了一遍。

用官方 OAuth 登录,这是最让我安心的地方

Cloudflare 其实官方支持 OAuth 2.0 + PKCE 这套授权流程,只不过很少有第三方应用真的去用它。Orange Cloud 整个登录就架在这上面。具体体验是这样的:你在 App 里点一下登录,弹出来的是 Cloudflare 官方的授权页面,在这个页面上你可以逐项勾选要授予哪些权限——DNS 的读写、Workers、Analytics,这些都是分开授权的,你想给什么给什么,完全由你掌控。

这种设计带来的安全感是质的提升。授权之后,token 只会写进设备本地的 Keychain,既不会上传,也不会经过开发者自己的服务器。开发者的 Web 端在整个链路里只扮演一个 OAuth 回调中转的角色,连授权码都不会留存。换句话说,你的凭证从头到尾只在你的手机和 Cloudflare 之间流动。如果哪天你不想用了,直接去 Cloudflare Dashboard 里一键撤销授权就行,干净利落,不用担心某个 Token 还散落在外面。

我个人觉得这是 Orange Cloud 最有价值的设计决策。功能可以慢慢加,但"凭证怎么处理"这件事是地基,地基没打好,后面功能做得再花哨我也不敢把生产账号交给它。用 PKCE 这套现代授权流程,再配上纯本地存储,等于把信任成本降到了最低——你不需要去信任开发者的服务器,因为它压根碰不到你的密钥。这一点上,它和我之前提过的那些坚持本地优先的工具是一个思路。

功能覆盖得相当全面

登录这关过了之后,Orange Cloud 在功能上的完整度也超出我的预期。它基本把日常会用到的 Cloudflare 模块都覆盖到了,而且不是那种半成品式的"能看不能改",很多是真正可以操作的。

域名和 DNS 这块是基础,zone 列表、DNS 记录的增删改查、还有那个最常切的代理开关(小黄云),都做了完整支持。免费版就能用全部的 DNS 功能,对我这种主要需求就是临时改解析的人来说,免费版其实已经够用了。

Analytics 流量分析用 Swift Charts 原生绘制,请求数、带宽、缓存命中率、拦截了多少威胁,这些数据在手机上看一眼就清楚。数据是通过 Cloudflare 的 GraphQL Analytics API 拉取的,图表是原生的,滑动、缩放都很跟手,不像网页版那样卡顿。

存储相关的支持也挺到位:R2 可以浏览桶和对象,D1 提供了一个 SQL 控制台可以直接跑查询,KV 的键值管理也有。对于把数据层放在 Cloudflare 上的人,能在手机上直接翻 R2 文件、跑一条 D1 的 SQL,这种"随手就能查"的便利是电脑替代不了的。

安全和网络方面,WAF 自定义规则可以查看和启停,Cloudflare Tunnel 的状态也能监控。这些虽然不是高频操作,但关键时刻能在手机上确认一下规则有没有生效、隧道是不是还活着,心里会踏实很多。

把 wrangler tail 搬到灵动岛上

如果要挑一个 Orange Cloud 里最让我觉得"这个想法真好"的功能,那一定是 Workers 的实时日志。它本质上就是把 wrangler tail 这个命令行工具搬到了手机上——通过 WebSocket 直连,日志一行一行实时滚动出来。这对调试线上 Worker 的人来说太有用了,你不用再守在电脑前盯着终端。

而开发者更进一步,把这个实时日志流集成进了灵动岛和锁屏的实时活动(Live Activities)。想象一下这个场景:你刚部署了一个 Worker 的修复,想确认有没有报错,于是开着实时日志,把手机往桌上一放,灵动岛上就持续跳动着最新的日志。这种把开发者工具和 iOS 系统特性深度结合的做法,是那种"只有真正在用 Cloudflare 的人才想得出来"的设计。它没有停留在把网页 Dashboard 套个壳的层面,而是认真琢磨了"在手机这个场景下,开发者到底想要什么"。

除了实时活动,App 还接入了不少 iOS 的系统能力,包括主屏幕小组件、控制中心控件、Siri 与 App Intents、Spotlight 索引,以及后台 token 刷新和 iPad 的分屏。这些细节堆起来,能感觉到开发者是把它当一个正经的原生 App 在打磨,而不是随便糊一个套壳应用。本地化也做得很全,支持简体中文、繁体中文、英文和日文。

开源,而且可以自己编译解锁全部功能

Orange Cloud 的开源协议是 AGPL-3.0 加上 Commons Clause。这里有一个我觉得特别有意思的设计:项目里埋了一个编译开关,叫 OPENSOURCE_UNLOCKED,只要你自己编译的时候在主 target 的 SWIFT_ACTIVE_COMPILATION_CONDITIONS 里加上这个条件,所有 Pro 功能就会全部解锁,完全免费。

换句话说,开发者把选择权交给了用户:你愿意折腾、会用 Xcode,那就自己编译,多账号、存储 Tab、Workers 实时日志、WAF、Tunnel、扩展的 Analytics,这些 Pro 功能一个不少全给你;你不想折腾,App Store 上买个订阅或者一次性买断也行,算是为开发者持续维护买单。这种"源码全开放、付费买省事"的模式,在我看来比单纯卖闭源软件要厚道得多,也比那种开源但功能阉割的项目要诚实。

代码仓库在 GitHub 上的 chen2he/orange-cloud,技术栈是 Swift 加 SwiftUI,Web 端那个 OAuth 回调中转用的是 Next.js 跑在 Cloudflare Workers 上。如果你想自己跑起来,需要 Xcode 26 以上的版本,打开 apps/ios 下的 Xcode 工程,然后自己去创建一个 Cloudflare OAuth client、部署自己的回调中转(官方那个 client ID 和中转域名是不对第三方编译开放的),再把 Bundle ID、App Group 和签名团队都换成你自己的。整套流程对会一点 iOS 开发的人来说不算复杂。

实际使用的一些注意点

有几个实际的点值得提前说清楚。首先是版本和系统要求,GitHub 上仓库的最低目标是 iOS 26,因为开发者一开始想把 Liquid Glass、实时活动、App Intents、控制中心控件这些新东西全用上。不过后来他补充说,其实并没有真的用到 iOS 26 独占的 API,所以实际把最低要求降到了 iOS 18,门槛没那么高。

其次是它目前还处在 Beta 阶段。App Store 正式版还在审核,想现在就用的话可以走 TestFlight 的 测试通道。考虑到这是开发者的第一个 iOS App,又是一个人在维护,遇到些小问题是正常的,但从早期用户的反馈看,设计和功能完整度的评价都不错。

还有一个名字上的小细节:因为"Orange Cloud"这个名字在 App Store 上已经被占用了,所以它在商店里的正式名称带了个连字符,叫"Orange-Cloud"。找的时候留意一下别搞混了。开发者也很坦诚地说做这个 App 一部分动机是想回本付费开发者证书的成本,并且因为 Cloudflare 的 API 经常变动,希望有点收入能支撑他持续更新——这种把话讲明白的态度,反而让我更愿意支持一下。

最后

Orange Cloud 对我这种"域名、Workers、R2 都在 Cloudflare 上,但又懒得动不动就开电脑"的用户来说,戳中的痛点非常精准。它最核心的价值,在我看来不是功能列得有多长,而是它在登录这件最基础的事情上做对了——用官方 OAuth 2.0 加 PKCE 代替手动粘贴 Token,凭证只留在本地 Keychain,直连 Cloudflare API 不经过任何第三方服务器。这套隐私模型让我能放心地把生产账号交给它,而这恰恰是大多数同类工具都没能做好的地方。

再加上它原生 iOS 的细腻体验、把 wrangler tail 搬上灵动岛这种巧思、以及开源可自编译解锁的厚道做法,整体给我的感觉是一个有想法、也愿意认真打磨的项目。它还在持续迭代中,作为第一个版本已经相当能打。如果你也是 Cloudflare 的重度用户,又恰好用 iPhone,那这个 App 值得装上 TestFlight 试一试;如果你会折腾,clone 下来自己编译解锁全部功能,体验会更完整。我自己是已经把它放进了日常会用的工具清单里,至少下次在外面要临时改条 DNS 的时候,不用再满世界找电脑了。

正文完
 0
评论(没有评论)