Я — Денис, 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.

Untitled

Я копнул вглубь библиотеки 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+
Ktor 2.1.2+.
Coroutines 1.7.0+.
Gradle 6.8.3 - 8.5

1.8.0

Kotlin 1.7.20+
Ktor 2.1.2+.
Coroutines 1.6.4+.
Gradle 6.7.1 - 7.6.1

1.7.0

Kotlin 1.7.20-1.8.10
Ktor 2.1.2+.
Coroutines 1.6.4+.
Gradle 6.7.1 - 7.6.1

Пришлось просматривать коммиты в библиотеке, чтобы найти нужную версию 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.

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