📋 Bloomling · Apple 上架時程
App Store Journey · 獨立開發者的真實上架日誌
Bloomling 是一款給孩子的圍牆花園瀏覽器,由一個人從零做到上架。這裡記錄它送審 Apple App Store 的每一個節點——17 天、5 次送審、被拒 4 次,連 App 名字都被改過一輪,最後在 2026/7/15 通過。完整記下來,給走在同一條路上的獨立開發者一點參考。
Bloomling v1.0.20260628(build 1)完成 Xcode 打包,通過 Apple 驗證後在 App Store Connect 掛上版本、準備送出審核。嚴格白名單瀏覽、家長關卡、無干擾嵌入、跨裝置整包設定與內建小活動,全部離線、零廣告、不收集資料——正式踏進 iOS 審核系統。
- App:Bloomling(app.rexcode.bloomling)
- 版本:1.0.20260628 (1) · iOS App(iPhone + iPad)
- 封存時間:2026 年 6 月 28 日 下午 10:51
- 狀態:⏳ 等待審核中(Ready to Submit)
① 封存並通過驗證(Validation succeeded)
Xcode Organizer 顯示 Bloomling 1.0.20260628 (1) 於 6/28 下午 10:51 完成封存,狀態 Validation succeeded——Your app successfully passed all validation checks.
② 掛上版本、準備送審(App Store Connect)
App Store Connect 顯示 iOS App 1.0.20260628 (1) 為 Item Ready to Submit,與 iOS 版本一起送出審核。


送審第 4 天,App Store Connect 來信:「There's an issue with your Bloomling: Kids Video & Learn (iOS) submission.」——審核結果出爐,被拒。共有兩點需處理:一個是年齡分級的中繼資料對不上,一個是兒少類別的隱私問卷需補答。
⚠️ Guideline 2.3.6 — Accurate Metadata:年齡分級標了「家長控制」卻找不到
App 的年齡分級(Age Rating)內容描述勾選了包含 In-App Controls / Parental Controls,但審核員在 App 內找不到對應的「家長控制」或「年齡驗證」機制。
處理方式:若功能存在就回信指出位置;否則到 App Store Connect 的 App Information 把 Age Rating 的「Parental Controls」改成 None,讓分級描述與實際功能一致。
⚠️ Guideline 2.1 — Information Needed:兒少類別隱私問卷(1.3)
審核前需先說明 App 如何符合 Guideline 1.3(兒童類別),Apple 要求回答四個問題並在 App Store Connect 回覆後才會繼續審核:
- 是否含第三方分析?收集哪些資料?
- 是否含第三方廣告?(兒童 App 需提供廣告網路的公開政策連結)
- 資料是否分享給第三方?用途與儲存位置?
- 是否為分析/廣告以外的目的收集使用者或裝置資料?
回覆方向:Bloomling 全程離線、零廣告、無第三方分析 SDK、不收集任何資料——四題答案皆為「否」,將於 App Store Connect 據實回覆。

