Как добавить список лицензий и благодарностей CocoaPods и при чём тут Settings.Bundle?
Victor
Для этого даже не понадобится писать код (ну почти). CocoaPods по мнению многих доживает свои славные времена, ведь развитие и распространение SPM (Swift Package Manager) продолжает набирать обороты. Но для тех, кто из вас до сих пор использует CocoaPods в проде, эта статья может оказаться актуальной.
В своих проектах я всё ещё использую CocoaPods и задался вопросом, как же отобразить список лицензий. И для сохранения авторских прав, и в качестве благодарности.
Для этого нам понадобится связка плагина CocoaPods и Xcode.
Прежде чем приступить к управлению 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 вы получите следующую структуру:

Далее нам нужно преобразовать файл Root.plist из-за бага Xcode, тянущегося едва ли не с 7 версии в формат Info.plist.
После этого необходимо добавить следующие строки:

PSChildPaneSpecifier — нужен для отображения нашего списка зависимостей (лицензий).
В качестве title нужно передать то, как нам хочется видеть этот пункт в списке настроек.
Отображение в списке настроек
Если всё выполнено верно, то вы получите вид, как на иллюстрации ниже.

Конечно, возможности Settings.bundle намного шире представленных в этой статье. Моя же цель была в другом: показать, как можно использовать стандартные инструменты для того, чтобы решить вопрос, связанный, с казалось бы, сторонним решением типа CocoaPods.
Ресурсы для подготовки этой статьи
- Туториал по использованию Settings bundle.
- Официальная документация Apple.
- Плагин CocoaPods.
А про разработку можно прочитать в моём авторском канале.
