Используйте сгенерированные iOS SDK

Клиентские SDK Firebase Data Connect позволяют вызывать серверные запросы и мутации непосредственно из приложения Firebase. Вы генерируете собственный клиентский SDK параллельно с разработкой схем, запросов и мутаций, которые вы разворачиваете в сервисе Data Connect . Затем вы интегрируете методы из этого SDK в клиентскую логику.

Как мы уже упоминали ранее, важно отметить, что запросы и мутации Data Connect не отправляются клиентским кодом и не выполняются на сервере. Вместо этого при развёртывании операции Data Connect хранятся на сервере, как облачные функции. Это означает, что вам необходимо развернуть соответствующие изменения на стороне клиента, чтобы избежать нарушения работы существующих пользователей (например, в старых версиях приложения).

Именно поэтому Data Connect предоставляет вам среду разработки и инструменты, позволяющие создавать прототипы схем, запросов и мутаций, развёртываемых на сервере. Кроме того, Data Connect автоматически генерирует клиентские SDK во время создания прототипа.

После итеративного обновления сервисных и клиентских приложений обновления как на стороне сервера, так и на стороне клиента готовы к развертыванию.

Каков рабочий процесс разработки клиента?

Если вы следовали руководству «Начало работы» , то ознакомились с общим процессом разработки Data Connect . В этом руководстве вы найдете более подробную информацию о создании Swift SDK на основе вашей схемы и работе с клиентскими запросами и мутациями.

Подводя итог, чтобы использовать сгенерированные Swift SDK в клиентских приложениях, вам необходимо выполнить следующие предварительные действия:

  1. Добавьте Firebase в ваше приложение iOS .
  2. Чтобы использовать сгенерированный SDK, настройте его как зависимость в Xcode.

    В верхней панели навигации Xcode выберите Файл > Добавить зависимости пакета > Добавить локальный и выберите папку, содержащую сгенерированный Package.swift .

Затем:

  1. Разработайте схему своего приложения.
  2. Настройте генерацию SDK:

  3. Инициализируйте клиентский код и импортируйте библиотеки .

  4. Реализовать вызовы запросов и мутаций .

  5. Настройте и используйте эмулятор Data Connect и повторите попытку.

Создайте свой Swift SDK

Как и в большинстве проектов Firebase, работа над клиентским кодом Firebase Data Connect осуществляется в локальном каталоге проекта. Расширение Data Connect VS Code и Firebase CLI — важные локальные инструменты для генерации и управления клиентским кодом.

Параметры генерации SDK привязаны к нескольким записям в файле dataconnect.yaml , созданном при инициализации проекта.

Инициализировать генерацию SDK

В файле connector.yaml добавьте outputDir , package и (для веб-SDK) packageJsonDir .
connectorId: "movies"
generate:
  swiftSdk:
    outputDir: "../movies-generated"
    package: "Movies"

outputDir указывает, куда будет выводиться сгенерированный SDK. Если не указано, в качестве выходного каталога по умолчанию используется папка коннектора.

package указывает имя генерируемого пакета. Генератор создаст папку с именем пакета, содержащую Package.swift и сгенерированный код.

observablePublisher (необязательно) указывает издателя Observable для использования в ссылках запроса. Возможные значения: observableMacro (iOS 17+) и observableObject (до iOS 17). Значение по умолчанию, если оно не указано, — observableMacro .

Обновляйте SDK во время создания прототипа

При интерактивном прототипировании с помощью расширения Data Connect VS Code и его эмулятора Data Connect исходные файлы SDK автоматически генерируются и обновляются при изменении файлов .gql определяющих схемы, запросы и мутации. Это может быть полезной функцией в рабочих процессах горячей (пере)загрузки.

В других сценариях, если вы используете эмулятор Data Connect из Firebase CLI, вы можете настроить отслеживание обновлений .gql , а также автоматическое обновление исходных кодов SDK.

Кроме того, вы можете использовать CLI для повторной генерации SDK при каждом изменении файлов .gql:

firebase dataconnect:sdk:generate --watch

Создание SDK для интеграции и выпуска продуктов

