Добавлен Room! :)
Ранее я уже делился статьей про Delight SQL Viewer — библиотеку, позволяющую отлаживать SQLDelight-базу данных напрямую внутри вашего Kotlin Multiplatform-приложения. Однако в одном из наших внутренних проектов используется Room Multiplatform и хотелось иметь возможность отладки БД и в нем. Так и появилась вторая версия библиотеки, которая теперь поддерживает и Room, и SQLDelight.
Что делает библиотека?
Позволяет просматривать, добавлять, редактировать и удалять записи в базе через удобный UI прямо в приложении.
Автоматически добавляет иконку-ярлык для быстрого запуска (Android и iOS).
На Desktop ярлыки не поддерживаются. Для запуска интерфейса используйте обычную кнопку или меню в вашем UI.
Легко отключается в продакшен-сборках — можно либо не вызывать init, либо подключать stub-модуль вместо основной библиотеки.
Как использовать?
Зависимости (shared/build.gradle.kts)
val isRelease = /* Ваша логика определения релизной сборки */
dependencies {
if (isRelease) {
// В релизе – stub, чтобы не вшивать весь отладочный UI.
api("ru.bartwell.delightsqlviewer:stub:2.0.0")
} else {
// В debug – полная функциональность.
api("ru.bartwell.delightsqlviewer:runtime:2.0.0")
api("ru.bartwell.delightsqlviewer:core:2.0.0")
// Выберите, что используете:
api("ru.bartwell.delightsqlviewer:sqldelight-adapter:2.0.0")
// или
// api("ru.bartwell.delightsqlviewer:room-adapter:2.0.0")
}
}
Инициализация
SQLDelight (Android):
DelightSqlViewer.init( object : SqlDelightEnvironmentProvider() { override fun getDriver() = sqlDelightDriver override fun getContext() = context } )
Room (Android):
DelightSqlViewer.init( object : RoomEnvironmentProvider() { override fun getDriver() = roomDatabase override fun getContext() = context } )
iOS (пример для SQLDelight):
let provider = SqlDelightEnvironmentProvider(driver: sqlDriver) DelightSqlViewer.shared.doInit(provider: provider, isShortcutEnabled: true)
Аналогично и для RoomEnvironmentProvider.
Также, чтобы ярлык корректно работал на iOS, в вашем AppDelegate нужно переопределить методы обработки ярлыков, например:
class AppDelegate: NSObject, UIApplicationDelegate { func application( _ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions ) -> UISceneConfiguration { return ShortcutActionHandler.shared.getConfiguration(session: connectingSceneSession) } }
Или вызовите DelightSqlViewer.shared.launch() в обработчике вашего Shortcut.
Desktop:
DelightSqlViewer.init( object : SqlDelightEnvironmentProvider() { override fun getDriver() = sqlDelightDriver } )
Аналогично и для RoomEnvironmentProvider.
Запуск
После инициализации вызов DelightSqlViewer.launch() откроет интерфейс просмотра и редактирования (на Android/iOS можно также запустить через ярлык при долгом тапе на иконку приложения).
Button(onClick = { DelightSqlViewer.launch() }) {
Text("Open DB Viewer")
}
Итог
Теперь Delight SQL Viewer покрывает оба основных способа хранения данных в мультиплатформенных проектах — SQLDelight и Room Multiplatform. Если нужно быстро проверить содержимое вашей БД или вручную поправить что-то прямо во время тестирования, эта библиотека может сэкономить кучу времени. Ну и, конечно, легко «прячется» в релизе, чтобы никакого отладочного UI не оставалось.
Ссылка на репозиторий: https://github.com/bartwell/delight-sql-viewer
Буду рад фидбэку и вопросам!