補完年齡分級與隱私問卷後重送,兩天內又被打回來——而且這次踩到的是更根本的兩件事:名字和「這算不算一個 App」。
⚠️ Guideline 2.3.8 — 名字有「Kids」,卻沒送兒童類別
App 名稱是 Bloomling: Kids Video & Learn,含 Kids 一字,暗示主要受眾是兒童;但這次並非以 Kids category 送審。
只能二選一:把名稱/副標/圖示/截圖裡所有暗示兒童的字拿掉,或改以 Made for Kids 送審。
⚠️ Guideline 4.2 — Minimum Functionality:功能太少,不夠「app-like」
審核認為 App 提供的內容與功能不足以構成一個有價值、獨特、「像 App」的體驗。
對一個刻意做成「只給爸媽選的網頁、其餘全擋」的圍牆花園瀏覽器來說,這一刀正中要害——刻意的克制,在審核眼裡成了功能不足。
最難的一次。不是哪個欄位填錯,而是產品的本質被質疑。
⚠️ Guideline 4.2 —「這只是個瀏覽器」
審核回覆:App 只包含從網路聚合而來的連結、圖片或內容,原生功能有限;即使內容是為使用者精選過的,「由於與瀏覽網頁的體驗沒有足夠差異,不適合 App Store」。
這句話對圍牆花園瀏覽器來說幾乎是無解題:它的價值正是「只給爸媽挑的那幾個網址」。要過關,就得讓 App 證明自己在「開網頁」之外,還做了瀏覽器做不到的事。
改名、補上原生功能、重新送審之後——倒在最後一關:第三方影音的授權。
⚠️ Guideline 5.2.3 — Legal:第三方影音串流的權利證明
App 被認為可能提供未經授權的第三方影音串流/目錄/探索服務(也就是 YouTube 影片與 IG 貼文的嵌入)。
處理方式:必須在 App Store Connect 的 App Review Information 附上書面證明,證明你擁有使用這些第三方影音服務的必要權利或授權;Apple 審閱文件確認有效後,才會繼續審核。
7 月 13 日送出,兩天後、台灣時間清晨收到那封標題不一樣的信:「Review of your Bloomling: Learn & Safe Web (iOS) submission is complete.」
Congratulations!
Review of your submission has been completed. It is now eligible for distribution.
從 6/28 首次送審到 7/15 通過,中間被拒了 4 次:年齡分級對不上、隱私問卷、名字不能有「Kids」、功能被說太少、被說「只是個瀏覽器」、第三方影音要授權證明。連 App 的名字都被改過一輪——Bloomling: Kids Video & Learn 最後成了 Bloomling: Learn & Safe Web。

上架兩個月後的改版,主軸是家長專區接上「請開發者喝杯咖啡」自由讚助——Bloomling 第一次有內購。三檔(小/中/大),只放在家長閘之後,不解鎖任何東西,所有功能照舊不收錢。孩子那一側的流程完全沒變。
這次最用心的是送審籃裡的數量:app 的第一個內購必須跟一個 app 版本一起送審,已經過審的版本進不了籃子。這個雷整個 app 家族前面踩過四次(SunnyWalker、AIPrentice、LetPiano、LetDrum),所以這次送出前逐項驗收,確定是 4 Items(1 個版本 + 3 個內購) 才按 Submit。
這版一起出貨的
家長閘多一種進入方式(乘法題或自訂 4 位數密碼);網站清單就地改名、「回家」鈕位置可拖曳、iPad 編輯畫面撐大;新增「清除瀏覽資料」按鈕;朗讀被電話或其他 app 打斷後會自己接回;非西曆裝置的匯出檔名年份修正;家長頁英文介面不再漏中文段落標題。
隱私說明的口徑
從「零資料外傳」改成更精確的「開發者不接收任何資料」+逐項揭露家長加入的網站、YouTube/IG 官方嵌入各自會收到什麼。App Privacy 維持 Data Not Collected——app 沒有任何第三方分析、廣告或追蹤 SDK,唯一新增的網路用途是 Apple 自己的 StoreKit。
- 版本:1.0.20260912 (7) · iPhone + iPad · 送審項目 4
- 送出:2026/9/13 17:58(台北)= 02:58 AM PDT · Submission ID:
760dc2b8-3f88-46aa-8d8e-eb5731378670 - 狀態:⏳ 等待審核中
排隊等了一天,17:55 狀態變成 In Review,4 分鐘後的 17:59 就收到 Congratulations! Review of your submission has been completed.——從送出到通過約 24 小時,零提問、零退件,三個內購一起過。對照首發那次 17 天、被拒 4 次,這是 Bloomling 最順的一次送審。
- 核准版本:1.0.20260912 (7) + 3 個自由讚助內購
- 送出:2026/9/13 17:58 · 進入審核:9/14 17:55 · 通過:9/14 17:59(台北)
- 狀態:🟢 Ready for Distribution


