Weatherling

部落格 · · 作者:Matt Senter

Weatherling 的故事:從一場雨的實驗到 Mac App Store 前十

兩週前,Weatherling 還只是一款讓雨落在桌面視窗上的小型 Mac App。從那以後,它升到了 Mac App Store 工具類第 8 名,沒有投放任何廣告就賣出了數百份,還長成了一個有雪、有秋葉、有一群可收集小角色 Ling™ 的小世界。下面就是它的來龍去脈。

一切從一場小雨開始

我大部分時間都待在 Mac 前,一直很喜歡讓桌面多一點氛圍的想法。有一天,我想,要是工作時視窗上能下點雨就好了。不用多複雜,只要一點環境天氣,讓桌面更有生氣。

我也對 Metal 這個 Apple 的圖形框架很好奇。我做了很多年軟體,卻從沒碰過 Metal。這正好是個學點新東西的有趣藉口。

我會 Swift,再借助 Codex 和 Claude Code 的使用說明,開始拼湊出一個原型。目標是渲染出真正能和桌面視窗互動的雨,而不是在螢幕上蓋一層動畫。第一個版本簡單得不能再簡單:沒有雪,沒有風,沒有樹葉,沒有角色,更沒有遊戲。真的只有雨。

但它成功了!雨滴落過桌面,碰到視窗邊緣,營造出天氣就在我的 App 四周發生的錯覺。我覺得挺酷的,就在 Reddit 上發了一段影片,想看看大家怎麼想。

Reddit 上的網友有不少想法

Reddit 上的反響比我預想的熱烈得多。貼文收穫了很多點贊、鼓勵的評論、提問和建議。大家似乎很喜歡天氣與桌面視窗互動的點子,而且幾乎馬上就開始要求更多。

最早的請求之一是雪,於是我加了雪。大家還希望對天氣有更多控制,我就不斷打磨效果,加入了強度、深度和風向的選項。後來,有人想要飄落的秋葉。這聽起來是個再合適不過的季節性功能,所以最終它們出現在了 1.4 版本里。

回頭看,Weatherling 的演變有這麼多都直接來自 Reddit 上的評論,真是有趣。雪和秋葉本來不在我最初的計劃裡。它們之所以出現,是因為大家看到了原型,喜歡這個點子,並想象它還能做什麼。

有一點很快就清楚了:大家要找的未必是又一個效率工具。他們喜歡的是讓自己的 Mac 更有趣一點。這個認識為我開啟了一扇完全沒想到的門。

Ling™ 登場

開發過程中的某個時刻,我覺得 Weatherling 需要一點個性。天氣效果本身已經很好玩,但我想知道,要是偶爾有小小的角色出現在桌面上,在視窗邊緣溜達,對天氣做出反應,會怎麼樣。

於是我心血來潮,做出了第一批 Ling。這些小傢伙會走、會跑、會跳,會在水坑裡踩水,下雨時還會撐起雨傘。它們並不是為了什麼實際用途,只是工作時可以偶然發現的一點樂趣。

但當桌面上有了到處溜達的角色,我開始想,能不能把它們變成一個小遊戲。Ling 收集遊戲就是這樣誕生的。

每隔一會兒,視窗上會出現彩色的箱子。目標是把 Ling 收進這些箱子裡來獲得分數。有意思的是,Ling 和箱子的出現機率都不一樣,有些 Ling 比別的稀有得多,箱子也是如此。

我設計了一套計分演算法,會同時考慮兩者的相對稀有度。普通的 Ling 放進普通的箱子,得分不會太高,而把特別稀有的 Ling 放進特別稀有的箱子,則能拿到相當可觀的分數。某些組合甚至還有隱藏獎勵。

基本思路很簡單:把最稀有的 Ling 放進最稀有的箱子,拿到最高分。還可以和朋友分享、一較高下。

我也有意把分享做進了體驗裡。我希望大家能炫耀自己的 Ling 分數,向朋友發起挑戰,讓 Weatherling 能在最初發現它的人之外自然地傳播開來。

這是個完全可選的小遊戲。如果您只想讓桌面下點雨,那就只有雨。但如果您喜歡收集東西、追逐高分,還有另一層世界可以探索。而 Ling 本身,已經成了我在整個專案裡最喜歡的部分之一。

和孩子們一起做 Ling

隨著收藏越來越多,我的孩子們也加入了進來。我們會坐在一起,想出角色,商量它們該長什麼樣、怎麼動。藉助 AI 輔助開發工具,我們製作精靈圖,嘗試各種動畫,再把角色放進 Weatherling。這成了一個特別有趣的共同創作過程。

有些角色相當簡單:會走、會跑、會跳,還會打傘。另一些則有複雜得多的個性和特殊動畫。有的會變身成別的生物,有的出場方式很特別或是退場很戲劇化,還有的帶著自己的道具、交通工具或獨特的動作。

可能性幾乎沒有盡頭,和孩子們一起頭腦風暴越來越離譜的 Ling 點子,真的特別開心。一個為了學 Metal 而做的技術實驗,竟然變成了一個家庭創作專案。渲染出第一滴雨的時候,我可從沒想到會這樣。

Weatherling 上線

