Apple āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽā§‡ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰ⧁āύ

āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϤāĻžāĻĻ⧇āϰ āχāĻŽā§‡āϞ āĻ āĻŋāĻ•āĻžāύāĻž āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Firebase āĻāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϗ⧁āϞāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇ āφāĻĒāύāĻŋ Firebase Authentication āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āφāĻĒāύāĻŋ āĻļ⧁āϰ⧁ āĻ•āϰāĻžāϰ āφāϗ⧇

āĻĢāĻžāϝāĻŧāĻžāϰāĻŦ⧇āϏ āύāĻŋāĻ°ā§āĻ­āϰāϤāĻž āχāύāĻ¸ā§āϟāϞ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇ āϏ⧁āχāĻĢāϟ āĻĒā§āϝāĻžāϕ⧇āϜ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤

  1. Xcode-āĻ, āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āĻ–ā§‹āϞāĻžāϰ āϏāĻžāĻĨ⧇, āĻĢāĻžāχāϞ > āĻĒā§āϝāĻžāϕ⧇āϜ āϝ⧋āĻ— āĻ•āϰ⧁āύ -āĻ āύ⧇āĻ­āĻŋāϗ⧇āϟ āĻ•āϰ⧁āύāĨ¤
  2. āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāĻž āĻšāϞ⧇, Firebase Apple āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ SDK āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āϝ⧋āĻ— āĻ•āϰ⧁āύ:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Firebase Authentication āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻŦ⧇āϛ⧇ āύāĻŋāύāĨ¤
  5. āφāĻĒāύāĻžāϰ āϞāĻ•ā§āĻˇā§āϝ⧇āϰ āĻŦāĻŋāĻ˛ā§āĻĄ āϏ⧇āϟāĻŋāĻ‚āϏ⧇āϰ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āϞāĻŋāĻ™ā§āĻ•āĻžāϰ āĻĢā§āĻ˛ā§āϝāĻžāĻ— āĻŦāĻŋāĻ­āĻžāϗ⧇ -ObjC āĻĒāϤāĻžāĻ•āĻž āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤
  6. āĻļ⧇āώ āĻšāϝāĻŧ⧇ āϗ⧇āϞ⧇, Xcode āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻĒāϟāĻ­ā§‚āĻŽāĻŋāϤ⧇ āφāĻĒāύāĻžāϰ āύāĻŋāĻ°ā§āĻ­āϰāϤāĻžāϗ⧁āϞāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻāĻŦāĻ‚ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāĻž āĻļ⧁āϰ⧁ āĻ•āϰāĻŦ⧇āĨ¤

āĻāϰ āĻĒāϰ⧇, āĻ•āĻŋāϛ⧁ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰ⧁āύ:

  1. āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ–āύāĻ“ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒāϟāĻŋāϕ⧇ āφāĻĒāύāĻžāϰ Firebase āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āύāĻž āĻ•āϰ⧇ āĻĨāĻžāϕ⧇āύ, āϤāĻžāĻšāϞ⧇ Firebase āĻ•āύāϏ⧋āϞ āĻĨ⧇āϕ⧇ āϤāĻž āĻ•āϰ⧁āύ⧎
  2. āχāĻŽā§‡āϞ/āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āϏāĻžāχāύ-āχāύ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ:
    1. Firebase āĻ•āύāϏ⧋āϞ⧇ , Auth āĻŦāĻŋāĻ­āĻžāĻ—āϟāĻŋ āϖ⧁āϞ⧁āύāĨ¤
    2. āϏāĻžāχāύ āχāύ āĻĒāĻĻā§āϧāϤāĻŋ āĻŸā§āϝāĻžāĻŦ⧇, āχāĻŽā§‡āϞ/āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āϏāĻžāχāύ-āχāύ āĻĒāĻĻā§āϧāϤāĻŋ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύāĨ¤

āĻāĻ•āϟāĻŋ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

