Как добавить Life Activity в существующий проект. Часть I

Live Activity был показан Apple на презентации iOS 16 и нового iPhone с Dynamic Island. Обновление доступно только для тех, кто обновил iOS до 16.1. 

Меня зовут Азиз, я iOS-разработчик в inDrive. В статье расскажу, как мы добавляли Live Activity в наше iOS-приложение. Постараюсь ответить на все вопросы, которые возникли у нас в процессе разработки.

40965e05f680c846fdc57d583ada969c.png

Зачем вообще добавлять Live Activity?  

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

Простой пример работы Live Activity. Допустим, вы заказали некую услугу. Помимо общего статуса «К вам едет заказ», вам на заблокированном экране показывается виджет со всей необходимой информацией: статус заказа, время доставки, информация о курьере/водителе и так далее.

Если у вас iPhone 14 Pro или 14 Pro Max, вам доступна функция Dynamic IslandЕсли у вас iPhone 14 Pro или 14 Pro Max, вам доступна функция Dynamic IslandПри нажатии на фичу появляется информационный блок. В нашем случае это статус поездки, сколько до вас ехать водителю, номер и цвет машиныПри нажатии на фичу появляется информационный блок. В нашем случае это статус поездки, сколько до вас ехать водителю, номер и цвет машины

Добавление в продакшн

Есть много статей, описывающих процесс добавления Live Activity в проект. За единственным исключением — ни одна статья не делится опытом добавления фичи в настоящий проект. Об этом и хочу рассказать в статье. 

Наш процесс начался с демонстрации Live Activity бизнесу. Нужно было «продать» эту идею. Мы создали демо-приложение по мотивам статей и официальной документации. Получилось достаточно наглядно продемонстрировать основную идею. 

То самое демоТо самое демо

После недолгих согласований мы начали внедрять Live Activity в проект inDrive. Организовали инициативную группу, в которой, помимо меня, было еще два iOS-разработчика.

При интеграции в боевой проект возник ряд проблем, с которыми надо было что-то делать:  

  1. XcodeGen и первый запуск — как добавить в project.yml новый target, да еще и с поддержкой Live Activity. 

  2. Полноценное понимание, как работают Push Notification с Live Activity. 

  3. У нас своя дизайн-система, как использовать ее в Live Activity.

  4. Как подключить переводы.

  5. Как связать UDF с Live Activity.

XcodeGen и первый запуск

В нашем проекте мы используем XcodeGen для генерации *.xcodeproj файла. В этом был небольшой челендж — ранее в проекте виджеты мы не использовали. Нам пришлось добавлять определенные темплейты в project.yml основного модуля нашего приложения. В основном таргете в info надо было добавить флаг:  

NSSupportsLiveActivities: true

Затем необходимо создать темплейт для самого Live Activity виджет-тагрета:

LiveActivity:
  type: app-extension
  platform: iOS
  info:
    path: "${target_name}/SupportingFiles/Info.plist"
    properties:
      CFBundleDisplayName: ${target_name}
      CFBundleShortVersionString: *cfBundleShortVersionString
      NSExtension:
        NSExtensionPointIdentifier: "com.apple.widgetkit-extension"
  settings:
    base:
      TARGETED_DEVICE_FAMILY: "$(inherited)"
      PRODUCT_BUNDLE_IDENTIFIER: ${bundleId}
    configs:
      debug:
        PROVISIONING_PROFILE_SPECIFIER: "match Development ${bundleId}"
        CODE_SIGN_IDENTITY: ""
        DEBUG_INFORMATION_FORMAT: ""
      release:
        PROVISIONING_PROFILE_SPECIFIER: "match AppStore ${bundleId}"
        CODE_SIGN_IDENTITY: ""
  dependencies:
    - framework: SwiftUI.framework
      implicit: true
    - framework: WidgetKit.framework
      implicit: true

И не забыть в основном таргете:

dependencies:
  - target: LiveActivity

С указанием соответствующего bundleId, который предварительно надо не забыть привязать к Provision Profile (тоже отдельный для этого бандла).

После всех манипуляций и заветного:  make finished successfully

© Habrahabr.ru