跳到內容

KodeLab

AI應用、程式筆記、開發心得

  • 首頁
  • 分類目錄
  • 關於本站
  • 隱私權政策

Sign in with Apple 註冊未完成|設定都對、log 找根因、-6003 排查紀錄

  1. 首頁
  2. 2026
  3. 8 月
  4. Sign in with Apple 註冊未完成|設定都對、log 找根因、-6003 排查紀錄
往下滑看內容
Sign in with Apple 註冊未完成|設定都對、log 找根因、-6003 排查紀錄
Kyle2026 年 8 月 9 日2026 年 9 月 3 日2,722 字 · 約 10 分鐘

Sign in with Apple 的原生 iOS 流程使用 ASAuthorizationController,不需要設定網頁登入用的 Return URL,基本串接通常只要幾十行程式碼。但實機測試時如果跳出「註冊未完成」(英文版是 Sign Up Not Completed),排查會突然變得很棘手:訊息出現在 Apple 的系統授權介面裡,不是我們的 App 畫面,而且 App 端不一定拿得到有用的錯誤。這篇文章記錄一次從症狀到根因的完整排查,包含怎麼從實機撈系統 log,以及 AKSQLError -6003 出現時該怎麼處理。

文章目錄
  1. 為什麼這個錯誤特別難查
  2. 可以客觀驗證的四個環節
    1. entitlement 是否簽入 App
    2. provisioning profile 允不允許這個 entitlement
    3. App ID 在 Apple 那端的設定
    4. Apple 帳號本身的狀態
  3. 從實機撈系統 log
  4. AKSQLError -6003 與 Client ID 查詢失敗
  5. 這次有效的修法:重設 capability
  6. 等待、重設與回報的判斷
  7. 這次排查留下的幾個判斷原則
  8. 參考來源

為什麼這個錯誤特別難查

一般的登入錯誤會沿著程式碼流回來,在 onCompletion 或 delegate 裡拿得到 ASAuthorizationError,至少知道授權是被取消、失敗還是沒有被處理。「註冊未完成」不一樣,它發生在系統授權 sheet 與 Apple 伺服器溝通的階段。這次案例中,畫面停在錯誤訊息時 completion handler 沒有被呼叫;其他版本或第三方套件也可能只收到 .canceled(1001)或 .unknown(1000),仍看不出真正原因。

這代表只在 App 端加 log,通常查不到系統授權流程裡的失敗原因。entitlement 與 provisioning profile 還是要檢查,但不能只看 Xcode 畫面就認定設定正確,也不能在沒有證據的情況下反覆重建 profile。

排查時先檢查 entitlement、provisioning profile、App ID 與帳號狀態,再從系統 log 找 Apple 伺服器回傳的錯誤。

Sign in with Apple 出現註冊未完成後,依序核對 entitlement、provisioning profile 與 App ID,再從 akd log 找出 AKSQLError -6003,最後重設 capability 或回報 Feedback Assistant 的四階段流程
先排除本機設定,再追 Apple 伺服器端

kAI 健康紀錄 文章1Sponsored Links

可以客觀驗證的四個環節

以下四項都有指令、介面或交叉測試可以檢查。

entitlement 是否簽入 App

project.yml 或 Xcode 介面上有設定,不代表 entitlement 已簽入建置產物。可以直接檢查 .app:

# 看實際簽進 App 的 entitlements
codesign --display --entitlements - --xml MyApp.app \
  | plutil -convert xml1 -o - -

# 應該要看到這一段
#   "com.apple.developer.applesignin" => [ "Default" ]
#   "application-identifier" => "TEAMID.com.example.myapp"

provisioning profile 允不允許這個 entitlement

App 簽了 entitlement,但 profile 沒有授權,簽署或安裝階段就可能失敗。Apple 的 TN3125 把 profile 內的 entitlements 稱為 allowlist;App 實際宣告的 entitlement 與 profile 允許的項目是兩件事,因此要分開確認:

# profile 包在 .app 裡,先解成 plist
security cms -D -i MyApp.app/embedded.mobileprovision \
  -o /tmp/myapp-profile.plist

# 只讀 Sign in with Apple 對應的 entitlement
/usr/libexec/PlistBuddy \
  -c 'Print :Entitlements:com.apple.developer.applesignin' \
  /tmp/myapp-profile.plist

# 正常會看到 Array 與 Default

