You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中SignInWithAppleButton报1001错误求排查(已加对应能力)

搞定Sign in with Apple的Code=1001错误

先搞懂这个错误

Code=1001是ASAuthorizationError里的「授权请求无法完成」,大概率是配置没到位,或者代码里有细节没注意到。

一步步排查解决

1. 先检查配置是否拉满

  • 确认你的开发者账号已经给App开启了Sign in with Apple能力,Bundle ID要和Xcode里的完全一致
  • 打开Xcode的Signing & Capabilities,看看Sign in with Apple是不是已经正确添加,别漏了配置
  • 测试设备得是iOS 13.0以上的,毕竟Sign in with Apple最低要求这个版本

2. 代码里的几个坑要填上

你的代码有几个地方可能触发错误,调整后的代码如下:

@Environment(\.colorScheme) var colorScheme

@AppStorage("email") var email : String = ""
@AppStorage("firstName") var firstName : String = ""
@AppStorage("lastName") var lastName : String = ""
@AppStorage("userId") var userID : String = ""

SignInWithAppleButton(.continue, onRequest: { request in
    // 只有用户第一次授权时,这些Scope才会返回数据,之后再授权就拿不到了
    request.requestedScopes = [.email, .fullName]
    print("onRequest")
}, onCompletion: { result in
    print("onCompletion", result)
    switch result {
    case .success(let auth):
        print("onCompletion", auth)
        // 直接强转成ASAuthorizationAppleIDCredential,避免多余的switch
        guard let credential = auth.credential as? ASAuthorizationAppleIDCredential else {
            return
        }
        
        let userId = credential.user
        // 非首次授权时email和fullName会是nil,所以用已存的值兜底
        self.email = credential.email ?? self.email
        self.firstName = credential.fullName?.givenName ?? self.firstName
        self.lastName = credential.fullName?.familyName ?? self.lastName
        self.userID = userId
        
        // **重点:第一次授权成功后,一定要把email和全名存到Keychain里!**
        // 之后用户再授权,Apple不会再返回这些信息,只能从本地取
        if let email = credential.email, let givenName = credential.fullName?.givenName, let familyName = credential.fullName?.familyName {
            // 这里加Keychain存储逻辑,用Security框架或者第三方库都行
        }
    case .failure(let error):
        print("授权失败:", error.localizedDescription)
    }
})
.signInWithAppleButtonStyle(colorScheme == .dark ? .white : .black)
.frame(height: 50)
.padding()
.cornerRadius(30)

3. 容易忽略的细节

  • 别用模拟器测!有时候模拟器会莫名触发1001错误,换真实设备试试
  • 如果用户已经授权过你的App,再次点击按钮不会返回email和全名,必须提前存到Keychain
  • 确保按钮所在的View已经完全加载,别在View刚初始化的时候就触发授权请求

内容的提问来源于stack exchange,提问作者Manish kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:33:38