2026年9月25日,我在 Mac App Store 發布了 Weatherling。我沒有準備什麼大型營銷活動,沒有廣告預算,沒有付費推廣,也沒有精心設計的發布策略。我只是在 Reddit 上發了貼文,透過自己的渠道分享了一下,然後希望大家會覺得有意思。

上線幾天後,一位朋友給我發訊息,說 Weatherling 正在 Mac App Store 的榜單上往上爬。我甚至都沒留意過排名。我去一看,Weatherling 已經到了 Mac App Store 工具類第 15 名,這真是個讓人興奮的驚喜。

但它還在繼續上升。第一週之內,Weatherling 就升到了工具類第 8 名,讓我這個小小的雨天實驗躋身該分類的前十名 App。

而且讓我驚喜的不只是排名。頭兩週裡,Weatherling 賣出了數百份,我沒有花一分錢做廣告。

每一筆銷售都來自自然發現、Reddit 貼文、口口相傳,以及大家把 App 推薦給別人。對一個獨立開發者來說,這太鼓舞人了。在 Reddit 上給一段酷炫效果的影片點個贊是一回事,真的掏自己的錢買下你做的東西,又是另一回事。

銷售讓人欣慰,持續不斷的反饋也一樣。大家報告 bug、提出功能請求、分享使用體驗,使用說明塑造 App 的下一個版本。Weatherling 如今的好幾個功能,正是因為有人花了點時間留下一條評論。

這讓我再次想起自己為什麼熱愛獨立開發。有時候,您不需要龐大的團隊或鉅額的營銷預算。您可以做出自己真心希望存在的東西,把它放到世界上,看看別人是不是也喜歡。

為隱私而設計

有一件事我還沒怎麼提過,就是 Weatherling 在幕後是怎麼運作的,尤其是隱私方面。從一開始,我就希望 Weatherling 是完全自成一體的。

Weatherling 在構建時沒有任何聯網功能。沒有要建立的帳號,沒有要連線的雲服務,沒有收集使用資料的分析工具,也沒有悄悄接收您電腦資訊的伺服器。自 1.6 版起,有一個可選的例外:「與你的天氣同步」會向 Apple 天氣查詢您所在地的天氣狀況,並且在您開啟之前始終保持關閉。

App 所需的一切都隨 App 一起提供。所有 Ling、它們的精靈圖和動畫、天氣效果以及其他資源都打包在 App 裡,使用時不需要動態下載任何東西。

天氣系統的原理是檢測桌面視窗的幾何形狀,而不是視窗裡的內容。這意味著 Weatherling 不需要「螢幕錄影」權限。它不會擷取您的螢幕,不會讀取視窗裡的內容,也不會監視您在做什麼。

就連 Ling 收集遊戲也完全在本地執行。除非您主動選擇用分享功能發布,否則您的分數只會留在您的 Mac 上。

我覺得,不需要「回家彙報」的軟體有一種令人耳目一新的感覺。Weatherling 不需要知道您是誰、在做什麼、怎麼使用電腦。它只需要知道您的視窗在哪裡,好讓雨落在上面。

兩週之後:Weatherling 1.4

寫下這些的時候,Weatherling 1.4 剛剛發布。最新的更新帶來了飄落的秋葉(又一個受 Reddit 反饋啟發的功能),還有更多 Ling,以及 App 各處持續的改進。

短短時間裡,這個專案的變化之大令人驚歎。兩週前,我發布的還是一款讓雨落在視窗上的 Mac App。今天,Weatherling 支援雨、雪、風和秋葉。桌面上有四處溜達的角色,每一個都有自己的個性和動畫。還有一個可選的收集遊戲,帶有基於稀有度的計分、隱藏獎勵和可分享的分數。

而在這一切之下,仍然是當初引發一切的那個小小的 Metal 渲染實驗。

我最享受的事情之一,就是一路學習。使用 Metal 是一段迷人的經歷,而把 Codex 和 Claude Code 當作開發夥伴,讓我能比原本快得多地探索想法、實現功能。這也讓我可以把更多時間花在創意的一面,包括孩子們不斷夢想出來的、越來越精巧的各種 Ling。

Weatherling 依然是一款小 App,但它已經遠遠超出了我最初的想象。

下一站:Product Hunt

今天又是一個里程碑:Weatherling 正在 Product Hunt 上發布。這是我第一次獨立在 Product Hunt 發布產品,而且我已經很多年沒有參與過任何形式的 Product Hunt 發布了。

我很想看看社群會有什麼反應,尤其是現在 Weatherling 已經遠遠超出了最初的雨天原型。我也很想知道大家接下來會提什麼建議。

如果說過去兩週教會了我什麼,那就是發布軟體往往只是開始,接下來才是弄清它應該變成什麼樣。雪來自 Reddit,秋葉來自 Reddit。Ling 起初只是一個隨意的想法,後來變成了遊戲。我的孩子們又幫忙把這個遊戲變成了一個不斷增長的、各式各樣的小角色合集。

不知怎麼的,在這一切之中,Weatherling 登上了 Mac App Store 前十,沒有投放廣告就賣出了數百份。對於一個起因只是我想在自己的 Mac 上看一點雨的東西來說,還不賴。

感謝每一位下載 Weatherling、分享貼文、留下評論、報告 bug 或提出新想法的朋友。你們的熱情讓這頭兩週比我想象的精彩太多,我也很期待看到接下來會走向哪裡。

我有種預感,我們才剛剛開始。