---
title: Mobile App Spec Review — 比 Web 多 5 倍痛點的審查 checklist
description: 行動 App spec review 完整指南。權限 / 推播 / Deep link / Offline / 跨平台一致性 / OS 升級相容 / 電量網路 / Beta 與 store review，附 25 題完整 checklist。
category: spec-review
tags: [mobile, spec-review, ios, android, app-store]
date: 2026-06-13
faq:
  - q: Mobile spec review 跟 Web 最大差異？
    a: 多 5 倍痛點 — 權限、推播、Deep link、Offline、OS 碎片化、電量、網路切換、Store review、跨 iOS / Android 一致性。Web 沒這些。
  - q: iOS 跟 Android 一份 spec 還兩份？
    a: 推薦一份主 spec + 兩個平台差異附錄。完全分開會漂移、合在一起會混。
  - q: TestFlight beta 的 QA 流程該怎麼安排？
    a: Internal beta（最多 100 人、無審核）先跑 5-7 天 → External beta（最多 10000、Apple 審）跑 7-14 天 → 收集 crash + analytics → 正式發版。
  - q: 該為了支援舊 OS 限制功能嗎？
    a: 看數據。Firebase / Mixpanel 看你 user OS 分佈、若 < 5% 在某 OS 可以放棄、< 2% 直接砍。但同時要在 store description 標清楚。
---

# Mobile App Spec Review — 比 Web 多 5 倍痛點的審查 checklist

「Web 都會寫 spec review 了、Mobile 應該差不多」 — 錯了。Mobile 多了**權限、推播、deep link、offline、跨平台、OS 碎片、電量、網路、store 審核**九個維度的痛。這篇給你 25 題專用 checklist。

## Mobile 為什麼比 Web 難

```mermaid
mindmap
  root((Mobile spec<br>痛點來源))
    系統互動
      權限對話框
      推播 token
      Background lifecycle
      Deep / Universal link
    硬體
      電量
      網路切換 (4G/WiFi)
      記憶體
      相機 / 麥克風
    OS 碎片
      iOS 多版本
      Android 廠商客製
      OEM 修改 UI
    跨平台
      iOS 與 Android 一致?
      原生 vs RN vs Flutter
    Store
      Apple / Google 審核
      隱私規範
      Update 不能強制
```

每個維度 spec 都該想到。

## 25 題 Mobile Spec Review Checklist

按 9 個維度組織、每題都是必問。

### A. 權限（5 題）

```mermaid
flowchart TD
    Trigger[App 觸發某功能] --> Q{該功能需要權限?}
    Q -->|是| Ask[彈權限對話]
    Ask --> Resp{使用者選?}
    Resp -->|允許| Use[正常用]
    Resp -->|拒絕| Fall[Fallback 流程]
    Resp -->|不要再問| Settings[引導去 Settings 開]

    style Fall fill:#f59e0b,color:#fff
    style Settings fill:#a855f7,color:#fff
```

1. **首次觸發時機**：什麼時候彈權限？
2. **拒絕 fallback**：使用者選「拒絕」後 UX 怎樣？App 還能用嗎？
3. **「不要再問」處理**：第三次 iOS 會自動拒絕、需要引導去 Settings
4. **權限說明文案**：iOS 強制要寫 NSPhotoLibraryUsageDescription 等、文案有寫嗎？
5. **權限請求理由解釋**：彈視窗前先解釋為什麼要、否則使用者多半拒絕

### B. 推播（3 題）

6. **三種 App 狀態**：foreground / background / killed 收到推播分別怎處理？
7. **Deep link in push**：點推播打開 App 後跳哪個畫面？
8. **訂閱 token 管理**：使用者改帳號、登出時 token 怎處理？

### C. Deep Link / Universal Link（3 題）

9. **Universal Link 對應 URL**：哪些 URL pattern 該開 App?
10. **Fallback 當 App 沒安裝**：開 App store 還是 web?
11. **登入狀態判斷**：deep link 進入時還沒登入 → 跳 login 還 → 開後再返?

### D. Offline（3 題）

12. **完全離線可用嗎**：哪些功能可離線？
13. **資料同步策略**：上線後怎麼 sync 衝突？
14. **網路恢復通知**：怎麼告訴使用者「現在可以送出了」？

### E. 跨平台一致性（3 題）

15. **iOS 與 Android UI 差異**：原生元件不同（picker、navigation bar）— spec 有寫差異嗎？
16. **手勢一致性**：左滑返回是 iOS native、Android 沒有
17. **平台專屬功能**：iOS Face ID、Android 多視窗、各自要不要做？

### F. OS 升級 / 碎片（3 題）

18. **支援最低 OS 版本**：iOS 15+? Android 9+? 怎麼決定？
19. **新 OS 升級時影響**：iOS 18 出來壞了什麼？
20. **OEM 行為差異**：Samsung 的「電池優化」會殺背景、怎處理？

### G. 電量 / 網路（2 題）

21. **背景處理電量**：地點追蹤、推播、健康資料 — 背景跑多少？
22. **慢網路體驗**：4G / 高鐵 / 飛行模式 fallback UX？

### H. App Store 審核（2 題）

