現象描述
在 iOS App 開發中,向服務器發送數據時斷點顯示發送失敗。控制台無明確錯誤信息,需系統化排查。

常見失敗原因分類
1. 網絡層面
- 設備無網絡連接(飛行模式、WiFi/蜂窩關閉)。
- DNS 解析失敗,域名無法解析為 IP。
- 防火牆/代理攔截請求(企業內網常見)。
2. 請求構建問題
- URL 拼寫錯誤、缺少協議頭(https:// 或 https://)。
- 請求方法錯誤(GET/POST 混淆)。
- Header 缺失必要字段(Content-Type, Authorization, User-Agent 等)。
- Body 參數格式不符(JSON/Form-Data 未正確編碼)。
3. 服務端問題
- 服務器未啟動、崩潰或維護中。
- API 接口路徑變更、版本不兼容。
- 服務端拒絕連接(IP 白名單、頻率限制、簽名驗證失敗)。
4. 客戶端代碼邏輯
- 非主線程更新 UI 導致假象(實際請求成功)。
- Session/Task 未 resume(`dataTask.resume()` 忘寫)。
- 超時時間設定過短(`timeoutInterval` 過小)。
- HTTPS 證書驗證失敗(自簽證書未信任、ATS 配置缺失)。
排查步驟與工具
- 打印完整請求/響應:在 `URLSession` 代理方法或完成閉包中打印 `request.allHTTPHeaderFields`、`httpBody`、`response.statusCode`、`data`。
- 使用 Charles / Proxyman 抓包:直觀對比客戶端發送與服務端接收的數據差異。
- 檢查錯誤對象:`error.localizedDescription`、`error.code`(如 `-1009` 離線、`-1001` 超時、`-1200` SSL 錯誤)。
- 斷點調試:在 `didReceiveChallenge`、`didCompleteWithError` 等代理點斷點,觀察流程走向。
最佳實踐建議
- 統一封裝網絡層,集中處理錯誤碼、重試策略、日誌上報。
- 配置 `Info.plist` 的 `NSAppTransportSecurity` 適配 HTTPS。
- 關鍵接口增加冪等性設計,允許安全重試。