Firebase SDK для Swift: полное руководство с примерами

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое Firebase SDK для Swift?

Firebase SDK (Software Development Kit) для языка Swift — это мощный набор инструментов от Google, который предоставляет разработчикам iOS-приложений готовую инфраструктуру для создания бэкенда (Backend-as-a-Service, BaaS). Вместо того чтобы писать серверный код с нуля, вы получаете готовые облачные сервисы: базу данных, аутентификацию, аналитику, облачное хранилище, push-уведомления и многое другое.

Firebase SDK для Swift позволяет:

  • Хранить данные в реальном времени (Firestore и Realtime Database)
  • Аутентифицировать пользователей (email/пароль, Google, Apple, Facebook и др.)
  • Загружать файлы в облачное хранилище (Cloud Storage)
  • Отправлять push-уведомления (Cloud Messaging)
  • Собирать аналитику (Google Analytics for Firebase)
  • Настраивать A/B тестирование (Remote Config)
  • Отлавливать ошибки (Crashlytics)

Библиотека распространяется через Swift Package Manager (SPM) или CocoaPods. Это официальный SDK от Google, который поддерживается и обновляется.

Установка Firebase SDK для Swift

Вариант 1: Swift Package Manager (SPM) — Рекомендуемый способ

  1. Откройте ваш проект в Xcode
  2. Перейдите в File → Add Packages...
  3. Вставьте URL репозитория: https://github.com/firebase/firebase-ios-sdk.git
  4. Выберите нужную версию (рекомендуется последняя стабильная)
  5. Выберите необходимые модули (например, FirebaseFirestore, FirebaseAuth)
  6. Нажмите Add Package

Вариант 2: CocoaPods

Если вы используете CocoaPods, добавьте в ваш Podfile:

platform :ios, '13.0'
use_frameworks!

target 'YourAppName' do
  pod 'FirebaseFirestore'
  pod 'FirebaseAuth'
  pod 'FirebaseStorage'
  pod 'FirebaseAnalytics'
  pod 'FirebaseMessaging'
end

Затем выполните в терминале:

pod install

Настройка проекта в консоли Firebase

  1. Перейдите на console.firebase.google.com
  2. Создайте новый проект или выберите существующий
  3. Добавьте iOS-приложение
  4. Скачайте файл GoogleService-Info.plist
  5. Перетащите его в корень вашего Xcode-проекта

Быстрый старт с примером кода

После установки и настройки, инициализируйте Firebase в AppDelegate.swift:

import UIKit
import FirebaseCore

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

Теперь вы можете использовать Firebase. Простой пример записи и чтения данных из Firestore:

import FirebaseFirestore

class ViewController: UIViewController {
    let db = Firestore.firestore()

    override func viewDidLoad() {
        super.viewDidLoad()
        addUser()
        readUsers()
    }

    func addUser() {
        db.collection("users").addDocument(data: [
            "name": "Иван Петров",
            "age": 25,
            "email": "ivan@example.com"
        ]) { error in
            if let error = error {
                print("Ошибка добавления: \(error.localizedDescription)")
            } else {
                print("Пользователь успешно добавлен!")
            }
        }
    }

    func readUsers() {
        db.collection("users").getDocuments { snapshot, error in
            if let error = error {
                print("Ошибка чтения: \(error.localizedDescription)")
                return
            }
            for document in snapshot!.documents {
                print("\(document.documentID) => \(document.data())")
            }
        }
    }
}

Основные методы и функции Firebase SDK для Swift

1. Firestore.firestore().collection("collectionName").addDocument(data:)

Что делает: Добавляет новый документ в коллекцию Firestore с автоматически сгенерированным ID.

Параметры:

  • data: [String: Any] — словарь с данными документа
  • completion: ((Error?) -> Void)? — замыкание, вызываемое после завершения операции

Пример:

let db = Firestore.firestore()
db.collection("notes").addDocument(data: [
    "title": "Заметка 1",
    "content": "Текст заметки",
    "createdAt": Timestamp(date: Date())
]) { error in
    if let error = error {
        print("Ошибка: \(error)")
    } else {
        print("Заметка создана!")
    }
}

2. Firestore.firestore().collection("collectionName").document("docID").setData(data:)

Что делает: Устанавливает данные для конкретного документа (создает или перезаписывает).

Параметры:

  • data: [String: Any] — данные для записи
  • merge: Bool — если true, объединяет с существующими данными

Пример:

let db = Firestore.firestore()
db.collection("users").document("user123").setData([
    "name": "Анна",
    "age": 30
], merge: true) { error in
    if let error = error {
        print("Ошибка: \(error)")
    }
}

