Как добавить список лицензий и благодарностей CocoaPods и при чём тут Settings.Bundle?
Как добавить список лицензий и благодарностей CocoaPods и при чём тут Settings.Bundle?

Для этого нам даже не понадобится писать код (ну почти). CocoaPods по мнению многих доживает свои славные времена, ведь развитие и распространение SPM (Swift Package Manager) продолжает набирать обороты. Но для тех, кто из вас до сих пор использует CocoaPods в проде, эта статья может оказаться актуальной.

В проектах всё ещё часто используется CocoaPods, и один из полезных и необходимых пунктов при разработке приложения с использованием опенсорсных решений — отображение списка лицензий. И для сохранения авторских прав, и в качестве благодарности авторам.

Для этого нам понадобится связка плагина CocoaPods и Xcode.

Прежде чем приступить к управлению Settings bundle, давайте вкратце рассмотрим концепцию.

Settings bundle

Settings bundle или же пакет настроек рассматривается как ресурс приложения. Каждый раз, когда вы собираете свой проект, Xcode копирует пакет Settings в пакет приложения, а приложение iOS Settings отображает настройки на основе этого бандла.

Следующая диаграмма иллюстрирует этот процесс, когда вы собираете свой проект в Xcode.

Диаграмма процесса сборки и копирования ресурсов в пакет приложения
Диаграмма процесса сборки и копирования ресурсов в пакет приложения

Поняв эту концепцию, вы в будущем сможете использовать этот принцип для расширения Settings bundle для своих приложений.

CocoaPods Acknowledgements

Оказывается CocoaPods задумывались об этом раньше и для этого добавили собственный плагин с названием из заголовка.

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

  • Settings.bundle compatible plist - этот формат поддерживается большим количеством pods и работает с Settings.app от Apple.

  • Full Podspec metadata plist - Этот формат предоставляет приложению больше информации, позволяя проводить более глубокую проверку, в настоящее время только CPDAcknowledgements работает с этим форматом.

Установка

Для установки с помощью gem install cocoapods-acknowledgements вам необходимо добавить плагин 'cocoapods-acknowledgements' в ваш Podfile.

Примеры

Если вы планируете сами рисовать интерфейс со списком зависимостей:

plugin 'cocoapods-acknowledgements'

Для встраивания в Settings.bundle, о котором речь пойдет ниже:

plugin 'cocoapods-acknowledgements', :settings_bundle => true

После выполнения этой команды (например, после pod update) будет сгенерирован файл формата:

Pods-YOUR_TARGET-settings-metadata

Этот файл нам и нужен! Для удобства советую его переименовать, например, в Pods-metadata. После формирования Settings bundle с помощью Xcode вы получите следующую структуру:

Пример структуры Settings.Bundle
Пример структуры Settings.Bundle

Далее нам нужно преобразовать файл Root.plist из-за бага Xcode, тянущегося едва ли не с 7 версии в формат Info.plist (правой кнопкой по содержимому — выбираем формат Info.plist).

После этого необходимо добавить следующие строки:

Пример изменённого Settings.bundle
Пример изменённого Settings.bundle
  • PSChildPaneSpecifier — нужен для отображения нашего списка зависимостей (лицензий).

  • Title нужно передать то, как нам хочется видеть этот пункт в списке настроек.

  • Filename — тут нужно использовать созданный ранее файл.


Отображение в списке настроек

Если всё выполнено верно, то вы получите вид, как на иллюстрации ниже. Для этого перейдите в стандартное приложение Settings на телефоне, после чего найдите ваше приложение.

Результат нашей работы
Результат нашей работы

Конечно, возможности Settings.bundle намного шире представленных в этой статье. Моя же цель была в другом: показать, как можно использовать стандартные инструменты для того, чтобы решить вопрос, связанный, с казалось бы, сторонним решением типа CocoaPods.


Ресурсы для подготовки этой статьи

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

Авторский канал об iOS-разработке
Авторский канал об iOS-разработке

Комментарии (0)