Skip to content

passkey feature implementation #14796

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"applinks": {
"details": [
{
"appID": "EQHXZ8M8AV.com.google.firebaseAuthSDKSampleApp.dev",
"components": [
{
"#": "no_universal_links",
"exclude": true,
"comment": "Matches any URL with a fragment that equals no_universal_links and instructs the system not to open it as a universal link."
},
{
"/": "/buy/*",
"comment": "Matches any URL with a path that starts with /buy/."
},
{
"/": "/help/website/*",
"exclude": true,
"comment": "Matches any URL with a path that starts with /help/website/ and instructs the system not to open it as a universal link."
},
{
"/": "/help/*",
"?": { "articleNumber": "????" },
"comment": "Matches any URL with a path that starts with /help/ and that has a query item with name 'articleNumber' and a value of exactly four characters."
}
]
}
]
},
"webcredentials": {
"apps": [ "EQHXZ8M8AV.com.google.firebaseAuthSDKSampleApp.dev" ]
},


"appclips": {
"apps": ["EQHXZ8M8AV.com.google.firebaseAuthSDKSampleApp.dev.Clip"]
}
}
73 changes: 73 additions & 0 deletions FirebaseAuth/Sources/Swift/Auth/Auth.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import FirebaseAuthInterop
import FirebaseCore
import FirebaseCoreExtension

#if COCOAPODS
internal import GoogleUtilities
#else
Expand All @@ -28,6 +29,10 @@
#if os(iOS) || os(tvOS) || targetEnvironment(macCatalyst)
import UIKit
#endif
#if os(iOS) || os(tvOS) || os(macOS) || targetEnvironment(macCatalyst)
import AuthenticationServices
#endif


// Export the deprecated Objective-C defined globals and typedefs.
#if SWIFT_PACKAGE
Expand Down Expand Up @@ -824,6 +829,62 @@
}
}
}

let sessionId = "sessionId"

// MARK: Passkeys
@available(iOS 15.0, *)
public func startPasskeySignIn() async throws -> ASAuthorizationPlatformPublicKeyCredentialAssertionRequest {

Check failure on line 837 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, tvOS)

'ASAuthorizationPlatformPublicKeyCredentialAssertionRequest' is only available in tvOS 16.0 or newer

Check failure on line 837 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, tvOS)

'ASAuthorizationPlatformPublicKeyCredentialAssertionRequest' is only available in tvOS 16.0 or newer

Check failure on line 837 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, tvOS)

'ASAuthorizationPlatformPublicKeyCredentialAssertionRequest' is only available in tvOS 16.0 or newer

Check failure on line 837 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, visionOS)

cannot find type 'ASAuthorizationPlatformPublicKeyCredentialAssertionRequest' in scope

Check failure on line 837 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, visionOS)

cannot find type 'ASAuthorizationPlatformPublicKeyCredentialAssertionRequest' in scope

Check failure on line 837 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, visionOS)

cannot find type 'ASAuthorizationPlatformPublicKeyCredentialAssertionRequest' in scope

Check failure on line 837 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, macOS)

'ASAuthorizationPlatformPublicKeyCredentialAssertionRequest' is only available in macOS 12.0 or newer

Check failure on line 837 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, macOS)

'ASAuthorizationPlatformPublicKeyCredentialAssertionRequest' is only available in macOS 12.0 or newer

Check failure on line 837 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, macOS)

'ASAuthorizationPlatformPublicKeyCredentialAssertionRequest' is only available in macOS 12.0 or newer

Check failure on line 837 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, watchOS)

cannot find type 'ASAuthorizationPlatformPublicKeyCredentialAssertionRequest' in scope

Check failure on line 837 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, watchOS)

cannot find type 'ASAuthorizationPlatformPublicKeyCredentialAssertionRequest' in scope

let request = StartPasskeySignInRequest(
sessionId: sessionId,
requestConfiguration: requestConfiguration
)

let response = try await self.backend.startPasskeySignIn(request: request)

guard let challengeData = Data(base64Encoded: response.challenge ?? "nil") else {
throw NSError(domain: "com.firebase.auth", code: -3, userInfo: [NSLocalizedDescriptionKey: "Invalid challenge data"])
}