3. Firestore.firestore().collection("collectionName").getDocuments(completion:)

Что делает: Получает все документы из коллекции (однократное чтение).

Параметры:

  • completion: (QuerySnapshot?, Error?) -> Void — замыкание с результатами

Пример:

db.collection("products").getDocuments { snapshot, error in
    guard let documents = snapshot?.documents else {
        print("Нет документов")
        return
    }
    for doc in documents {
        print(doc.data())
    }
}

4. Firestore.firestore().collection("collectionName").document("docID").getDocument(completion:)

Что делает: Получает один документ по его ID.

Пример:

db.collection("users").document("user123").getDocument { document, error in
    if let document = document, document.exists {
        let data = document.data()
        print("Имя: \(data?["name"] ?? "")")
    }
}

5. Firestore.firestore().collection("collectionName").addSnapshotListener(completion:)

Что делает: Подписывается на обновления коллекции в реальном времени.

Пример:

let listener = db.collection("messages")
    .addSnapshotListener { snapshot, error in
        guard let documents = snapshot?.documents else { return }
        for doc in documents {
            print("Новое сообщение: \(doc.data())")
        }
    }
// Чтобы отписаться: listener.remove()

6. Auth.auth().createUser(withEmail:password:completion:)

Что делает: Создает нового пользователя с email и паролем.

Параметры:

  • email: String — email пользователя
  • password: String — пароль (минимум 6 символов)

Пример:

Auth.auth().createUser(withEmail: "user@example.com", password: "123456") { result, error in
    if let error = error {
        print("Ошибка регистрации: \(error.localizedDescription)")
    } else {
        print("Пользователь создан: \(result?.user.uid ?? "")")
    }
}

7. Auth.auth().signIn(withEmail:password:completion:)

Что делает: Выполняет вход пользователя по email и паролю.

Пример:

Auth.auth().signIn(withEmail: "user@example.com", password: "123456") { result, error in
    if let error = error {
        print("Ошибка входа: \(error.localizedDescription)")
    } else {
        print("Вход выполнен: \(result?.user.uid ?? "")")
    }
}

8. Auth.auth().signOut()

Что делает: Выполняет выход текущего пользователя.

Пример:

do {
    try Auth.auth().signOut()
    print("Выход выполнен успешно")
} catch {
    print("Ошибка выхода: \(error.localizedDescription)")
}

9. Storage.storage().reference().child("path").putData(data:metadata:completion:)

Что делает: Загружает данные (например, изображение) в Cloud Storage.

Параметры:

  • data: Data — данные для загрузки
  • metadata: StorageMetadata? — метаданные (опционально)

Пример:

let storageRef = Storage.storage().reference()
let imageRef = storageRef.child("images/photo.jpg")

guard let imageData = UIImage(named: "photo")?.jpegData(compressionQuality: 0.8) else { return }

imageRef.putData(imageData, metadata: nil) { metadata, error in
    if let error = error {
        print("Ошибка загрузки: \(error)")
    } else {
        print("Файл загружен!")
    }
}

10. Storage.storage().reference().child("path").downloadURL(completion:)

Что делает: Получает URL для скачивания файла из Cloud Storage.

Пример:

let storageRef = Storage.storage().reference().child("images/photo.jpg")
storageRef.downloadURL { url, error in
    if let url = url {
        print("URL для скачивания: \(url.absoluteString)")
    }
}

11. Analytics.logEvent("event_name", parameters:)

Что делает: Отправляет пользовательское событие в Google Analytics.

Пример:

Analytics.logEvent("purchase_completed", parameters: [
    "item_name": "Premium Subscription" as NSObject,
    "value": 9.99 as NSObject,
    "currency": "USD" as NSObject
])

12. RemoteConfig.remoteConfig().fetchAndActivate(completionHandler:)

Что делает: Получает и активирует конфигурацию из Remote Config.

Пример:

let remoteConfig = RemoteConfig.remoteConfig()
remoteConfig.fetchAndActivate { status, error in
    if status == .successfullyFetched {
        let welcomeText = remoteConfig.configValue(forKey: "welcome_message").stringValue ?? "Привет!"
        print("Текст приветствия: \(welcomeText)")
    }
}

Реальный практический пример использования

Создадим простое приложение "Заметки" с авторизацией и хранением данных в Firestore.

import UIKit
import FirebaseAuth
import FirebaseFirestore

class NotesAppViewController: UIViewController {
    let db = Firestore.firestore()
    var notes: [String] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        // Проверяем, авторизован ли пользователь
        if Auth.auth().currentUser == nil {
            showLoginScreen()
        } else {                    

Рекомендаций