Excellence kawej
08/13/2025, 10:55 AM/Users/ctrltech/StudioProjects/Tmaterials/iosApp/iosApp/FirebaseBridge.swift:37:69 Trailing closure passed to parameter of type 'String' that does not accept a closure
Here is my implementation:
import Foundation
import FirebaseCore
import Firebase
import FirebaseAuth
import GoogleSignInSwift
import GoogleSignIn
@objc class FirebaseBridge: NSObject {
@objc static func configureFirebase() {
if <http://FirebaseApp.app|FirebaseApp.app>() == nil {
FirebaseApp.configure()
}
}
@objc static func isUserSignedIn() -> Bool {
return Auth.auth().currentUser != nil
}
@objc static func signOut() {
try? Auth.auth().signOut()
}
@objc static func signInWithGoogle(presenting: UIViewController, completion: @escaping (FirebaseUserWrapper?, Error?) -> Void) {
guard let clientID = <http://FirebaseApp.app|FirebaseApp.app>()?.options.clientID else {
completion(nil, NSError(domain: "NoClientID", code: 0))
return
}
let config = GIDConfiguration(clientID: clientID)
GIDSignIn.sharedInstance.signIn(withPresenting: presenting) { result in //error happens here
switch result {
case .success(let signInResult):
let user = result.user
guard let idToken = user.idToken?.tokenString else {
completion(nil, NSError(domain: "MissingIdToken", code: 1))
return
}
let accessToken = user.accessToken.tokenString
guard let idToken = idToken else {
completion(nil, NSError(domain: "MissingIdToken", code: 1))
return
}
let credential = GoogleAuthProvider.credential(withIDToken: idToken, accessToken: accessToken)
Auth.auth().signIn(with: credential) { authResult, error in
if let error = error {
completion(nil, NSError(domain: error.localizedDescription, code: 1))
} else if let firebaseUser = authResult?.user {
completion(FirebaseUserWrapper(user: firebaseUser), nil)
} else {
completion(authResult?.user.uid, nil)
}
}
case .failure(let error):
if let error = error {
completion(nil, error)
return
}
guard let result = result else {
completion(nil, NSError(domain: "GoogleSignInError", code: 1))
return
}
}
}
}
}
@objc class FirebaseUserWrapper: NSObject {
let uid: String
let email: String?
let displayName: String?
init(user: User) {
self.uid = user.uid
self.email = user.email
self.displayName = user.displayName
}
}
Andrei Salavei
08/14/2025, 1:48 PMsignIn
completion closure. You can extract code into a separated function to help the compiler find an error.
One error I can see right now is: guard let idToken = idToken else {
. idToken is already non-optional after the previous guard check. You can safely remove this condition.Excellence kawej
08/15/2025, 10:05 PM