Bloomling 第一次有自己的內容:首頁新增「小遊戲園」一節,內建 11 個 rexcode 自製的益智小遊戲(滑塊拼圖、彩球分類、河內塔、接水管、幾何補橋、推箱子、小車出門、滾滾小國王、火柴算式、聰明方格、彈珠軌道)。一張卡一個遊戲,打開就能玩,無廣告、不用登入;「爸媽挑的網頁」維持原樣。
同一版改了 App 名字:Bloomling: Learn & Safe Web → Bloomling: Puzzles & Safe Web(中文 Bloomling 益智小遊戲園)。賣點從「安全瀏覽器」換成「益智解謎」——家長不會搜 walled-garden browser,會搜 puzzle、logic。改名代表 Apple 會再看一次 2.3.8,名字裡照舊沒有 Kids/兒童。
嵌進 app 的遊戲頁,一個外送 request 都沒有
遊戲用網站的 ?embed=1 嵌入模式載入:只剩 emoji、標題和遊戲本體,不載 GA4,Cloudflare Web Analytics 自動注入也關掉了。所以 Review Notes 寫「no analytics, no third-party scripts」是真的,App Privacy 維持 Data Not Collected。
一起修掉的:WebView 無限重載
app 拿 WebView 目前的網址去比卡片網址,網頁只要用 replaceState 改一下網址,兩邊就永遠對不上,於是每秒重載 2–3 次——Cloudflare 一天被打了 21 萬次。改成記住「當初要求的網址」;網站這邊也補一道,embed 模式不再動網址。
第一次全程用工具送審
Archive、上傳、建版本、推兩語系文案和新名字、換三組截圖、掛 build、建送審籃、Submit,全部走 API,沒開 App Store Connect 網頁。三個打賞內購上一版已經核准,這次籃子只有 1 Item。
- 版本:1.1.20261002 (8) · iPhone + iPad · 送審項目 1
- 送出:2026/10/3 00:01(台北) · Submission ID:
9ba2f5d8-e86b-4698-b130-eabee05661b2 - 通過:2026/10/3 06:48(台北)——約 6 小時 47 分,零提問、零退件
- 狀態:🟢 Ready for Distribution

這一版小孩看到的東西一個像素都沒動,改的全是家長閘後面「管網頁清單」那條路:網頁卡片可以分組(內建「爸媽選的網頁」「小遊戲園」兩組,可新增、改名、刪除、排序,首頁一組一節);首頁各節的先後能拖曳調整;新增卡片的表單從三段併成一段,貼上網址就看到綠勾、紅叉或重複提示,名稱可以自動帶入網頁標題;匯出的 .md 清單也帶組別。
五項功能都是 10/5 同一天提的,所以版號日期段用 10-05,實際送審在 10/6 凌晨。
唯一新的網路行為:抓網頁標題
「從網站取得名稱」只會去讀家長剛貼上的那個網址,在家長的裝置上、跟「測試開啟」預覽同一條路,不經過開發者的伺服器;YouTube 走官方 oEmbed。Review Notes 第一段就把這件事講清楚,App Privacy 維持 Data Not Collected,沒有新權限、新 SDK、新第三方。
名字、副標、截圖全部沿用
1.1 才剛改名、改 ASO 三天,這版不再動排名:Name、Subtitle、Keywords、截圖都用 1.1 過審的值,只在 Description 補兩條家長工具。首頁預設長相跟 1.1 一模一樣,所以截圖不用重拍。
Review Notes 差點超過 4000 字
1.1 的 Review Notes 已經 3,900 多字,首段一加這版的說明就爆了上限。把「原生功能」「網頁區」「怎麼測」三段各精簡一輪(小遊戲園的說明原本重複出現兩次),才通過送審前的字數檢查。
- 版本:1.2.20261005 (9) · iPhone + iPad · 送審項目 1(API key 送出)
- 送出:2026/10/6 00:10(台北)= 10/5 09:10 PDT · Submission ID:
51da1f20-3751-4060-bfec-c3d8022ee6a0 - 通過:2026/10/6 21:23(台北)——約 21 小時 13 分,零提問、零退件
- 狀態:🟢 Ready for Distribution

17 天、5 次送審、4 次被拒。寫下來不是抱怨 Apple——每一條 guideline 背後都有它的道理;而是想讓走在同一條路上的人知道:被拒 4 次是常態,不是你做錯了什麼。改完,再送一次就是了。