Xcode 16 把下載的 profile 存放位置從 ~/Library/MobileDevice/Provisioning Profiles/ 搬到 ~/Library/Developer/Xcode/UserData/Provisioning Profiles/,同時仍會載入舊路徑已有的 profile。舊路徑找不到檔案不代表 Xcode 沒有 profile;直接檢查建置產物裡的 embedded.mobileprovision 比較準確。

App ID 在 Apple 那端的設定

Developer Portal 的網頁看得到這項設定,App Store Connect API 也可以直接查,適合寫進檢查腳本。這次檢查的是未分組、作為 primary App ID 的識別碼,因此 APPLE_ID_AUTH capability 必須存在,設定也應為 PRIMARY_APP_CONSENT(介面上的 Enable as a primary App ID)。如果 App ID 已經跟另一個 primary App ID 分組,則要檢查它指向的 primary App ID 是否正確:

# 需要先用 ASC API Key 簽一顆 JWT
# 當 Bearer token
# -g 會關閉 curl 的中括號 URL 展開,
# 否則 filter[identifier] 可能被誤判
curl -g -s -H "Authorization: Bearer $JWT" \
  "https://api.appstoreconnect.apple.com/v1/bundleIds?filter[identifier]=com.example.myapp&include=bundleIdCapabilities"

# 回應裡應該找得到
#   "capabilityType": "APPLE_ID_AUTH"
#   "settings": [{
#     "key": "APPLE_ID_AUTH_APP_CONSENT",
#     "options": [{"key": "PRIMARY_APP_CONSENT"}]
#   }]

App ID 設定畫面裡的 Server-to-Server Notification Endpoint 是選填項目,留空不會阻止原生登入。Domains and Subdomains 與 Return URLs 則設在 Services ID,提供網站或其他平台的網頁驗證流程使用。原生 iOS App 直接透過 ASAuthorizationController 授權,沒有使用 Services ID 的話,不需要為了這個錯誤補 Return URL。

Apple 帳號本身的狀態

Sign in with Apple 要求該 Apple 帳號啟用雙重認證。另外,裝置上「設定 → 帳號名稱 → 使用 Apple 帳號登入」會列出授權過的 App。目標 App 已經出現在清單裡,而且問題只發生在重新建立帳號時,可以先停止使用 Sign in with Apple,再重新授權;不在清單裡就不用做這一步。

比較有效的交叉測試,是拿同一個 Apple 帳號、同一台裝置與同一個網路,到其他開發者的 App 完成一次首次授權。能成功的話,可以大致排除帳號、裝置與網路,但不能因此斷定 Apple 的 Sign in with Apple 服務整體正常,因為異常仍可能只影響特定 Team ID 或 Client ID。


Sponsored Links

從實機撈系統 log

四項檢查都正常卻仍然失敗時,需要讀取系統 log。負責 Sign in with Apple 的系統程序叫 akd(AuthKit daemon),它會把失敗原因寫進系統 log,只是那些訊息不會經過我們的 App。

macOS 的 log stream 沒有讀取配對 iPhone 的 --device 選項。要從真機取回一段時間的 Unified Log,可以用 log collect --device 建立 .logarchive:

# 先在手機上重現一次失敗,
# 再立刻收集最近 10 分鐘的 log
sudo /usr/bin/log collect --device --last 10m --output phone.logarchive

# 收完用 predicate 過濾,只看 AuthKit 相關的 error 與 fault
/usr/bin/log show --archive phone.logarchive --style compact --info --debug \
  --predicate '(process == "akd" OR process == "AuthKitUIService") AND (messageType == error OR messageType == fault)'

兩個地方容易卡住。第一,zsh 有同名的 log 內建指令,直接打 log collect 可能得到 too many arguments,因此範例固定寫完整路徑 /usr/bin/log。第二,從配對裝置收集時若遇到權限錯誤,再確認指令前面有 sudo。手機也要先信任這台 Mac,並保持連線。

AKSQLError -6003 與 Client ID 查詢失敗

過濾出來的錯誤鏈大致是這樣(時間戳與執行緒編號已省略):

E  akd [authkit:siwa]  Encountered error while fetching developer team:
                       Error Domain=AKSQLError Code=-6003
E  akd [authkit:siwa]  Cannot perform password request without password request.
E  AuthKitUIService [LocalAuthentication] Code=-1008
                       "Can't retry event, because no suitable mechanism is running."
E  akd [authkit:core]  Invalid/missing value for key acname: (null)
E  akd [authkit:core]  SRP authentication with server failed!
                       Error Domain=com.apple.AppleIDAuthSupport Code=2
E  akd [authkit:siwa]  Error performing auth request:
                       Error Domain=AKAuthenticationError Code=-7003

