Нередко бывает так: устанавливаешь плагин в работающее приложение, делаешь всё по мануалу, а в результате приложение перестаёт собираться под iOS или Android 🥲 Такое чаще случается когда плагин тянет за собой зависимости под платформу. EDM4U конечно исправляет некоторые конфликты версий, но не все.
Вот такая же история получилась когда начал интегрировать LevelPlay в наши Unity игры. В редакторе всё красиво — ошибок нет, но когда делаешь сборку, то она не проходит. В консоли Unity написано из-за чего сломалась сборка (если Android). При сборке под iOS, проект может экспортироваться без ошибок, но в самом Xcode уже не собраться.
Капитанский совет: если ошибка не очевидна — сначала! погуглите, потом закидывайте в какой-нибудь ChatGPT или Claude. Сэкономите себе время.
Проблема
Так вот, последняя на текущий момент версия 9.3 LevelPlay для Unity (пакет Ads Mediation) не собирается если включить рекламную сетья Яндекса. Под Android ему не нравится версия аналитики AppMetrica, а под iOS показывает ошибку с AppMetricaLibraryAdapter, выглядит это примерно так при установке Pods:
[!] CocoaPods could not find compatible versions for pod "AppMetricaLibraryAdapter":
In Podfile:
AppMetricaLibraryAdapter (= 6.1.0)
IronSourceYandexAdapter (= 5.7.0.0) was resolved to 5.7.0.0, which depends on
YandexMobileAds (= 7.18.4) was resolved to 7.18.4, which depends on
AppMetricaLibraryAdapter (~> 5.14.0)
Соответственно, при сборке в Xcode будет примерно такая ошибка:
AppMetricaLibraryAdapter.AppMetricaLibraryAdapter.shared.unsafeMutableAddressor: AppMetricaLibraryAdapter.AppMetricaLibraryAdapter
Решение
Решается это откатом на предыдущие версии 🤷♂️ и патчем Podfile. В пакете AppMetrica, в папке Editor находим файл AppMetricaDependencies.xml и устанавливаем предыдущие версии:
<?xml version="1.0"?>
<dependencies>
<androidPackages>
<androidPackage spec="io.appmetrica.analytics:analytics:7.13.0"/>
<androidPackage spec="androidx.annotation:annotation:1.7.1"/>
</androidPackages>
<iosPods>
<iosPod name="AppMetricaAnalytics" version="5.14.0"/>
<iosPod name="AppMetricaLibraryAdapter" version="5.14.0"/>
</iosPods>
</dependencies>
Android сборка теперь работает. Для iOS надо ещё пропатчить Podfile и добавить в исключения AppMetricaLibraryAdapter. У меня это делается post-build скриптом, но можно и руками. Добавляем в файл цикл с проверкой:
post_install do |installer|
problematic_targets = ['AppMetricaLibraryAdapter']
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if problematic_targets.include?(target.name)
config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'NO'
end
end
end
end
Теперь и iOS сборка будет работать. Может это кому-то сэкономит время, как мне.
Самое интересное, что решение этой задачки я нашёл на гитхабе в багтрекере совсем другого проекта 😁 Но как оказалось, эта проблема есть и там.
И ещё новость: Unity закроет ironSource Ads Network, которую не так давно купила и вроде как она является (пока) частью платформы для медиации LevelPlay. Жаль, там неплохой eCPM был…
Нет комментариев