āĻāĻ•āϟāĻŋ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āϏāĻš āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇, āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āϏāĻžāχāύ-āχāύ āĻ•āĻžāĻ°ā§āϝāĻ•āϞāĻžāĻĒ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āϰ⧁āύ:

  1. āφāĻĒāύāĻžāϰ UIApplicationDelegate āĻ FirebaseCore āĻŽāĻĄāĻŋāωāϞ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰ⧁āύ, āϏ⧇āχāϏāĻžāĻĨ⧇ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋ āϝ⧇ āϕ⧋āύ⧋ Firebase āĻŽāĻĄāĻŋāωāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, Cloud Firestore āĻāĻŦāĻ‚ Authentication āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇:

    āϏ⧁āχāĻĢāϟāχāωāφāχ

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    āϏ⧁āχāĻĢāϟ

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    āωāĻĻā§āĻĻ⧇āĻļā§āϝ-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋāϰ application(_:didFinishLaunchingWithOptions:) āĻĒāĻĻā§āϧāϤāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ FirebaseApp āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž āωāĻĻāĻžāĻšāϰāĻŖ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰ⧁āύ:

    āϏ⧁āχāĻĢāϟāχāωāφāχ

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    āϏ⧁āχāĻĢāϟ

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    āωāĻĻā§āĻĻ⧇āĻļā§āϝ-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. āφāĻĒāύāĻŋ āϝāĻĻāĻŋ SwiftUI āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻĄā§‡āϞāĻŋāϗ⧇āϟ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ UIApplicationDelegateAdaptor āĻŦāĻž NSApplicationDelegateAdaptor āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāĻĒāύāĻžāϰ App āĻ¸ā§āĻŸā§āϰāĻžāĻ•āĻŸā§‡ āĻāϟāĻŋ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻ…ā§āϝāĻžāĻĒ āĻĄā§‡āϞāĻŋāϗ⧇āϟ āϏ⧁āχāϜāϞāĻŋāĻ‚ āĻ…āĻ•ā§āώāĻŽ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āφāϰāĻ“ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ, SwiftUI āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āĻĻ⧇āϖ⧁āύāĨ¤

    āϏ⧁āχāĻĢāϟāχāωāφāχ

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. āϝāĻ–āύ āĻāĻ•āϜāύ āύāϤ⧁āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āϏāĻžāχāύ-āφāĻĒ āĻĢāĻ°ā§āĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏāĻžāχāύ āφāĻĒ āĻ•āϰ⧇āύ, āϤāĻ–āύ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϝ⧇āϕ⧋āύ āύāϤ⧁āύ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϝāĻžāϚāĻžāχāĻ•āϰāϪ⧇āϰ āϧāĻžāĻĒāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āϰ⧁āύ, āϝ⧇āĻŽāύ āύāϤ⧁āύ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡āϰ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āϟāĻžāχāĻĒ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻ•āĻŋāύāĻž āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āϜāϟāĻŋāϞāϤāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž āĻĒā§‚āϰāĻŖ āĻ•āϰ⧇ āϤāĻž āϝāĻžāϚāĻžāχ āĻ•āϰāĻžāĨ¤
  5. createUser āĻ āύāϤ⧁āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āχāĻŽā§‡āϞ āĻ āĻŋāĻ•āĻžāύāĻž āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĒāĻžāϏ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤

    āϏ⧁āχāĻĢāϟ

    Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
      // ...
    }

    āωāĻĻā§āĻĻ⧇āĻļā§āϝ-C

    [[FIRAuth auth] createUserWithEmail:email
                               password:password
                             completion:^(FIRAuthDataResult * _Nullable authResult,
                                          NSError * _Nullable error) {
      // ...
    }];
    āϝāĻĻāĻŋ āύāϤ⧁āύ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϟāĻŋ āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏāĻžāχāύ āχāύ āĻ•āϰ⧇āϛ⧇āύ, āĻāĻŦāĻ‚ āφāĻĒāύāĻŋ āĻĢāϞāĻžāĻĢāϞ āĻŦāĻ¸ā§āϤ⧁ āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻĄā§‡āϟāĻž āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύ āϝāĻž āĻ•āϞāĻŦā§āϝāĻžāĻ• āĻĒāĻĻā§āϧāϤāĻŋāϤ⧇ āĻĒāĻžāϏ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āĻāĻ•āϟāĻŋ āχāĻŽā§‡āϞ āĻ āĻŋāĻ•āĻžāύāĻž āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏāĻžāχāύ āχāύ āĻ•āϰ⧁āύ

