結論先行
Ad Hoc 部署必須使用 Distribution(發行)推播證書(APNs Production iOS Push Services),而非 Developer(開發)證書。
原因解析
- Ad Hoc 屬於發行渠道:ipa 經過企業或 Ad Hoc Provisioning Profile 簽名,安裝在受限裝置上,屬於「生產環境」分發。
- APNs 環境隔離:Apple 推播服務分為 Development(沙箱) 與 Production(生產) 兩套獨立伺服器。Development 證書只能連沙箱,Production 證書只能連生產。
- Ad Hoc 建構的 App 會連線到 Production APNs:若在伺服器端使用 Development 證書推送,裝置收不到通知;反之亦然。
實務檢查清單
- Apple Developer 後台 → Certificates → 建立 Apple Push Notification service SSL (Sandbox & Production) 或單獨的 Production 證書。
- 匯出
.p12,上傳至推播伺服器(如 NWPusher、自建 Java/Go/Node 服務)。
- Provisioning Profile 選擇 Ad Hoc 類型,包含目標裝置 UDID。
- Xcode 專案 → Signing & Capabilities → 勾選 Push Notifications,確認 Profile 正確。
- 真機測試:安裝 Ad Hoc 版 App,從伺服器發送測試推播,確認收到。
常見誤區
「我在 Xcode 選擇 Development 團隊跑真機,推播正常,為什麼 Ad Hoc 就失效?」
因為 Xcode 直接部署時,App 連的是 Development APNs;Ad Hoc 匯出的 App 連的是 Production APNs。伺服器端證書必須與 App 連接的 APNs 環境一致。