В некоторых сценариях, например при подготовке исходных кодов проекта для отправки на CI-тесты, вы можете вызвать Firebase CLI для пакетного обновления.

В этих случаях используйте firebase dataconnect:sdk:generate .

Инициализируйте Data Connect iOS SDK

Инициализируйте свой экземпляр Data Connect используя информацию, которую вы использовали для настройки Data Connect (все доступно на вкладке Data Connect консоли Firebase ).

Получение экземпляра коннектора

Код для вашего коннектора будет сгенерирован эмулятором Data Connect . Если имя вашего коннектора — movies , а пакет — movies , как указано в connector.yaml , извлеките объект коннектора, вызвав:

let connector = DataConnect.moviesConnector

Реализация запросов и мутаций

С помощью объекта-коннектора вы можете выполнять запросы и мутации, как определено в исходном коде GraphQL. Предположим, что для вашего коннектора определены следующие операции:

mutation createMovie($title: String!, $releaseYear: Int!, $genre: String!, $rating: Int!) {
  movie_insert(data: {
    title: $title
    releaseYear: $releaseYear
    genre: $genre
    rating: $rating
  })
}

query getMovieByKey($key: Movie_Key!) {
  movie(key: $key) { id title }
}

query listMoviesByGenre($genre: String!) {
  movies(where: {genre: {eq: $genre}}) {
    id
    title
  }
}

Затем вы можете создать фильм следующим образом:

let mutationResult = try await connector.createMovieMutation.execute(
  title: "Empire Strikes Back",
  releaseYear: 1980,
  genre: "Sci-Fi",
  rating: 5)

print("Movie ID: \(mutationResult.data.movie_insert.id)")

Для получения фильма используется ссылка запроса. Все ссылки запроса являются издателями Observable. В зависимости от настроенного издателя (см. connector.yaml) , они либо поддерживают макрос @Observable (iOS 17+), либо реализуют протокол ObservableObject . Если не указано иное, по умолчанию используется макрос @Observable поддерживаемый в iOS 17+.

В представлении SwiftUI вы можете привязать результаты запроса, используя переменную published data ссылки запроса, и вызвать метод execute() запроса для обновления данных. Переменная data будет соответствовать форме данных, указанной в определении запроса GQL.

Все полученные результаты соответствуют протоколу Decodable . Если вы включили первичный ключ объекта в выборку GQL, объекты также будут Identifiable , что позволит использовать их в итераторах.

struct ListMovieView: View {
    @StateObject private var queryRef = connector.listMoviesByGenreQuery.ref(genre: "Sci-Fi")
    var body: some View {
        VStack {
            Button {
                Task {
                    do {
                        try await refresh()
                    } catch {
                        print("Failed to refresh: \(error)")
                    }
                }
            } label: {
                Text("Refresh")
            }
                // use the query results in a view
            ForEach(queryRef.data?.movies ?? [], id: \.self.id) { movie in
                    Text(movie.title)
                }
            }
    }
    @MainActor
    func refresh() async throws {
        _ = try await queryRef.execute()
    }
}

Запросы также поддерживают однократное выполнение.

let resultData = try await DataConnect.moviesConnector.listMoviesByGenreQuery.execute(genre: "Sci-Fi")

Создайте прототип и протестируйте свое приложение iOS

Клиенты инструмента используют локальный эмулятор

Вы можете использовать эмулятор Data Connect как из расширения Data Connect VS Code, так и из CLI.

Настройка приложения для подключения к эмулятору одинакова для обоих сценариев.

let connector = DataConnect.moviesConnector
// Connect to the emulator on "127.0.0.1:9399"
connector.useEmulator()

// (alternatively) if you're running your emulator on non-default port:
connector.useEmulator(port: 9999)

// Make calls from your app

Типы данных в SDK Data Connect

Сервер Data Connect поддерживает стандартные и пользовательские типы данных GraphQL. В SDK они представлены следующим образом.

Тип подключения данных Быстрый
Нить Нить
Инт Инт
Плавать Двойной
Булевое значение Бул
UUID UUID
Дата FirebaseDataConnect.LocalDate
Метка времени FirebaseCore.Timestamp
Int64 Int64
Любой FirebaseDataConnect.AnyValue
,

