SwiftUI Firebase 연동

개요

요즘은 서버를 직접 구축하지 않아도 서버를 사용할 수 있다.

Firebase를 사용하면되는데 연동 방법과 Firestore에 데이터를 저장하는 법에 대해서도 알아보겠다.

Firebase에 대해 잘 정리해놓은 곳




Firebase


서버를 쉽게 만들 수 있는 구글에서 운영중인 서비스

쉽게 말해 백엔드를 우리가 담당할 필요가 없으며 우리는 프론트에만 집중할 수 있다.

근데 UIKit에 맞춰서 API들을 만들었기 때문에 SwiftUI에서는 매끄럽지 않은 것이 몇개 있다.

우선 Firebase와 내 앱을 연동해야 Firebase의 서비스를 사용할 수 있다.




Firebase 연동 방법


Firebase는 Swift Package Manager를 지원한다.



사전설정


  • 우선 앱 타겟 설정으로 가서 General의 Frameworks, Libraries… 파트를 찾는다.
  • add package dependancy를 누르면 Swift Package Manager로 종속성 관리를 할 수 있다.
  • URL 넣는 곳에 https://github.com/firebase/firebase-ios-sdk를 넣으면 추가할 수 있다.
  • Dependancy Rule을 Branch의 master로 하고 추가한다.
  • 그럼 설치할 수 있는 sub-package가 쫘라락 뜬다. 그중에서 FirebaseRemoteConfig를 추가한다.
  • 프로젝트 workSpace에 Package Dependencies가 추가됐으면 Xcode에서 Firebase를 사용할 준비를 마쳤다.
  • 이제 firebase 홈페이지에 간다.
  • 프로젝트 하나 만든다.
  • Engage-Remote Config-Create configuration해서 파라메터 하나 만든다.
  • iOS로 시작을 눌러서 Add Firebase to your Apple app창으로 간다.
  • bundle id에 bundle identifier값을 넣는다.



코드설정


아래는 firebase에서 이렇게 하라고 써있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import SwiftUI
import FirebaseCore

class AppDelegate: NSObject, UIApplicationDelegate {
  func application(_ application: UIApplication,
                   didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    FirebaseApp.configure()
    return true
  }
}

@main
struct YourApp: App {
  // register app delegate for Firebase setup
  @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate

  var body: some Scene {
    WindowGroup {
      NavigationView {
        ContentView()
      }
    }
  }
}

이건 개인적으로 알아본 방법이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import SwiftUI
import Firebase

@main
struct RemoteConfigApp: App {
    init () {
        FirebaseApp.configure()
    }
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

근데 이렇게 하면

App Delegate does not conform to UIApplicationDelegate protocol.

boringssl_metrics_log_metric_block_invoke(153) Failed to log metrics

이 두개의 경고가 뜬다.

실행이랑 끌어오고 푸시하는건 되는데 간단한 테스트할 때는 모를까 굳이 할필요는 없어보인다.

firebase에서 하라는대로 하자




Firestore에서 데이터 가져오기


Firestore.firestore().collection(“name”) 변수를 가지고 있어야하고

여기서 getDocument()으로 스냅샷을 찍어서 데이터를 가져온다.

추가하고 싶다면 addDocument(from: )으로 dbCollection에 추가한다.