let provider = ASAuthorizationPlatformPublicKeyCredentialProvider(
relyingPartyIdentifier: response.rpID ?? "fir-ios-auth-sample.web.app.com"
)
let assertionRequest = provider.createCredentialAssertionRequest(challenge: challengeData)

return assertionRequest
}

@available(iOS 15.0, *)
public func finalizePasskeySignIn(platformCredential: ASAuthorizationPlatformPublicKeyCredentialAssertion) async throws -> AuthDataResult {

Check failure on line 859 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, tvOS)

'ASAuthorizationPlatformPublicKeyCredentialAssertion' is only available in tvOS 16.0 or newer

Check failure on line 859 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, tvOS)

'ASAuthorizationPlatformPublicKeyCredentialAssertion' is only available in tvOS 16.0 or newer

Check failure on line 859 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, tvOS)

'ASAuthorizationPlatformPublicKeyCredentialAssertion' is only available in tvOS 16.0 or newer

Check failure on line 859 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, visionOS)

cannot find type 'ASAuthorizationPlatformPublicKeyCredentialAssertion' in scope

Check failure on line 859 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, visionOS)

cannot find type 'ASAuthorizationPlatformPublicKeyCredentialAssertion' in scope

Check failure on line 859 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, visionOS)

cannot find type 'ASAuthorizationPlatformPublicKeyCredentialAssertion' in scope

Check failure on line 859 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, macOS)

'ASAuthorizationPlatformPublicKeyCredentialAssertion' is only available in macOS 12.0 or newer

Check failure on line 859 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, macOS)

'ASAuthorizationPlatformPublicKeyCredentialAssertion' is only available in macOS 12.0 or newer

Check failure on line 859 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, macOS)

'ASAuthorizationPlatformPublicKeyCredentialAssertion' is only available in macOS 12.0 or newer

Check failure on line 859 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, watchOS)

cannot find type 'ASAuthorizationPlatformPublicKeyCredentialAssertion' in scope

Check failure on line 859 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, watchOS)

cannot find type 'ASAuthorizationPlatformPublicKeyCredentialAssertion' in scope
guard let credentialID = platformCredential.credentialID.base64EncodedString(),
let clientDataJson = platformCredential.rawClientDataJSON.base64EncodedString(),
let authenticatorData = platformCredential.rawAuthenticatorData.base64EncodedString(),
let signature = platformCredential.signature.base64EncodedString(),
let userID = platformCredential.userID.base64EncodedString()
else {
throw NSError(domain: "com.firebase.auth", code: -4, userInfo: [NSLocalizedDescriptionKey: "Invalid platform credential data"])
}

let request = FinalizePasskeySignInRequest(credentialID: credentialID,
clientDataJson: clientDataJson,
authenticatorData: authenticatorData,
signature: signature,
userID: userID,
requestConfiguration: requestConfiguration)

let response = try await backend.finalizePasskeySignIn(request: request)

let user = try await completeSignIn(withAccessToken: response.idToken,
accessTokenExpirationDate: nil,
refreshToken: response.refreshToken,
anonymous: false)
let authDataResult = AuthDataResult(withUser: user, additionalUserInfo: nil)

try updateCurrentUser(user, byForce: false, savingToDisk: false)
return authDataResult
}


/// Creates and, on success, signs in a user with the given email address and password.
///
Expand Down Expand Up @@ -2425,3 +2486,15 @@
/// Mutations should occur within a @synchronized(self) context.
private var listenerHandles: NSMutableArray = []
}

extension Data {
func base64EncodedString() -> String? {
return base64EncodedString()

Check warning on line 2492 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, iOS)

function call causes an infinite recursion

Check warning on line 2492 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, iOS)

function call causes an infinite recursion

Check warning on line 2492 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, iOS)

function call causes an infinite recursion

Check warning on line 2492 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, iOS)

function call causes an infinite recursion

Check warning on line 2492 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, iOS)

function call causes an infinite recursion

Check warning on line 2492 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, iOS)

function call causes an infinite recursion

Check warning on line 2492 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, iOS)

function call causes an infinite recursion

Check warning on line 2492 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, iOS)

function call causes an infinite recursion

