上個月我們做了一組計步器,並將他做成一套可以在瀏覽器裡跑的教材。這個月它長出了另一半:一支 iPhone App。
它叫「喵步鬧鐘」。設一個「再走 2,000 步」的鬧鐘,走完就響;路上會遇到街貓,回家在像素客廳裡照顧自己的貓。它也能連接課堂上自製的 ESP32 計步器,把步數同步到 Apple「健康」。
這篇不談程式怎麼寫,談的是一個 App 從「在自己手機上能跑」到「在 App Store 上架」中間要走的每一步:要申請什麼、要準備哪些網頁、TestFlight 怎麼給學生測、上架表單每一格怎麼填,以及我們實際踩到的坑。
📱 App Store(2026-10-27 上架,免費、無內購):喵步鬧鐘
🔗 計步器專案網站(瀏覽器模擬器、韌體、講義):pedometer-lab

為什麼是一隻貓
家裡的貓 JoJo 離開了,去當貓天使。這個 App 原本只是計步器的配套程式,JoJo 走了以後,我很希望有一個地方可以一直記得牠,於是把它改成了「喵步鬧鐘」。每一位使用者也都可以設定自己的寶貝:選品種、畫花色、寫下牠的個性和小習慣。
所以客廳裡住著 JoJo 和老貓點顛,牠們會睡覺、躲紙箱、爬貓跳台、互相打鬧,冷了窩貓窩、熱了攤地板,到時間會自己去吃飯、上廁所。手錶上也有一隻,可以順著背摸摸牠。
專題課常聽到學生說「不知道要做什麼」。這個例子可以拿來講:最好的題目,往往來自自己真的在乎的事。
五天:一個人+一個 AI 程式助手
先說清楚:這支 App 是我和 AI 程式助手(Claude Code)一起做的。我負責決定要做什麼、在手機上實際試玩、回報哪裡不對;它負責寫程式、跑模擬器測試、整理文件。五天裡一共提交了 118 次修改、上傳了 26 個測試版本。

這五天最大的體會是:AI 寫程式很快,但「哪裡不對」幾乎都是人在手機上看出來的。面板底部被切掉、貓睡覺時臉被壓扁、同一隻貓在兩個畫面長得不一樣、按鈕藏得太深……這些都不會出現在編譯錯誤裡。後面的「失敗路徑」會講幾個。
上架的六個階段

1. 開發者會員(只有本人能做)
- 在 iPhone 安裝「Apple Developer」App 申請,全程同一支手機,用護照驗證身分。
- 年費 US$99,用 App 申請是自動續訂。
- App Store 上的「銷售者」會顯示法定姓名,不能用筆名。這一點在申請前要先想好。
- 沒有付費會員也能把 App 裝到自己手機上測試(免費帳號),只是 7 天就要重裝一次,也不能上架。
2. 送出第一個版本之前要準備的
- 隱私權政策和支援頁:一定要有網址。我們放在 GitHub Pages。內容要和程式實際行為逐項對得上:用了哪些權限、哪裡會連網、資料存在哪裡。
- 權限說明:要讀步數、定位、藍牙,每一項都要寫「為什麼需要」。審查人員會一條一條對。
- 隱私清單(PrivacyInfo):App 和桌面小工具各一份,宣告不追蹤、不收集資料。
- 版本號和建置號:版本號是使用者看到的「1.0」;建置號每上傳一次就要加 1,我們從 1 一路加到 26。
3. 上傳建置版本
在 Xcode 用 Release 設定封存(Archive),再上傳到 App Store Connect。上傳完 Apple 要「處理」10~30 分鐘,處理好才看得到。
4. TestFlight:先給學生測
- 內部測試:自己帳號的成員,不用審查,處理完就能裝。
- 外部測試:可以開公開連結(最多 1 萬人),學生用 TestFlight App 就能裝。但第一個版本要先通過 Apple 的 Beta 審查,我們等了大約一天。
- 外部審查通過之後,新的建置版本通常很快就能給測試者,但要記得把新版本加進外部群組,不然大家一直拿到舊版。
外部測試通過不代表正式上架會通過。正式審查還會看商店截圖、文字、年齡分級和隱私網址。
5. 填上架資料
這一步表單最多。幾個需要想一下的地方:
- 類別:主要「健康與健身」,次要「遊戲」裡的「模擬遊戲」。
- 年齡分級:2026 年改成 7 步的問卷。我們的判斷是:
- 「附近的人」會交換暱稱和貓名,所以「使用者生成內容」答是,並且做了不雅字詞過濾、封鎖和回報。
- 貓咪打鬧有煙塵球和貓拳動畫,「卡通暴力」答偶爾。寧可分級高一點,也不要被說低報。
- App 引用了世界衛生組織的身體活動指引,「健康或保健主題」答是;但不提供醫療建議,「醫療資訊」答無。
- 結果是 9+。
- App 隱私:步數、健康資料、位置都只在手機上使用,沒有傳到任何伺服器,依 Apple 的定義就是「不收集資料」。
- 定價與地區:免費,先只上台灣。只上台灣的好處是不必先處理歐盟《數位服務法》的交易者身分登記。
- 給審查人員的說明(英文):審查人員不會為了測你的 App 出門走 2,000 步,也沒有學生做的計步器。所以要寫清楚:怎麼用小目標或示範模式測、每個權限和背景功能是用來做什麼的。
6. 送審
選好建置版本,按「新增以供審查」→「提交以供審查」,狀態變成「正在等待審查」,Apple 說最長大約 48 小時。

