開發者反饋:公司項目閒置一段時間後,iOS 端集體出現「一打開就閃退」現象。但用 Xcode 直接運行卻完全正常,第三方崩潰收集工具(如 Bugly、Firebase)也抓不到任何崩潰報告。這種「真機閃退、調試正常、無日誌」的詭異現象,通常指向證書/配置文件過期問題。
核心原因:Provisioning Profile 或證書過期
當開發/發布證書或 Provisioning Profile 過期後:
- App 簽名失效,系統拒絕啟動,直接殺死進程(非崩潰,無 Crash 日誌)
- Xcode 運行時會自動重新簽名(使用當前有效的開發者證書),所以調試正常
- Ad Hoc / Enterprise 包無法自動重簽,真機直接閃退
快速排查清單
- 檢查證書有效期:Keychain Access → 「我的證書」→ 看是否顯示「此證書已過期」或紅色叉號
- 檢查 Provisioning Profile:Xcode → Preferences → Accounts → Manage Certificates → 查看 Profile 狀態,或直接去
~/Library/MobileDevice/Provisioning Profiles/ 刪除舊 Profile 重新下載
- 確認 Bundle Identifier 匹配:Profile 支持的 App ID 是否包含當前 Bundle ID
- 檢查設備 UDID:Ad Hoc 包需確認測試設備 UDID 已加入 Profile
- 時間同步:測試手機系統時間是否正確(時間偏差大也會導致簽名驗證失敗)
解決步驟
1. Apple Developer 網站 → Certificates, Identifiers & Profiles
2. 刪除過期的 Certificate / Profile
3. 重新創建對應類型的 Certificate (Development / Distribution)
4. 創建新的 Provisioning Profile,勾選正確的 App ID 和設備
5. 下載並雙擊安裝 Profile
6. Xcode → Preferences → Accounts → Download Manual Profiles
7. 重新 Archive / 打包分發
其他可能原因(較少見)
- Entitlements 文件缺失或配置錯誤(如 Push、iCloud、App Groups)
- Info.plist 缺少必要權限聲明(iOS 10+ 隱私權限必填)
- 動態庫簽名問題(Embedded Frameworks 未正確簽名)
- iOS 版本過低不支持當前編譯目標(Deployment Target 設置過高)
遇到「無日誌閃退」優先查證書,十之八九是這個壞蛋搞的鬼。