Check warning on line 2492 in FirebaseAuth/Sources/Swift/Auth/Auth.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, iOS)

function call causes an infinite recursion
}
}

extension String {
func base64EncodedString() -> String? {
return self.data(using: .utf8)?.base64EncodedString()
}
}
33 changes: 33 additions & 0 deletions FirebaseAuth/Sources/Swift/Backend/AuthBackend.swift
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,39 @@ final class AuthBackend: AuthBackendProtocol {
init(rpcIssuer: any AuthBackendRPCIssuerProtocol) {
self.rpcIssuer = rpcIssuer
}

public func startPasskeyEnrollment(request: StartPasskeyEnrollmentRequest) async throws -> StartPasskeyEnrollmentResponse {
guard #available(iOS 16.0, macOS 12.0, tvOS 16.0, *) else {
throw AuthErrorUtils.error(code: AuthErrorCode.operationNotAllowed, message: "OS version is not supported for this action.")
}
let response = try await call(with: request) as StartPasskeyEnrollmentResponse
return response
}

public func finalizePasskeyEnrollment(request: FinalizePasskeyEnrollmentRequest) async throws -> FinalizePasskeyEnrollmentResponse {
guard #available(iOS 16.0, macOS 12.0, tvOS 16.0, *) else {
throw AuthErrorUtils.error(code: AuthErrorCode.operationNotAllowed, message: "OS version is not supported for this action.")
}
let response = try await call(with: request) as FinalizePasskeyEnrollmentResponse
return response
}

public func startPasskeySignIn(request: StartPasskeySignInRequest) async throws -> StartPasskeySignInResponse {
guard #available(iOS 16.0, macOS 12.0, tvOS 16.0, *) else {
throw AuthErrorUtils.error(code: AuthErrorCode.operationNotAllowed, message: "OS version is not supported for this action.")
}
let response = try await call(with: request) as StartPasskeySignInResponse
return response
}

public func finalizePasskeySignIn(request: FinalizePasskeySignInRequest) async throws -> FinalizePasskeySignInResponse {
guard #available(iOS 16.0, macOS 12.0, tvOS 16.0, *) else{
throw AuthErrorUtils.error(code: AuthErrorCode.operationNotAllowed, message: "OS version is not supported for this action.")
}
let response = try await call(with: request) as FinalizePasskeySignInResponse
return response
}


