Установка и настройка iOS SDK

Adapty SDK включает два ключевых модуля для бесшовной интеграции в ваше мобильное приложение:

  • Core Adapty: основной SDK, без которого Adapty не будет работать в вашем приложении.
  • AdaptyUI: опциональный модуль, нужный при использовании Adapty Paywall Builder — удобного no-code инструмента для создания кросс-платформенных пейволов.

Хотите посмотреть, как Adapty SDK интегрируется в реальное приложение? Загляните в наши примеры приложений: там показана полная настройка, включая отображение пейволов, совершение покупок и другие базовые функции.

Для полного ознакомления с реализацией можете также посмотреть видео:

Требования

Хотя SDK технически поддерживает iOS 13.0+ для основного модуля, на практике требуется iOS 15.0+, поскольку:

  • Все возможности StoreKit 2 требуют iOS 15.0+
  • Модуль AdaptyUI работает только на iOS 15.0+

Установка SDK — это шаг 5 настройки Adapty. Прежде чем покупки заработают в вашем приложении, вам также нужно подключить приложение к сторам, а затем создать продукты, пейвол и плейсмент в дашборде Adapty. Гайд по быстрому старту описывает все необходимые шаги.

Установка Adapty SDK

Release

Активация модуля Adapty в Adapty SDK

Активируйте Adapty SDK в коде вашего приложения.

Adapty SDK нужно активировать только один раз в приложении.

Чтобы получить Public SDK Key:

  1. Откройте дашборд Adapty и перейдите в App settings → General.
  2. В разделе Api keys скопируйте Public SDK Key (не Secret Key).
  3. Замените "YOUR_PUBLIC_SDK_KEY" в коде на скопированный ключ.
  • Используйте Public SDK key для инициализации Adapty. Secret key предназначен только для серверного API.
  • SDK keys уникальны для каждого приложения, поэтому при наличии нескольких приложений убедитесь, что выбрали правильный ключ.

Теперь настройте пейволы в вашем приложении:

Активация модуля AdaptyUI в Adapty SDK

Если вы планируете использовать Paywall Builder и установили модуль AdaptyUI, вам также нужно активировать AdaptyUI.

В коде необходимо активировать основной модуль Adapty до активации AdaptyUI.

Опционально, при активации AdaptyUI, вы можете переопределить настройки кеширования по умолчанию для пейволов.

Дополнительная настройка

Логирование

Настройка системы логирования

Adapty логирует ошибки и другую важную информацию, чтобы помочь вам разобраться в происходящем. Доступны следующие уровни:

УровеньОписание
errorЛогируются только ошибки
warnЛогируются ошибки и сообщения от SDK, которые не вызывают критических ошибок, но заслуживают внимания
infoЛогируются ошибки, предупреждения и различные информационные сообщения
verboseЛогируется любая дополнительная информация, которая может быть полезна при отладке: вызовы функций, запросы к API и т.д.
 let configurationBuilder = AdaptyConfiguration
         .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY") 
         .with(logLevel: .verbose) // recommended for development

Перенаправление сообщений системы логирования

Если вам нужно отправлять лог-сообщения Adapty в вашу систему или сохранять их в файл, используйте метод setLogHandler и реализуйте в нём собственную логику логирования. Этот обработчик получает записи логов с содержимым сообщения и уровнем серьёзности.

Adapty.setLogHandler { record in
    writeToLocalFile("Adapty \(record.level): \(record.message)")
}

Политики обработки данных

Adapty не хранит персональные данные ваших пользователей, если вы явно их не передаёте, однако вы можете настроить дополнительные политики безопасности данных для соответствия требованиям сторов или законодательства отдельных стран.

Отключение сбора и передачи IDFA

При активации модуля Adapty установите idfaCollectionDisabled в true, чтобы отключить сбор и передачу IDFA.

Используйте этот параметр для соответствия правилам App Store Review Guidelines или чтобы избежать показа запроса App Tracking Transparency, когда IDFA не нужен вашему приложению. Значение по умолчанию: false. Подробнее о сборе IDFA — в разделе Интеграция аналитики.

let configurationBuilder =
    AdaptyConfiguration
        .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
        .with(idfaCollectionDisabled: true)

Отключение сбора и передачи IP-адреса

При активации модуля Adapty установите ipAddressCollectionDisabled в true, чтобы отключить сбор и передачу IP-адреса пользователя. Значение по умолчанию: false.

Используйте этот параметр для повышения конфиденциальности пользователей, соответствия региональным требованиям по защите данных (например, GDPR или CCPA) или для сокращения излишнего сбора данных, когда функции на основе IP не нужны вашему приложению.