āĻāĻ•āϟāĻŋ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒāϗ⧁āϞāĻŋ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϤ⧈āϰāĻŋāϰ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒāϗ⧁āϞāĻŋāϰ āĻ…āύ⧁āϰ⧂āĻĒ⧎ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āϏāĻžāχāύ-āχāύ āĻ•āĻžāĻ°ā§āϝāĻ•āϞāĻžāĻĒ⧇, āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤāϗ⧁āϞāĻŋ āĻ•āϰ⧁āύ:

  1. āφāĻĒāύāĻžāϰ UIApplicationDelegate āĻ FirebaseCore āĻŽāĻĄāĻŋāωāϞ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰ⧁āύ, āϏ⧇āχāϏāĻžāĻĨ⧇ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋ āϝ⧇ āϕ⧋āύ⧋ Firebase āĻŽāĻĄāĻŋāωāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, Cloud Firestore āĻāĻŦāĻ‚ Authentication āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇:

    āϏ⧁āχāĻĢāϟāχāωāφāχ

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    āϏ⧁āχāĻĢāϟ

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    āωāĻĻā§āĻĻ⧇āĻļā§āϝ-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋāϰ application(_:didFinishLaunchingWithOptions:) āĻĒāĻĻā§āϧāϤāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ FirebaseApp āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž āωāĻĻāĻžāĻšāϰāĻŖ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰ⧁āύ:

    āϏ⧁āχāĻĢāϟāχāωāφāχ

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    āϏ⧁āχāĻĢāϟ

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    āωāĻĻā§āĻĻ⧇āĻļā§āϝ-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. āφāĻĒāύāĻŋ āϝāĻĻāĻŋ SwiftUI āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻĄā§‡āϞāĻŋāϗ⧇āϟ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ UIApplicationDelegateAdaptor āĻŦāĻž NSApplicationDelegateAdaptor āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāĻĒāύāĻžāϰ App āĻ¸ā§āĻŸā§āϰāĻžāĻ•āĻŸā§‡ āĻāϟāĻŋ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻ…ā§āϝāĻžāĻĒ āĻĄā§‡āϞāĻŋāϗ⧇āϟ āϏ⧁āχāϜāϞāĻŋāĻ‚ āĻ…āĻ•ā§āώāĻŽ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āφāϰāĻ“ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ, SwiftUI āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āĻĻ⧇āϖ⧁āύāĨ¤

    āϏ⧁āχāĻĢāϟāχāωāφāχ

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. āϝāĻ–āύ āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰ⧇āύ, āϤāĻ–āύ signIn āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āχāĻŽā§‡āϞ āĻ āĻŋāĻ•āĻžāύāĻž āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĻāĻŋāύāĨ¤

    āϏ⧁āχāĻĢāϟ

    Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in
      guard let strongSelf = self else { return }
      // ...
    }

    āωāĻĻā§āĻĻ⧇āĻļā§āϝ-C

    [[FIRAuth auth] signInWithEmail:self->_emailField.text
                           password:self->_passwordField.text
                         completion:^(FIRAuthDataResult * _Nullable authResult,
                                      NSError * _Nullable error) {
      // ...
    }];
    āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϞ⧇, āφāĻĒāύāĻŋ āĻĢāϞāĻžāĻĢāϞ āĻŦāĻ¸ā§āϤ⧁ āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻĄā§‡āϟāĻž āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύ āϝāĻž āĻ•āϞāĻŦā§āϝāĻžāĻ• āĻĒāĻĻā§āϧāϤāĻŋāϤ⧇ āĻĒāĻžāϏ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ: āĻāĻ•āϟāĻŋ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āύ⧀āϤāĻŋ āϏ⧇āϟ āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āϜāϟāĻŋāϞāϤāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧇ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āωāĻ¨ā§āύāϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āύ⧀āϤāĻŋ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāϤ⧇, Firebase āĻ•āύāϏ⧋āϞ⧇āϰ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āϏ⧇āϟāĻŋāĻ‚āϏ āĻĒ⧃āĻˇā§āĻ āĻžāϝāĻŧ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āύ⧀āϤāĻŋ āĻŸā§āϝāĻžāĻŦāϟāĻŋ āϖ⧁āϞ⧁āύ:

āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āϏ⧇āϟāĻŋāĻ‚āϏ

Firebase Authentication āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āύ⧀āϤāĻŋ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇:

  • āϛ⧋āϟ āĻšāĻžāϤ⧇āϰ āĻ…āĻ•ā§āώāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ

  • āĻŦāĻĄāĻŧ āĻšāĻžāϤ⧇āϰ āĻ…āĻ•ā§āώāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ

  • āϏāĻ‚āĻ–ā§āϝāĻžāϏ⧂āϚāĻ• āĻ…āĻ•ā§āώāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ

  • āύāύ-āφāϞāĻĢāĻžāύāĻŋāωāĻŽā§‡āϰāĻŋāĻ• āĻ…āĻ•ā§āώāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ

    āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ…āĻ•ā§āώāϰāϗ⧁āϞāĻŋ āĻ…-āφāϞāĻĢāĻžāύāĻŋāωāĻŽā§‡āϰāĻŋāĻ• āĻ…āĻ•ā§āώāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž āĻĒā§‚āϰāĻŖ āĻ•āϰ⧇: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • āĻ¨ā§āϝ⧂āύāϤāĻŽ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĻ⧈āĻ°ā§āĻ˜ā§āϝ (6 āĻĨ⧇āϕ⧇ 30 āĻ…āĻ•ā§āώāϰ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ; āĻĄāĻŋāĻĢāĻ˛ā§āϟ 6 āĻĒāĻ°ā§āϝāĻ¨ā§āϤ)

  • āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄā§‡āϰ āϏāĻ°ā§āĻŦā§‹āĻšā§āϚ āĻĻ⧈āĻ°ā§āĻ˜ā§āϝ (āϏāĻ°ā§āĻŦāĻžāϧāĻŋāĻ• āĻĻ⧈āĻ°ā§āĻ˜ā§āϝ 4096 āĻ…āĻ•ā§āώāϰ)

āφāĻĒāύāĻŋ āĻĻ⧁āϟāĻŋ āĻŽā§‹āĻĄā§‡ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āύ⧀āϤāĻŋ āĻĒā§āϰāϝāĻŧā§‹āĻ— āϏāĻ•ā§āώāĻŽ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

  • āĻĒā§āϰāϝāĻŧā§‹āϜāύ : āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āφāĻĒāύāĻžāϰ āύ⧀āϤāĻŋ āĻŽā§‡āύ⧇ āϚāϞāĻž āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āφāĻĒāĻĄā§‡āϟ āύāĻž āĻ•āϰāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϏāĻžāχāύ āφāĻĒ āĻ•āϰāĻžāϰ āĻĒā§āϰāĻšā§‡āĻˇā§āϟāĻž āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϝāĻŧāĨ¤

  • āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋ : āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻ…-āϏāĻ™ā§āĻ—āϤ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ āφāĻĒ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤ āĻāχ āĻŽā§‹āĻĄāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄāϟāĻŋ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻĒāĻ•ā§āώ⧇āϰ āύ⧀āϤāĻŋāϰ āϏāĻžāĻĨ⧇ āϏāĻ™ā§āĻ—āϤāĻŋāĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻŋāύāĻž āϤāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻž āωāϚāĻŋāϤ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āϤāĻžāĻĻ⧇āϰ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāĻž āωāϚāĻŋāϤ āϝāĻĻāĻŋ āĻāϟāĻŋ āĻŽā§‡āύ⧇ āύāĻž āϚāϞ⧇āĨ¤