/// Calls the RPC using HTTP request.
/// Possible error responses:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import Foundation
/// Represents the request for the `finalizePasskeyEnrollment` endpoint.
@available(iOS 13, *)
class FinalizePasskeyEnrollmentRequest: IdentityToolkitRequest, AuthRPCRequest {
typealias Response = FinalizePasskeyEnrollmentResponse
var unencodedHTTPRequestBody: [String : AnyHashable]?

/// GCIP endpoint for finalizePasskeyEnrollment RPC.
let kFinalizePasskeyEnrollmentEndpoint = "accounts/passkeyEnrollment:finalize"


/// The raw user access token.
let idToken: String
// name of user or passkey ?.?
let name: String
/// The credential ID.
var credentialID: String = "id"
/// The CollectedClientData object from the authenticator.
var clientDataJson: String = "clientDataJSON"
/// The attestation object from the authenticator.
var attestationObject: String = "response"

/// The request configuration.
let requestConfiguration: AuthRequestConfiguration?


/// Initializes a new `FinalizePasskeyEnrollmentRequest`.
///
/// - Parameters:
/// - IDToken: The raw user access token.
/// - name: The passkey name.
/// - credentialID: The credential ID.
/// - clientDataJson: The CollectedClientData object from the authenticator.
/// - attestationObject: The attestation object from the authenticator.
/// - requestConfiguration: The request configuration.
init(idToken: String, name: String, credentialID: String, clientDataJson: String,
attestationObject: String, requestConfiguration: AuthRequestConfiguration) {
self.idToken = idToken
self.name = name
self.credentialID = credentialID
self.clientDataJson = clientDataJson
self.attestationObject = attestationObject
self.requestConfiguration = requestConfiguration
super.init(
endpoint: kFinalizePasskeyEnrollmentEndpoint,
requestConfiguration: requestConfiguration,
useIdentityPlatform: true
)
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import Foundation

/// Represents the response from the `finalizePasskeyEnrollment` endpoint.
@available(iOS 13, *)
struct FinalizePasskeyEnrollmentResponse: AuthRPCResponse {

/// The ID token for the authenticated user.
public let idToken: String

/// The refresh token for the authenticated user.
public let refreshToken: String

private static let kIdTokenKey = "idToken"
private static let kRefreshTokenKey = "refreshToken"

/// Initializes a new `FinalizePasskeyEnrollmentResponse` from a dictionary.
///
/// - Parameter dictionary: The dictionary containing the response data.
/// - Throws: An error if parsing fails.
public init(dictionary: [String: AnyHashable]) throws {
guard let idToken = dictionary[Self.kIdTokenKey] as? String,
let refreshToken = dictionary[Self.kRefreshTokenKey] as? String else {
throw AuthErrorUtils.unexpectedResponse(deserializedResponse: dictionary)
}
self.idToken = idToken
self.refreshToken = refreshToken
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import Foundation
import AuthenticationServices

/// Represents the request for the `finalizePasskeySignIn` endpoint.
@available(iOS 13, *)
class FinalizePasskeySignInRequest: IdentityToolkitRequest, AuthRPCRequest {
typealias Response = FinalizePasskeySignInResponse
var unencodedHTTPRequestBody: [String : AnyHashable]?


/// GCIP endpoint for finalizePasskeySignIn RPC.
private let finalizePasskeySignInEndpoint = "accounts/passkeySignIn:finalize"

/// The signature from the authenticator.
let signature: String
/// Identifier for the registered credential.
var credentialID: String = "id"
/// The CollectedClientData object from the authenticator.
var clientDataJSON: String = "clientDataJSON"
/// The AuthenticatorData from the authenticator.
var authenticatorData: String = "response"
/// The user ID.
let userID: String

/// Initializes a new `FinalizePasskeySignInRequest` with platform credential and request configuration.
///
/// - Parameters:
/// - credentialID: The credential ID.
/// - clientDataJson: The CollectedClientData object from the authenticator.
/// - authenticatorData: The AuthenticatorData from the authenticator.
/// - signature: The signature from the authenticator.
/// - userID: The user ID.
/// - requestConfiguration: An object containing configurations to be added to the request.
init(credentialID: String, clientDataJson: String, authenticatorData: String, signature: String, userID: String, requestConfiguration: AuthRequestConfiguration) {

self.credentialID = credentialID
self.clientDataJSON = clientDataJson
self.authenticatorData = authenticatorData
self.signature = signature
self.userID = userID
super.init(endpoint: finalizePasskeySignInEndpoint, requestConfiguration: requestConfiguration, useIdentityPlatform: true)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import Foundation

/// Represents the response from the `finalizePasskeySignIn` endpoint.
@available(iOS 13, *)
struct FinalizePasskeySignInResponse: AuthRPCResponse {

/// The ID token for the authenticated user.
var idToken: String = "idToken"

/// The refresh token for the authenticated user.
var refreshToken: String = "refreshToken"


/// Initializes a new `FinalizePasskeySignInResponse` from a dictionary.
///
/// - Parameter dictionary: The dictionary containing the response data.
/// - Throws: An error if parsing fails.
init(dictionary: [String: AnyHashable]) throws {
guard let idToken = dictionary[idToken] as? String,
let refreshToken = dictionary[refreshToken] as? String else {
throw AuthErrorUtils.unexpectedResponse(deserializedResponse: dictionary)
}
self.idToken = idToken
self.refreshToken = refreshToken
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@
let phoneNumber: String?

let mfaEnrollments: [AuthProtoMFAEnrollment]?

let enrolledPasskeys: [PasskeyInfo]?

Check failure on line 95 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, watchOS)

cannot find type 'PasskeyInfo' in scope

Check failure on line 95 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, watchOS)

cannot find type 'PasskeyInfo' in scope

/// Designated initializer.
/// - Parameter dictionary: The provider user info data from endpoint.
Expand Down Expand Up @@ -133,11 +135,21 @@
} else {
mfaEnrollments = nil
}
if let passkeyEnrollmentData = dictionary["passkeyInfo"] as? [[String: AnyHashable]] {
var enrolledPasskeys = [PasskeyInfo]()
for passkeyInfoDict in passkeyEnrollmentData {
let passkeyInfo = PasskeyInfo(dictionary: passkeyInfoDict)
enrolledPasskeys.append(passkeyInfo)
}
self.enrolledPasskeys = enrolledPasskeys
} else {
self.enrolledPasskeys = nil
}
}
}

/// The requested users' profiles.
var users: [Self.User]?

Check warning on line 152 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, catalyst)

stored property 'users' of 'Sendable'-conforming struct 'GetAccountInfoResponse' has non-sendable type '[GetAccountInfoResponse.User]?'; this is an error in the Swift 6 language mode

Check warning on line 152 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, catalyst)

stored property 'users' of 'Sendable'-conforming struct 'GetAccountInfoResponse' has non-sendable type '[GetAccountInfoResponse.User]?'; this is an error in the Swift 6 language mode

Check warning on line 152 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, iOS)

