Как я исправил краш Realm в KMP Desktop на старых версиях macOS

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

Спасибо за чтение!

dcddba896ec4c949dec4aa0bb59a0a4b.jpgДенис Попков

Middle Android разработчик в «Black Bricks»

Если вы нашли неточности/ошибки в статье или просто хотите дополнить её своим мнением — то прошу в комментарии! Или можете написать мне в Telegram — t.me/MolodoyDenis.

© Habrahabr.ru