āύāϤ⧁āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϏāĻ°ā§āĻŦāĻĻāĻž āĻāĻ•āϟāĻŋ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āϚāϝāĻŧāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝāĻž āφāĻĒāύāĻžāϰ āύ⧀āϤāĻŋ āĻŽā§‡āύ⧇ āϚāϞ⧇āĨ¤

āφāĻĒāύāĻžāϰ āϝāĻĻāĻŋ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĨāĻžāϕ⧇, āφāĻŽāϰāĻž āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āĻ•āϰāĻŋ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻœā§‹āϰ āĻ•āϰ⧇ āφāĻĒāĻ—ā§āϰ⧇āĻĄ āϏāĻ•ā§āώāĻŽ āύāĻž āĻ•āϰāĻž āϝāϤāĻ•ā§āώāĻŖ āύāĻž āφāĻĒāύāĻŋ āĻāĻŽāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŦā§āϞāĻ• āĻ•āϰāϤ⧇ āϚāĻžāύ āϝāĻžāĻĻ⧇āϰ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄāϗ⧁āϞāĻŋ āφāĻĒāύāĻžāϰ āύ⧀āϤāĻŋ āĻŽā§‡āύ⧇ āϚāϞ⧇ āύāĻžā§ˇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇, āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋ āĻŽā§‹āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ, āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϤāĻžāĻĻ⧇āϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ āĻāĻŦāĻ‚ āϤāĻžāĻĻ⧇āϰ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄā§‡āϰ āĻ…āĻ­āĻžāĻŦ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϤāĻžāĻĻ⧇āϰ āĻ…āĻŦāĻšāĻŋāϤ āĻ•āϰ⧇āĨ¤

āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ: āχāĻŽā§‡āϞ āĻ—āĻŖāύāĻž āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧁āύ

āĻ•āĻŋāϛ⧁ Firebase Authentication āĻĒāĻĻā§āϧāϤāĻŋ āϝāĻž āχāĻŽā§‡āϞ āĻ āĻŋāĻ•āĻžāύāĻžāϗ⧁āϞāĻŋāϕ⧇ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇ āϏ⧇āϗ⧁āϞāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ¤ā§āϰ⧁āϟāĻŋāϗ⧁āϞāĻŋ āĻĢ⧇āϞ⧇ āϝāĻĻāĻŋ āχāĻŽā§‡āϞ āĻ āĻŋāĻ•āĻžāύāĻžāϟāĻŋ āύāĻŋāĻŦāĻ¨ā§āϧāĻŋāϤ āύāĻž āĻĨāĻžāĻ•āĻž āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧ āĻĨāĻžāϕ⧇ (āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻāĻ•āϟāĻŋ āχāĻŽā§‡āϞ āĻ āĻŋāĻ•āĻžāύāĻž āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ), āĻŦāĻž āϝāĻ–āύ āĻāϟāĻŋ āĻ…āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧ āϤāĻ–āύ āύāĻŋāĻŦāĻ¨ā§āϧāĻŋāϤ āĻšāϝāĻŧ (āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āχāĻŽā§‡āϞ āĻ āĻŋāĻ•āĻžāύāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ)āĨ¤ āϝāĻĻāĻŋāĻ“ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĒā§āϰāϤāĻŋāĻ•āĻžāϰ⧇āϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻĻ⧇āĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āϏāĻšāĻžāϝāĻŧāĻ• āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āĻāϟāĻŋ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĻā§āĻŦāĻžāϰāĻž āύāĻŋāĻŦāĻ¨ā§āϧāĻŋāϤ āχāĻŽā§‡āϞ āĻ āĻŋāĻ•āĻžāύāĻžāϗ⧁āϞāĻŋ āφāĻŦāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĻā§‚āώāĻŋāϤ āĻ…āĻ­āĻŋāύ⧇āϤāĻžāĻĻ⧇āϰ āĻĻā§āĻŦāĻžāϰāĻž āĻ…āĻĒāĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻāχ āĻā§āρāĻ•āĻŋ āĻ•āĻŽāĻžāϤ⧇, āφāĻŽāϰāĻž āφāĻĒāύāĻžāϕ⧇ Google Cloud gcloud āϟ⧁āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āϜāĻ¨ā§āϝ āχāĻŽā§‡āϞ āĻ—āĻŖāύāĻž āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻ•ā§āώāĻŽ āĻ•āϰāĻžāϰ āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āĻ•āϰāĻ›āĻŋāĨ¤ āĻŽāύ⧇ āϰāĻžāĻ–āĻŦ⧇āύ āϝ⧇ āĻāχ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϟāĻŋ āϏāĻ•ā§āώāĻŽ āĻ•āϰāϞ⧇ Firebase Authentication āĻ¤ā§āϰ⧁āϟāĻŋ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āφāϚāϰāĻŖ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϝāĻŧ: āύāĻŋāĻļā§āϚāĻŋāϤ āĻšāύ āϝ⧇ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒāϟāĻŋ āφāϰāĻ“ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ¤ā§āϰ⧁āϟāĻŋāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ āύāĻžāĨ¤

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒ

āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āϞāĻŋāĻ™ā§āĻ• āĻ•āϰāĻž āĻšāϝāĻŧ—āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ, āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ, āĻŦāĻž āĻĒā§āϰāĻŽāĻžāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āϤāĻĨā§āϝ — āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏāĻžāχāύ āχāύ āĻ•āϰ⧇āϛ⧇āύāĨ¤ āĻāχ āύāϤ⧁āύ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϟāĻŋ āφāĻĒāύāĻžāϰ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦ⧇āϏ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻ…āĻ‚āĻļ āĻšāĻŋāϏāĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϕ⧀āĻ­āĻžāĻŦ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰ⧁āύ āύāĻž āϕ⧇āύ, āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ…ā§āϝāĻžāĻĒ āϜ⧁āĻĄāĻŧ⧇ āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

  • āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇, āφāĻĒāύāĻŋ User āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻŽā§ŒāϞāĻŋāĻ• āĻĒā§āϰ⧋āĻĢāĻžāχāϞ āϤāĻĨā§āϝ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻĻ⧇āϖ⧁āύāĨ¤

  • āφāĻĒāύāĻžāϰ Firebase Realtime Database āĻāĻŦāĻ‚ Cloud Storage āϏ⧁āϰāĻ•ā§āώāĻž āύāĻŋāϝāĻŧāĻŽā§‡ , āφāĻĒāύāĻŋ auth āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻĨ⧇āϕ⧇ āϏāĻžāχāύ-āχāύ āĻ•āϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ…āύāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āφāχāĻĄāĻŋ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϕ⧋āύ āĻĄā§‡āϟāĻž āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āϤāĻž āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāϤ⧇ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ āϞāĻŋāĻ™ā§āĻ• āĻ•āϰ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āϏāĻžāχāύ āφāωāϟ āĻ•āϰāϤ⧇, signOut:

āϏ⧁āχāĻĢāϟ

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}

āωāĻĻā§āĻĻ⧇āĻļā§āϝ-C

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

āφāĻĒāύāĻŋ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ¤ā§āϰ⧁āϟāĻŋāϰ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĒāϰāĻŋāϏāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻ¤ā§āϰ⧁āϟāĻŋ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻŋāĻ‚ āϕ⧋āĻĄ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āϚāĻžāχāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ¤ā§āϰ⧁āϟāĻŋ āĻĻ⧇āϖ⧁āύ.