stored property 'users' of 'Sendable'-conforming struct 'GetAccountInfoResponse' has non-sendable type '[GetAccountInfoResponse.User]?'; this is an error in the Swift 6 language mode

Check warning on line 152 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-14, Xcode_16.2, iOS)

stored property 'users' of 'Sendable'-conforming struct 'GetAccountInfoResponse' has non-sendable type '[GetAccountInfoResponse.User]?'; this is an error in the Swift 6 language mode

Check warning on line 152 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-14, Xcode_16.2, iOS)

stored property 'users' of 'Sendable'-conforming struct 'GetAccountInfoResponse' has non-sendable type '[GetAccountInfoResponse.User]?'; this is an error in the Swift 6 language mode

Check warning on line 152 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, tvOS)

stored property 'users' of 'Sendable'-conforming struct 'GetAccountInfoResponse' has non-sendable type '[GetAccountInfoResponse.User]?'; this is an error in the Swift 6 language mode

Check warning on line 152 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, tvOS)

stored property 'users' of 'Sendable'-conforming struct 'GetAccountInfoResponse' has non-sendable type '[GetAccountInfoResponse.User]?'; this is an error in the Swift 6 language mode

Check warning on line 152 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, tvOS)

stored property 'users' of 'Sendable'-conforming struct 'GetAccountInfoResponse' has non-sendable type '[GetAccountInfoResponse.User]?'; this is an error in the Swift 6 language mode

Check warning on line 152 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, visionOS)

stored property 'users' of 'Sendable'-conforming struct 'GetAccountInfoResponse' has non-sendable type '[GetAccountInfoResponse.User]?'; this is an error in the Swift 6 language mode

Check warning on line 152 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, visionOS)

stored property 'users' of 'Sendable'-conforming struct 'GetAccountInfoResponse' has non-sendable type '[GetAccountInfoResponse.User]?'; this is an error in the Swift 6 language mode

Check warning on line 152 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, visionOS)

stored property 'users' of 'Sendable'-conforming struct 'GetAccountInfoResponse' has non-sendable type '[GetAccountInfoResponse.User]?'; this is an error in the Swift 6 language mode

Check warning on line 152 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, macOS)

stored property 'users' of 'Sendable'-conforming struct 'GetAccountInfoResponse' has non-sendable type '[GetAccountInfoResponse.User]?'; this is an error in the Swift 6 language mode

Check warning on line 152 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, macOS)

stored property 'users' of 'Sendable'-conforming struct 'GetAccountInfoResponse' has non-sendable type '[GetAccountInfoResponse.User]?'; this is an error in the Swift 6 language mode

Check warning on line 152 in FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift

View workflow job for this annotation

GitHub Actions / spm / spm (macos-15, Xcode_16.3, macOS)

stored property 'users' of 'Sendable'-conforming struct 'GetAccountInfoResponse' has non-sendable type '[GetAccountInfoResponse.User]?'; this is an error in the Swift 6 language mode

init(dictionary: [String: AnyHashable]) throws {
guard let usersData = dictionary["users"] as? [[String: AnyHashable]] else {
Expand Down
Loading
Loading