Клиентские SDK Firebase Data Connect позволяют вызывать серверные запросы и мутации непосредственно из приложения Firebase. Вы генерируете собственный клиентский SDK параллельно с разработкой схем, запросов и мутаций, которые вы разворачиваете в сервисе Data Connect . Затем вы интегрируете методы из этого SDK в клиентскую логику.

Как мы уже упоминали ранее, важно отметить, что запросы и мутации Data Connect не отправляются клиентским кодом и не выполняются на сервере. Вместо этого при развёртывании операции Data Connect хранятся на сервере, как облачные функции. Это означает, что вам необходимо развернуть соответствующие изменения на стороне клиента, чтобы избежать нарушения работы существующих пользователей (например, в старых версиях приложения).

Именно поэтому Data Connect предоставляет вам среду разработки и инструменты, позволяющие создавать прототипы схем, запросов и мутаций, развёртываемых на сервере. Кроме того, Data Connect автоматически генерирует клиентские SDK во время создания прототипа.

После итеративного обновления сервисных и клиентских приложений обновления как на стороне сервера, так и на стороне клиента готовы к развертыванию.

Каков рабочий процесс разработки клиента?

Если вы следовали руководству «Начало работы» , то ознакомились с общим процессом разработки Data Connect . В этом руководстве вы найдете более подробную информацию о создании Swift SDK на основе вашей схемы и работе с клиентскими запросами и мутациями.

Подводя итог, чтобы использовать сгенерированные Swift SDK в клиентских приложениях, вам необходимо выполнить следующие предварительные действия:

  1. Добавьте Firebase в ваше приложение iOS .
  2. Чтобы использовать сгенерированный SDK, настройте его как зависимость в Xcode.

    В верхней панели навигации Xcode выберите Файл > Добавить зависимости пакета > Добавить локальный и выберите папку, содержащую сгенерированный Package.swift .

Затем:

  1. Разработайте схему своего приложения.
  2. Настройте генерацию SDK:

  3. Инициализируйте клиентский код и импортируйте библиотеки .

  4. Реализовать вызовы запросов и мутаций .

  5. Настройте и используйте эмулятор Data Connect и повторите попытку.

Создайте свой Swift SDK

Как и в большинстве проектов Firebase, работа над клиентским кодом Firebase Data Connect осуществляется в локальном каталоге проекта. Расширение Data Connect VS Code и Firebase CLI — важные локальные инструменты для генерации и управления клиентским кодом.

Параметры генерации SDK привязаны к нескольким записям в файле dataconnect.yaml , созданном при инициализации проекта.

Инициализировать генерацию SDK

В файле connector.yaml добавьте outputDir , package и (для веб-SDK) packageJsonDir .
connectorId: "movies"
generate:
  swiftSdk:
    outputDir: "../movies-generated"
    package: "Movies"

outputDir указывает, куда будет выводиться сгенерированный SDK. Если не указано, в качестве выходного каталога по умолчанию используется папка коннектора.

package указывает имя генерируемого пакета. Генератор создаст папку с именем пакета, содержащую Package.swift и сгенерированный код.

observablePublisher (необязательно) указывает издателя Observable для использования в ссылках запроса. Возможные значения: observableMacro (iOS 17+) и observableObject (до iOS 17). Значение по умолчанию, если оно не указано, — observableMacro .

Обновляйте SDK во время создания прототипа

При интерактивном прототипировании с помощью расширения Data Connect VS Code и его эмулятора Data Connect исходные файлы SDK автоматически генерируются и обновляются при изменении файлов .gql определяющих схемы, запросы и мутации. Это может быть полезной функцией в рабочих процессах горячей (пере)загрузки.

В других сценариях, если вы используете эмулятор Data Connect из Firebase CLI, вы можете настроить отслеживание обновлений .gql , а также автоматическое обновление исходных кодов SDK.

Кроме того, вы можете использовать CLI для повторной генерации SDK при каждом изменении файлов .gql:

firebase dataconnect:sdk:generate --watch

Создание SDK для интеграции и выпуска продуктов