失敗路徑一:截圖「檔案尺寸無效」
嘗試:用最大的 iPhone 模擬器拍了 6 張 1320×2868 的截圖,直接上傳。
失敗:三張都被拒,「檔案尺寸無效」。
原因:現在的上傳欄位是「中型顯示器」,只收 1206×2622 這幾種尺寸。
改用:兩種尺寸的長寬比幾乎一樣,縮成 1206×2622 就過了。另外,有 Apple Watch App 就一定要附手錶截圖,我們用 Ultra 模擬器拍,剛好是它要的 422×514。
學到:上架前先看清楚表單寫的支援尺寸,不要照網路上去年的教學。

失敗路徑二:聯絡人填一半,整頁存不了
審查資訊的聯絡人有姓、名、電話、信箱四格。只填了姓名和信箱,按儲存就跳出「電話號碼:此欄位為必填」,連同上面已經填好的描述、截圖都一起存不了。電話要寫成 +886912345678 這種含國碼的格式。
另一個小地方:「需要登入」預設是勾的,App 不需要帳號就要記得取消,不然審查人員會跟你要測試帳號。
失敗路徑三:模擬器沒問題,手機上有問題
貓咪會依房間擺設決定想去哪裡,這個分析用的是手機上的 Apple Intelligence。在模擬器上一直正常,但我們在 iPhone 16 Pro 上跑了一小時的實機紀錄,才發現重開 App 大約一半的機率,整段時間都沒有分析過:程式每 2 秒排一次「3 秒後分析」,結果每一次都被下一次取消。改成「同一個畫面穩定 3 秒就直接跑」之後,連開 4 次都在 8 秒內完成。
學到:要量,才會知道。光看程式碼和模擬器,這個錯看不出來。

同一份紀錄也回答了「會不會很耗電、很燙」:CPU 平均約 7%(一顆核心的百分比),記憶體不會越用越多,畫面穩定每秒 60 格,溫度一直是「正常」。沒有 Apple Intelligence 的手機也照常可玩,貓的台詞、日記、走路建議都會改用內建的句子。
失敗路徑四:功能做好了,但使用者找不到
佈置客廳的功能早就做好了,但入口藏在「點上方金幣 → 家具店 → 佈置房間」。試玩的回饋很直接:「這麼重要的功能藏在那邊,有點難找。」最後在右側按鈕列加了一個「擺設」,按下去直接進入佈置;佈置中也能直接開家具店拿家具。
學到:功能有沒有做,和使用者找不找得到,是兩件事。

給老師、給學生的上架檢查清單
- 隱私權政策、支援頁的網址打得開,內容和 App 實際行為一致
- 每一個權限都寫了用途,而且是在用到的時候才詢問
- 截圖是最新的畫面、尺寸正確,名稱和描述沒有別人的商標
- 給審查人員的英文說明:不出門怎麼測、每個權限做什麼
- 拒絕所有權限、關掉藍牙、沒有網路,App 都還能用、不會卡住
- 先用 TestFlight 給同學測,至少一輪
最後
五天做出一支 App,聽起來很快;但真正花時間的,是在手機上一次又一次地看、一次又一次地說「這裡不對」。AI 讓「寫出來」變得很快,「做對」還是要靠人去用、去看、去量。
喵步鬧鐘已經在 2026 年 10 月 27 日通過審查、正式上架(App Store 下載)。第一次送審其實被退了三次:要補實機配合計步器的操作影片、要證明背景播放的白噪音真的會在鎖定時持續播、權限說明頁的按鈕只能寫「繼續」。這些經驗之後會另寫一篇。如果你的學生也想把專題做成 App,歡迎留言交流。