這串訊息很容易讀錯。中間那幾行看起來像是身分驗證出了問題,SRP authentication with server failed 指向密碼驗證流程,LocalAuthentication 則寫著沒有合適的驗證機制。如果從這裡開始查,很容易把方向放在 Apple 帳號、Face ID 或裝置憑證,接著反覆登入 iCloud、重開機與重設密碼。

這次案例要先看第一行:fetching developer team 失敗,錯誤碼是 AKSQLError -6003。完整訊息還帶著 No applications were found with the provided Client ID,代表 Apple 伺服器用這個 Client ID 查不到可用的 App 紀錄。原生流程裡的 Client ID 就是 bundle ID,因此問題範圍已經縮小到 App ID、Team ID 與 Apple 伺服器上的對應狀態。

取不到 team 之後,後面的流程才接著冒出 acname: (null)、SRP 握手失敗與 AKAuthenticationError -7003。把同一帳號在其他 App 的首次授權成功結果放在一起看,這幾行比較像上游 Client ID 查詢失敗後的連鎖錯誤,不應只看 bad password 就要求測試帳號重設密碼。

注意:AKSQLError 與 AKAuthenticationError 都是系統內部錯誤,Apple 沒有公開穩定的錯誤碼對照表。診斷時要同時保留完整訊息、發生時間與交叉測試結果,不能把 -6003 單獨當成永遠不變的公開 API 規格。

這次有效的修法:重設 capability

完成前面的檢查,而且 log 明確出現 Client ID 查詢失敗後,這次案例到 Developer Portal 的 Identifiers 找到該 App ID,重設 Sign in with Apple capability:

  1. 取消勾選 Sign in with Apple,按 Save
  2. 重新勾選,Configure 選 Enable as a primary App ID,再按 Save

Apple 文件有提醒,關閉 Sign in with Apple capability 會重設已儲存的設定。這次案例重新開啟後,第一次嘗試就成功,App 端一行程式碼都沒有改;合理推論是重新儲存讓伺服器端的 App ID 對應恢復正常。不過 Apple 沒有把「關掉再開」列為 -6003 的正式修復流程,也有開發者回報重設後仍失敗。

注意:App ID 已經群組其他 App 或關聯 Services ID 的話,先記下 primary App ID、分組與網站設定。關閉 capability 會重設設定,不適合在正式服務上沒有盤點就直接操作。

這次本機的 provisioning profile 不需要重新產生,因為原本 profile 與簽進 App 的 entitlement 都正確。其他專案若在重設 capability 後看到 Xcode 更新 signing assets,仍要重新檢查新建置產物,不能把這次結果當成所有專案都不用更新 profile。

等待、重設與回報的判斷

「註冊未完成」不是單一錯誤碼的固定翻譯,-7003 也不能直接等同 -6003。實務上可以依照設定時間、影響範圍與 log 分成三條路徑。

如果是剛剛才啟用或修改 Sign in with Apple,可以先保留設定並隔一段時間重測,避免在傳播期間連續改動。開發者論壇有人回報一至兩天後恢復,但 Apple 沒有公布「最長 48 小時」的服務保證。2025 年 6 月的服務事件甚至持續五天,Apple 後來確認部分新建或剛修改的 App ID、Services ID 設定受到影響,原生框架會直接顯示「註冊未完成」。

如果是從第一天就沒有成功過,而且不同 Apple 帳號、裝置與網路都失敗,先完成 entitlement、profile、App ID 與帳號四項檢查,再讀 akd log。後端沒有任何成功登入紀錄只能證明這條路徑尚未成功,不能單靠這點判定一定是 Apple 伺服器故障。

手上若有同一團隊較早建立、已知可用的 App ID,可以用相同的官方範例做交叉測試。舊 App ID 正常、新 App ID 失敗,比「換一份實作再試」更能分辨問題是否跟剛建立的識別碼有關。個人與組織帳號都曾有相同回報,因此帳號類型不是可靠的判斷條件。

重設 capability 仍無效,或正式服務不適合重設時,Apple DTS 的建議是安裝 Accounts/AuthKit logging profile,重現問題後立即收集 sysdiagnose,再用 Feedback Assistant 回報。內容至少要有 Team ID、Bundle ID/Client ID、受影響的 Apple 帳號、重現時間與 sysdiagnose;螢幕錄影可以一併附上。簡單的 .logarchive 適合自己定位方向,提交 Apple 時仍以 DTS 要求的 sysdiagnose 為準。

這次排查留下的幾個判斷原則