23. **隱私 manifest**：Apple 要求 PrivacyInfo.xcprivacy、有更新嗎？
24. **App Tracking Transparency**：iOS 14+ 追蹤要先問、有彈嗎？

### I. 更新策略（1 題）

25. **強制更新 vs 軟更新**：Critical bug 是強更還軟更？rollback 怎麼做？

## 三類 App 的差異

```mermaid
flowchart TD
    Type[App 類型] --> N[Native iOS/Android]
    Type --> Cross[Cross-platform RN/Flutter]
    Type --> Hybrid[Hybrid WebView]

    N --> N1[平台一致性?<br>需 2 份 spec]
    Cross --> C1[同 spec、但平台差異 attach]
    Hybrid --> H1[權限 webview 通過、<br>OS feature 受限]

    style N fill:#06b6d4,color:#fff
    style Cross fill:#10b981,color:#fff
    style Hybrid fill:#a855f7,color:#fff
```

## 完整實戰範例

### Spec 原文（典型寫法、不全）

```
功能：使用者上傳大頭照
- 使用者點 profile 頁的相機 icon
- 開啟相機選擇照片
- 上傳到伺服器
- 顯示新照片
```

### Spec Review 提的 25 個問題（節錄）

| # | 問題 |
|---|------|
| 1 | 「相機 icon」是 iOS 還 Android 樣式？跨平台一致？ |
| 2 | 點 icon 出現「相簿 / 拍照」選單還直接相機？ |
| 3 | 第一次點時要彈 NSCameraUsageDescription、文案？ |
| 4 | 使用者拒絕相機權限 → fallback 是僅相簿、還是 disable 整功能？ |
| 5 | 相簿權限拒絕 → 怎處理？ |
| 6 | iOS 14+ 允許「選特定照片」、UX 一樣嗎？ |
| 7 | 照片大小限制？超過怎麼處理？ |
| 8 | 上傳中網路斷掉怎處理？ |
| 9 | 上傳中切到背景、回前景能繼續嗎？ |
| 10 | 推播通知「上傳完成」？ |
| 11 | Offline 能不能先存、後同步？ |
| 12 | Deep link 從外面開啟到 profile 頁、再點相機 → 流程相同？ |
| 13 | iOS 跟 Android 旋轉照片 EXIF 處理一致？ |
| 14 | 上傳失敗 retry 策略？ |
| 15 | iOS Face ID 需要重新驗證嗎？ |
| 16 | Android 不同廠商相機 app 行為一致？ |
| 17 | 隱私 manifest 有更新嗎？ |
| ... | ... |

**問完這 17 題、PM 才知道這功能其實沒寫完 spec**。

## 三段式 Spec Review 流程（給 mobile）

```mermaid
flowchart LR
    S1[Stage 1<br>看 spec 完整度] --> S2[Stage 2<br>提 25 題問題]
    S2 --> S3[Stage 3<br>檢視跨平台差異]

    S1 --> Q1["功能 happy path 有寫嗎"]
    S2 --> Q2["25 題 checklist"]
    S3 --> Q3["iOS 跟 Android 各自的差異"]

    style S1 fill:#06b6d4,color:#fff
    style S2 fill:#a855f7,color:#fff
    style S3 fill:#10b981,color:#fff
```

## QA 工具地圖

| 工具 | 用途 |
|------|------|
| **Firebase Analytics** | 看 user OS / 裝置分佈 |
| **Sentry / Bugsnag** | Crash 報告 |
| **TestFlight** | iOS beta |
| **Firebase App Distribution** | Android / iOS beta |
| **BrowserStack** | 跨真機測試 |
| **Charles Proxy** | 攔網路 debug |

## 反模式

```mermaid
flowchart TD
    Anti[Mobile spec 反模式] --> A1["完全照 web spec 寫"]
    Anti --> A2["忽略權限拒絕分支"]
    Anti --> A3["推播沒 deep link"]
    Anti --> A4["不寫 offline 行為"]
    Anti --> A5["不指定最低 OS"]
    Anti --> A6["不分平台差異"]
    Anti --> A7["不寫 Store 審核要求"]

    style A1 fill:#ef4444,color:#fff
    style A2 fill:#ef4444,color:#fff
    style A3 fill:#ef4444,color:#fff
    style A4 fill:#ef4444,color:#fff
    style A5 fill:#ef4444,color:#fff
    style A6 fill:#ef4444,color:#fff
    style A7 fill:#ef4444,color:#fff
```

## 給 Mobile QA 的 5 句

1. **每個功能至少 5 個權限 / 網路 / OS 相關問題**
2. **iOS 跟 Android 不同平台、不同 spec 段落**
3. **TestFlight beta 階段是 spec review 第二次機會**
4. **Store 審核被拒 90% 是 spec 漏掉的事**
5. **OS 升級永遠在打破你的 spec**

## 最後

Mobile spec review 不是「跟 web 一樣多想幾個東西」、是**完全不同的腦袋**。每多想一個權限 / 推播 / 離線 / 平台差異的情境、上線後省一週 hotfix。從這 25 題開始、6 個月後你會變 PM 在 spec review 階段主動找的人。

延伸：
- [Mobile App Testing 入門（Appium vs Detox）](/automation/mobile-testing-appium-detox.html)
- [Spec Review Checklist](/spec-review/spec-review-checklist.html)
