Я — Денис, Middle Android-разработчик в «Black Bricks». В нашем KMP проекте мы используем Realm для работы с БД. Всё шло плавно пока мы разрабатывали проект на машинах под актуальными версиями macOS. Но после первого большого внешнего тестирования выяснилось, что многие пользователи сидят на macOS 10.13-11.6. На этих версиях наш проект падал с ошибкой: librealmc.dylib was prebuild for macOS 12.7
.
Сперва была загвоздка найти машину на старой macOS. Виртуальную машину просто так на M-чипах не поставить, так как 10.13-11.6 не поддерживает ARM. Но всё же удалось найти MacBook Air на 11.6. Я попробовал собрать билд в Android Studio — те-же ошибки, что указал выше. Погуглив, наткнулся на карточку в JIRA.
Я копнул вглубь библиотеки realm-kotlin, она зависит от realm-core. В которой, в свою очередь есть интересный блок кода:
let platforms: [SupportedPlatform] = [
.macOS(.v12_7),
.iOS(.v12),
.tvOS(.v12),
.watchOS(.v4)
]
Новые версии Realm для KMP используют realm-core, где поддерживаемая версия macOS от 12.7.
1.16.0 |
Kotlin 1.9.0+ |
1.8.0 |
Kotlin 1.7.20+ |
1.7.0 |
Kotlin 1.7.20-1.8.10 |
Пришлось просматривать коммиты в библиотеке, чтобы найти нужную версию kotlin-core, которая использовала бы realm-core с поддерживаемой macOS 10.13+. Для этого подошла 1.7.0.
Из-за этого пришлось понизить Kotlin и некоторые зависимости для совместимости с Realm 1.7.0, что стоит дорого для большого проекта на этапе релиза.
Ради интереса попробовал запустить опенсорсный KMP-проект с Room. Проект запустился на старых macOS без проблем и даже с Kotlin 2.0. Поэтому, если цель — поддерживать старые версии macOS и думаете, стоит ли выбрать Realm или Room, советую Room.
Спасибо за чтение!
Денис Попков
Middle Android разработчик в «Black Bricks»
Если вы нашли неточности/ошибки в статье или просто хотите дополнить её своим мнением — то прошу в комментарии! Или можете написать мне в Telegram.