這次排查可以整理成三個判斷原則,重點都在排查順序。

錯誤鏈要從最上游讀起。錯誤鏈最後顯示的錯誤,可能只是前面環節失敗後的連鎖反應。這次如果只從 SRP authentication failed 開始查,方向會落在帳號密碼;往前看到 Client ID 查詢失敗,再配合其他 App 可正常授權的結果,才有足夠證據改查 App ID 與伺服器端狀態。

先確認診斷資料在哪一層。App 拿不到有用的錯誤,不代表系統沒有留下資訊。系統授權流程要讀 Unified Log;Apple 那端的 capability 可以用 App Store Connect API 查,而且適合寫成可重複執行的檢查。

沒有證據之前不要交付新版本。原因可能在 Apple 後端時,反覆重裝或修改程式碼通常無法提供新證據,應先收集系統 log。

參考來源

  • Apple Developer: Configuring Sign in with Apple support (設定 Sign in with Apple 支援)
  • Apple Developer: About Sign in with Apple (關於 Sign in with Apple)
  • Apple Developer: Group apps for Sign in with Apple (將 App 納入 Sign in with Apple 群組)
  • Apple Developer: TN3125: Inside Code Signing: Provisioning Profiles (程式碼簽署的 provisioning profile)
  • Apple Developer: Xcode 16 Release Notes (Xcode 16 發行說明)
  • Apple Developer: Bundle ID Capabilities (App Store Connect API 的 Bundle ID capability)
  • Apple Developer: TN3159: Migrating Sign in with Apple users for an app transfer (App 轉移時遷移 Sign in with Apple 使用者)
  • Apple Developer Forums: Sign Up Not Completed (註冊未完成)
  • Apple Developer Forums: Sign in with Apple fails with ASAuthorizationError.canceled (Sign in with Apple 回傳取消錯誤)
  • Apple DTS:2025 年 6 月 Sign in with Apple 服務事件
  • Apple Developer Forums: Gathering required information for troubleshooting Sign in with Apple (排查 Sign in with Apple 所需資訊)
  • Apple Support: Manage your apps with Sign in with Apple (管理使用 Sign in with Apple 的 App)
Post Views: 806
標籤: App Store Connect iOS Sign in with Apple Swift Xcode

Sponsored Links

文章導覽

Gemini 3.6 Flash 發表|Google 開始預訓練 Gemini 4,3.5 Pro 還會發布嗎?
Claude 新增隱形浮水印|文章複製、抄寫後仍可被偵測
Sponsored Links

熱門文章

  • Jev 是什麼?TypeSafe System One 決策模型|功能、價格、用法與限制
  • MarkItDown 教學|安裝、PDF 轉 Markdown 與 OCR 排錯
  • Laya 評測與使用教學,Jev 的開源替代模型|Mac 實測單題最快 11 毫秒
  • Claude 送 Cloud Sessions 雲端使用額度,最高 250 美元|領取與使用教學
  • iPhone 18 Pro 懶人包|新功能快速看懂,拍照、續航與 Pro Max 怎麼選

近期文章

  • MacBook Neo 台灣再漲 1,000 元|23,900 元起、教育價漲 2,000、美國不變
  • GPT-6.1 Terra 發表|補齊 6 系列、輸入半價,主打看圖與電腦操作
  • Python 3.15 發表|延後載入、預設 UTF-8,升級前有哪些改變
  • 10 月資安事故接連發生|PHP、nginx、Linux、Python、Node.js
  • 憑證私鑰竟然是 4?eMudhra 資安事件與 HTTPS 信任風險

熱門標籤

Agent AI AI Agent Anthropic API定價 Apple Apple Silicon ChatGPT ChatGPT Work Claude Claude Code Claude Opus CLI Codex Debian Docker Fable 5 Gemma Git GitHub Google AI Studio GPT-5 iOS Java JavaScript JDK JVM Linux LLM macOS MariaDB Markdown MySQL Nginx Ollama OpenAI OpenJDK Python React Spring Swift Ubuntu 資安 資訊安全 開源模型

分類

  • AI模型 (29)
  • AI開發 (50)
  • Apple (22)
  • Java (18)
  • 本機AI (8)
  • 程式開發 (10)
  • 系統與 DevOps (22)
  • 資安與隱私 (12)
  • 資料庫 (11)
  • 開發工具 (11)
Sponsored Links
Copyright © 2022-2026 KodeLab
問 AI 這篇文章

正在啟動…

範例

這篇文章的重點是什麼?

清除後,這些問答不會再顯示。

隱私權政策