以打穿 Cloudflare 盾、保持登录态、丝滑原生体验为第一目标而生。一整份帖子流,一次成版。
linux.do 社区用户最大的痛点,是第三方工具频繁撞上 Cloudflare 的挑战页与惩罚。Litho 围绕这一点重排了优先级。
所有网络请求都走「WebView 网关」,继承浏览器的 UA、Cookie 与 TLS 指纹,从根子上绕开挑战页。这是整个项目的地基。
SwiftUI 外壳,帖子流用一整份 WebView 文档渲染,滚动交给系统,做到丝滑。
点赞、收藏、举报、回复、表情回应、聊天、私信、实时通知,网页能做的,这里也顺手。
普通的 URLSession 或 curl 请求 linux.do 会直接吃 403。Litho 的解法是把请求交回给页面自身的 fetch()。
头像、帖内图、徽章图在页面里 fetch 二进制、base64 回传给原生,再交给带缓存的 AvatarLoader。
偶发撞盾时网关自动重载页面完成挑战并恢复请求,顶部状态横幅提示,无需重启 App。
通过网关订阅 Discourse MessageBus 长轮询,驱动聊天、新回复与通知的实时推送。
linux.do 是一个以文字为核心的社区。整份帖子流被渲染成一整份文档、一次成版,正如平版印刷一次印出一整张版面,而不是一个字一个字地拼。
整个 App 立在一块地基上:WebView 网关。它像石版一样承载所有请求,原生、稳定,不被 Cloudflare 轻易撼动。
两个音节、一个干净的古典词根,好记、好读,也好做成一枚印章。商店里它叫「Litho 拓本」,拓本正是从碑石拓下的墨本:白字,黑地。
以「石版」为底,把社区的文字稳稳印到原生 iOS 上。
五个 Tab:话题、类别、聊天、标签、我的。以下每一项都跑在真实账号上。
随附 App 级隐私清单,数据只留在本机。GRDB 缓存断网回退,头像加磁盘缓存层。
一个约定:互动图标一律用矢量图标(SF Symbols / 内联 SVG,currentColor 驱动状态),从不在代码里写死 emoji 字符或表情包 PNG。选中态只是一次 CSS class 切换,不重渲染 DOM。
把社区的文字,稳稳印到你手上的屏幕。
iOS 17+ · 手机主屏显示「Litho」,商店名为「Litho 拓本」。