В некоторых сценариях, например при подготовке исходных кодов проекта для отправки на CI-тесты, вы можете вызвать Firebase CLI для пакетного обновления.

В этих случаях используйте firebase dataconnect:sdk:generate .

Инициализируйте Data Connect iOS SDK

Инициализируйте свой экземпляр Data Connect используя информацию, которую вы использовали для настройки Data Connect (все доступно на вкладке Data Connect консоли Firebase ).

Получение экземпляра коннектора

Код для вашего коннектора будет сгенерирован эмулятором Data Connect . Если имя вашего коннектора — movies , а пакет — movies , как указано в connector.yaml , извлеките объект коннектора, вызвав:

let connector = DataConnect.moviesConnector

Реализация запросов и мутаций

С помощью объекта-коннектора вы можете выполнять запросы и мутации, как определено в исходном коде GraphQL. Предположим, что для вашего коннектора определены следующие операции:

mutation createMovie($title: String!, $releaseYear: Int!, $genre: String!, $rating: Int!) {
  movie_insert(data: {
    title: $title
    releaseYear: $releaseYear
    genre: $genre
    rating: $rating
  })
}

query getMovieByKey($key: Movie_Key!) {
  movie(key: $key) { id title }
}

query listMoviesByGenre($genre: String!) {
  movies(where: {genre: {eq: $genre}}) {
    id
    title
  }
}

Затем вы можете создать фильм следующим образом:

let mutationResult = try await connector.createMovieMutation.execute(
  title: "Empire Strikes Back",
  releaseYear: 1980,
  genre: "Sci-Fi",
  rating: 5)

print("Movie ID: \(mutationResult.data.movie_insert.id)")

Для получения фильма используется ссылка запроса. Все ссылки запроса являются издателями Observable. В зависимости от настроенного издателя (см. connector.yaml) , они либо поддерживают макрос @Observable (iOS 17+), либо реализуют протокол ObservableObject . Если не указано иное, по умолчанию используется макрос @Observable поддерживаемый в iOS 17+.

В представлении SwiftUI вы можете привязать результаты запроса, используя переменную published data ссылки запроса, и вызвать метод execute() запроса для обновления данных. Переменная data будет соответствовать форме данных, указанной в определении запроса GQL.

Все полученные результаты соответствуют протоколу Decodable . Если вы включили первичный ключ объекта в выборку GQL, объекты также будут Identifiable , что позволит использовать их в итераторах.

struct ListMovieView: View {
    @StateObject private var queryRef = connector.listMoviesByGenreQuery.ref(genre: "Sci-Fi")
    var body: some View {
        VStack {
            Button {
                Task {
                    do {
                        try await refresh()
                    } catch {
                        print("Failed to refresh: \(error)")
                    }
                }
            } label: {
                Text("Refresh")
            }
                // use the query results in a view
            ForEach(queryRef.data?.movies ?? [], id: \.self.id) { movie in
                    Text(movie.title)
                }
            }
    }
    @MainActor
    func refresh() async throws {
        _ = try await queryRef.execute()
    }
}

Запросы также поддерживают однократное выполнение.

let resultData = try await DataConnect.moviesConnector.listMoviesByGenreQuery.execute(genre: "Sci-Fi")

Создайте прототип и протестируйте свое приложение iOS

Клиенты инструмента используют локальный эмулятор

Вы можете использовать эмулятор Data Connect как из расширения Data Connect VS Code, так и из CLI.

Настройка приложения для подключения к эмулятору одинакова для обоих сценариев.

let connector = DataConnect.moviesConnector
// Connect to the emulator on "127.0.0.1:9399"
connector.useEmulator()

// (alternatively) if you're running your emulator on non-default port:
connector.useEmulator(port: 9999)

// Make calls from your app

Типы данных в SDK Data Connect

Сервер Data Connect поддерживает стандартные и пользовательские типы данных GraphQL. В SDK они представлены следующим образом.

Тип подключения данных Быстрый
Нить Нить
Инт Инт
Плавать Двойной
Булевое значение Бул
UUID UUID
Дата FirebaseDataConnect.LocalDate
Метка времени FirebaseCore.Timestamp
Int64 Int64
Любой FirebaseDataConnect.AnyValue