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
相关产品推荐
相关产品推荐

