Для этого нам даже не понадобится писать код (ну почти). 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 вы получите следующую структуру:
Далее нам нужно преобразовать файл Root.plist из-за бага Xcode, тянущегося едва ли не с 7 версии в формат Info.plist (правой кнопкой по содержимому — выбираем формат Info.plist).
После этого необходимо добавить следующие строки:
PSChildPaneSpecifier — нужен для отображения нашего списка зависимостей (лицензий).
Title нужно передать то, как нам хочется видеть этот пункт в списке настроек.
Filename — тут нужно использовать созданный ранее файл.
Отображение в списке настроек
Если всё выполнено верно, то вы получите вид, как на иллюстрации ниже. Для этого перейдите в стандартное приложение Settings на телефоне, после чего найдите ваше приложение.
Конечно, возможности Settings.bundle намного шире представленных в этой статье. Моя же цель была в другом: показать, как можно использовать стандартные инструменты для того, чтобы решить вопрос, связанный, с казалось бы, сторонним решением типа CocoaPods.
Ресурсы для подготовки этой статьи
Туториал по использованию Settings bundle.
Официальная документация Apple.
Сам плагин CocoaPods.
Если вы нашли что-то полезное для себя, то подписывайтесь на мой канал, тут больше интересных историй и подходов.