let configurationBuilder =
    AdaptyConfiguration
        .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
        .with(ipAddressCollectionDisabled: true)

Настройка кеширования медиа для пейволов в AdaptyUI

Конфигурация AdaptyUI является опциональной. Вы можете активировать модуль AdaptyUI без конфига. Однако если вы используете конфиг, все параметры обязательны.


// Configure AdaptyUI
        let adaptyUIConfiguration = AdaptyUI.Configuration(
            mediaCacheConfiguration: .init(
                memoryStorageTotalCostLimit: 100 * 1024 * 1024,
                memoryStorageCountLimit: .max,
                diskStorageSizeLimit: 100 * 1024 * 1024
            )
        )

        // Activate AdaptyUI
        AdaptyUI.activate(configuration: adaptyUIConfiguration)

Параметры:

ПараметрНаличиеОписание
memoryStorageTotalCostLimitобязательныйОбщий лимит стоимости хранилища в байтах.
memoryStorageCountLimitобязательныйЛимит количества элементов в памяти хранилища.
diskStorageSizeLimitобязательныйЛимит размера файлов на диске в байтах. 0 означает отсутствие ограничений.

Поведение при завершении транзакций

Эта функция доступна начиная с версии SDK 3.12.0.

По умолчанию Adapty автоматически завершает транзакции после успешной валидации. Однако если вам нужна расширенная валидация транзакций (например, серверная проверка чека, обнаружение мошенничества или собственная бизнес-логика), вы можете настроить SDK на ручное завершение транзакций.

let configurationBuilder = AdaptyConfiguration
    .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
    .with(transactionsFinishBehavior: .manual) // .auto is the default

Подробнее о завершении транзакций — в гайде.

Очистка данных при восстановлении из резервной копии

Когда clearDataOnBackup установлен в true, SDK обнаруживает восстановление приложения из резервной копии iCloud и удаляет все локально сохранённые данные SDK, включая кешированную информацию профиля, данные продуктов и пейволы. После этого SDK инициализируется с чистого состояния. Значение по умолчанию: false.

Удаляется только локальный кеш SDK. История транзакций с Apple и данные пользователя на серверах Adapty остаются без изменений.

let configurationBuilder = AdaptyConfiguration
    .builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
    .with(clearDataOnBackup: true) // default – false

Устранение неполадок

Ошибка конкурентности Swift 6 при использовании Tuist

При сборке с помощью Tuist могут возникать ошибки строгой проверки конкурентности Swift 6. Типичные симптомы — несовпадение атрибутов @Sendable в AdaptyUIBuilderLogic или аналогичные ошибки Sendability при кросс-модульном взаимодействии. Это происходит потому, что Tuist генерирует проекты Xcode из пакетов SPM, но не сохраняет настройку swift-tools-version: 6.0. В результате одни таргеты Adapty (Adapty, AdaptyUI, AdaptyUIBuilder) компилируются по правилам Swift 5, а другие — Swift 6, что вызывает несоответствия @Sendable между модулями.

Решение: обновитесь до Adapty SDK 3.15.5 или более поздней версии — это устраняет проблему независимо от смешанных версий Swift.

Обходной путь: если обновление невозможно, явно укажите Swift 6 для всех трёх таргетов Adapty в конфигурации Tuist:

targetSettings: [
  "Adapty": .init().swiftVersion("6"),
  "AdaptyUI": .init().swiftVersion("6"),
  "AdaptyUIBuilder": .init().swiftVersion("6"),
]

Ошибки сборки Swift 6 из-за переопределения SWIFT_VERSION в Podfile

При сборке для iOS с использованием CocoaPods могут возникать ошибки компиляции Swift 6 в pod-таргетах Adapty. Типичные симптомы: несоответствия @Sendable в AdaptyUIBuilderLogic, отсутствие соответствия Sendable у типов Adapty или ошибки изоляции акторов. В подах Adapty объявлено s.swift_version = '6.0', и для их сборки требуется Swift 6. Код вашего приложения может оставаться на Swift 5 — Swift 6 нужен только для целей подов Adapty (Adapty, AdaptyUI, AdaptyUIBuilder, AdaptyLogger).

Самая распространённая причина проблемы — хук post_install в Podfile, который перезаписывает SWIFT_VERSION для всех целей подов:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '5.9'
    end
  end
end

Исправление: исключите pod-таргеты Adapty из переопределения:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    next if %w[Adapty AdaptyUI AdaptyUIBuilder AdaptyLogger].include?(target.name)
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '5.9'
    end
  end
end

Затем выполните pod install и пересоберите проект.

Для проверки откройте Pods.xcodeproj, выберите pod-таргет AdaptyBuild SettingsSwift Language Version. Должно быть указано Swift 6.