--- a/gradle/libs.versions.toml	Tue Apr 22 14:35:57 2025 -0400
+++ b/gradle/libs.versions.toml	Tue Apr 22 16:26:18 2025 -0400
@@ -32,7 +32,8 @@
 androidx-navigation = "2.8.9"
 androidx-compose-bom = "2025.04.00"
 androidx-lifecycle = "2.8.7"
-geekdroid = "geekttrss-1.6.2"
+org-jetbrains-androidx-lifecycle = "2.8.4"
+geekdroid = "geekttrss-1.6.7"
 
 
 [libraries]
@@ -47,6 +48,7 @@
 
 androidx-lifecycle-viewmodel = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref="androidx-lifecycle" }
 androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" }
+org-jetbrains-androidx-lifecycle-viewmodel = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel", version.ref = "org-jetbrains-androidx-lifecycle" }
 androidx-activity = { module = "androidx.activity:activity-ktx", version.ref="androidx-activity" }
 androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref="androidx-activity" }
 
--- a/ui/common/build.gradle.kts	Tue Apr 22 14:35:57 2025 -0400
+++ b/ui/common/build.gradle.kts	Tue Apr 22 16:26:18 2025 -0400
@@ -19,9 +19,11 @@
  * You should have received a copy of the GNU General Public License
  * along with AboutOss.  If not, see <http://www.gnu.org/licenses/>.
  */
+import org.jetbrains.kotlin.gradle.dsl.JvmTarget
+
 plugins {
     id("com.android.library")
-    kotlin("android")
+    kotlin("multiplatform")
     id("com.geekorum.build.source-license-checker")
     `maven-publish`
 }
@@ -29,6 +31,39 @@
 group = "com.geekorum.aboutoss"
 version = "0.1.0"
 
+kotlin {
+    androidTarget {
+        compilerOptions {
+            jvmTarget.set(JvmTarget.JVM_17)
+        }
+    }
+
+    jvm("desktop")
+
+    listOf(
+        iosX64(),
+        iosArm64(),
+        iosSimulatorArm64(),
+    ).forEach { iosTarget ->
+        iosTarget.binaries.framework {
+            baseName = "aboutoss-core"
+            isStatic = true
+        }
+    }
+
+    sourceSets {
+        commonMain.dependencies {
+            implementation(project(":core"))
+            api(libs.org.jetbrains.androidx.lifecycle.viewmodel)
+        }
+
+        androidMain.dependencies {
+            api(libs.androidx.activity)
+            api(libs.geekdroid)
+        }
+    }
+}
+
 android {
     namespace = "com.geekorum.aboutoss.ui.common"
     compileSdk = 35
@@ -55,11 +90,8 @@
         }
     }
     compileOptions {
-        sourceCompatibility = JavaVersion.VERSION_1_8
-        targetCompatibility = JavaVersion.VERSION_1_8
-    }
-    kotlinOptions {
-        jvmTarget = "1.8"
+        sourceCompatibility = JavaVersion.VERSION_17
+        targetCompatibility = JavaVersion.VERSION_17
     }
 
     publishing {
@@ -71,15 +103,6 @@
 }
 
 dependencies {
-    implementation(project(":core"))
-    api(libs.appcompat)
-    implementation(libs.androidx.lifecycle.viewmodel)
-    implementation(libs.androidx.activity)
-    api(libs.geekdroid) {
-        //TODO get rid of dagger platform in geekdroid
-        exclude("com.google.dagger", "dagger-platform")
-    }
-
     testImplementation(libs.junit)
     androidTestImplementation(libs.androidx.test.ext.junit)
     androidTestImplementation(libs.espresso.core)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/common/src/androidMain/kotlin/com/geekorum/aboutoss/ui/common/AndroidBrowserLauncher.kt	Tue Apr 22 16:26:18 2025 -0400
@@ -0,0 +1,48 @@
+/*
+ * AboutOss is an utility library to retrieve and display
+ * opensource licenses in Android applications.
+ *
+ * Copyright (C) 2023-2025 by Frederic-Charles Barthelery.
+ *
+ * This file is part of AboutOss.
+ *
+ * AboutOss is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * AboutOss is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with AboutOss.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.geekorum.aboutoss.ui.common
+
+import android.content.Context
+import androidx.core.net.toUri
+import com.geekorum.geekdroid.network.BrowserLauncher as GeekdroidBrowserLauncher
+
+class AndroidBrowserLauncher(
+    private val context: Context,
+    private val delegate: GeekdroidBrowserLauncher
+) : BrowserLauncher {
+    override fun warmUp() {
+        delegate.warmUp(null)
+    }
+
+    override fun launchUrl(link: String) {
+        delegate.launchUrl(context, link.toUri(), null as GeekdroidBrowserLauncher.LaunchCustomizer?)
+    }
+
+    override fun mayLaunchUrl(vararg uris: String) {
+        val asUris = uris.map { it.toUri() }.toTypedArray()
+        delegate.mayLaunchUrl(*asUris)
+    }
+
+    override fun shutdown() {
+        delegate.shutdown()
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/common/src/androidMain/kotlin/com/geekorum/aboutoss/ui/common/BaseOpensourceLicenseActivity.kt	Tue Apr 22 16:26:18 2025 -0400
@@ -0,0 +1,29 @@
+/*
+ * AboutOss is an utility library to retrieve and display
+ * opensource licenses in Android applications.
+ *
+ * Copyright (C) 2023-2025 by Frederic-Charles Barthelery.
+ *
+ * This file is part of AboutOss.
+ *
+ * AboutOss is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * AboutOss is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with AboutOss.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.geekorum.aboutoss.ui.common
+
+import androidx.activity.ComponentActivity
+
+abstract class BaseOpensourceLicenseActivity : ComponentActivity() {
+    protected abstract val viewModel: OpenSourceLicensesViewModel
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/common/src/androidMain/kotlin/com/geekorum/aboutoss/ui/common/OpenSourceLicensesViewModel.android.kt	Tue Apr 22 16:26:18 2025 -0400
@@ -0,0 +1,41 @@
+/*
+ * AboutOss is an utility library to retrieve and display
+ * opensource licenses in Android applications.
+ *
+ * Copyright (C) 2023-2025 by Frederic-Charles Barthelery.
+ *
+ * This file is part of AboutOss.
+ *
+ * AboutOss is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * AboutOss is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with AboutOss.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.geekorum.aboutoss.ui.common
+
+import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion.APPLICATION_KEY
+import androidx.lifecycle.viewmodel.initializer
+import androidx.lifecycle.viewmodel.viewModelFactory
+import com.geekorum.aboutoss.core.LicenseInfoRepository
+import com.geekorum.geekdroid.network.BrowserLauncher as GeekdroidBrowserLauncher
+
+
+fun OpenSourceLicensesViewModel.Companion.Factory(licenseInfoRepository: LicenseInfoRepository) = viewModelFactory {
+    initializer {
+        val application = this[APPLICATION_KEY]!!
+        val geekdroidBrowserLauncher = GeekdroidBrowserLauncher(application, application.packageManager)
+        val browserLauncher = AndroidBrowserLauncher(application, geekdroidBrowserLauncher)
+        OpenSourceLicensesViewModel(
+            licenseInfoRepository,
+            browserLauncher
+        )
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/common/src/androidMain/res/values/strings.xml	Tue Apr 22 16:26:18 2025 -0400
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+    AboutOss is an utility library to retrieve and display
+    opensource licenses in Android applications.
+
+    Copyright (C) 2023-2025 by Frederic-Charles Barthelery.
+
+    This file is part of AboutOss.
+
+    AboutOss is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    AboutOss is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with AboutOss.  If not, see <http://www.gnu.org/licenses/>.
+
+-->
+<resources>
+    <string name="title_oss_licenses">Opensource Licenses</string>
+</resources>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/common/src/commonMain/kotlin/BrowserLauncher.kt	Tue Apr 22 16:26:18 2025 -0400
@@ -0,0 +1,36 @@
+/*
+ * AboutOss is an utility library to retrieve and display
+ * opensource licenses in Android applications.
+ *
+ * Copyright (C) 2023-2025 by Frederic-Charles Barthelery.
+ *
+ * This file is part of AboutOss.
+ *
+ * AboutOss is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * AboutOss is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with AboutOss.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.geekorum.aboutoss.ui.common
+
+
+/**
+ * Interface to be able to launch a browser to display a link
+ */
+interface BrowserLauncher {
+    fun warmUp()
+
+    fun launchUrl(link: String)
+
+    fun mayLaunchUrl(vararg uris: String)
+
+    fun shutdown()
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/common/src/commonMain/kotlin/OpenSourceLicensesViewModel.kt	Tue Apr 22 16:26:18 2025 -0400
@@ -0,0 +1,66 @@
+/*
+ * AboutOss is an utility library to retrieve and display
+ * opensource licenses in Android applications.
+ *
+ * Copyright (C) 2023-2025 by Frederic-Charles Barthelery.
+ *
+ * This file is part of AboutOss.
+ *
+ * AboutOss is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * AboutOss is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with AboutOss.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.geekorum.aboutoss.ui.common
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.geekorum.aboutoss.core.LicenseInfoRepository
+import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.stateIn
+
+/**
+ * Manage opensource license information and allow to display them in an UI
+ */
+class OpenSourceLicensesViewModel(
+    private val licenseInfoRepository: LicenseInfoRepository,
+    private val browserLauncher: BrowserLauncher,
+) : ViewModel() {
+    init {
+        browserLauncher.warmUp()
+    }
+
+    private val licensesInfo = flow {
+        emit(licenseInfoRepository.getLicensesInfo())
+    }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyMap())
+
+    val dependenciesList = licensesInfo.map { licensesInfo ->
+        licensesInfo.keys.sortedBy { it.lowercase() }
+    }
+
+    fun getLicenseDependency(dependency: String) = flow {
+        emit(licenseInfoRepository.getLicenseFor(dependency))
+    }
+
+    fun openLinkInBrowser(link: String) {
+        browserLauncher.launchUrl(link)
+    }
+
+    fun mayLaunchUrl(vararg uris: String) = browserLauncher.mayLaunchUrl(*uris)
+
+    override fun onCleared() {
+        browserLauncher.shutdown()
+    }
+
+    companion object
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/common/src/iosMain/kotlin/IosBrowserLauncher.kt	Tue Apr 22 16:26:18 2025 -0400
@@ -0,0 +1,42 @@
+/*
+ * AboutOss is an utility library to retrieve and display
+ * opensource licenses in Android applications.
+ *
+ * Copyright (C) 2023-2025 by Frederic-Charles Barthelery.
+ *
+ * This file is part of AboutOss.
+ *
+ * AboutOss is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * AboutOss is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with AboutOss.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.geekorum.aboutoss.ui.common
+
+import platform.Foundation.NSURL.Companion.URLWithString
+import platform.UIKit.UIApplication
+
+
+class IosBrowserLauncher : BrowserLauncher {
+    override fun warmUp() {}
+
+    override fun launchUrl(link: String) {
+        UIApplication.sharedApplication.openURL(
+            URLWithString(link)!!,
+            options = emptyMap<Any?, Any>(),
+            completionHandler = {}
+        )
+    }
+
+    override fun mayLaunchUrl(vararg uris: String) {}
+
+    override fun shutdown() {}
+}
\ No newline at end of file
--- a/ui/common/src/main/java/com/geekorum/aboutoss/ui/common/BaseOpensourceLicenseActivity.kt	Tue Apr 22 14:35:57 2025 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * AboutOss is an utility library to retrieve and display
- * opensource licenses in Android applications.
- *
- * Copyright (C) 2023-2025 by Frederic-Charles Barthelery.
- *
- * This file is part of AboutOss.
- *
- * AboutOss is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * AboutOss is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with AboutOss.  If not, see <http://www.gnu.org/licenses/>.
- */
-package com.geekorum.aboutoss.ui.common
-
-import androidx.activity.viewModels
-import androidx.appcompat.app.AppCompatActivity
-
-abstract class BaseOpensourceLicenseActivity : AppCompatActivity() {
-    protected open val viewModel: OpenSourceLicensesViewModel by viewModels(
-        factoryProducer = {
-            OpenSourceLicensesViewModel.Factory
-        }
-    )
-}
\ No newline at end of file
--- a/ui/common/src/main/java/com/geekorum/aboutoss/ui/common/OpenSourceLicensesViewModel.kt	Tue Apr 22 14:35:57 2025 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/*
- * AboutOss is an utility library to retrieve and display
- * opensource licenses in Android applications.
- *
- * Copyright (C) 2023-2025 by Frederic-Charles Barthelery.
- *
- * This file is part of AboutOss.
- *
- * AboutOss is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * AboutOss is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with AboutOss.  If not, see <http://www.gnu.org/licenses/>.
- */
-package com.geekorum.aboutoss.ui.common
-
-import android.content.Context
-import android.net.Uri
-import androidx.core.net.toUri
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion.APPLICATION_KEY
-import androidx.lifecycle.viewModelScope
-import androidx.lifecycle.viewmodel.initializer
-import androidx.lifecycle.viewmodel.viewModelFactory
-import com.geekorum.aboutoss.core.LicenseInfoRepository
-import com.geekorum.aboutoss.core.gms.GmsLicenseInfoRepository
-import com.geekorum.geekdroid.network.BrowserLauncher
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.flow.SharingStarted
-import kotlinx.coroutines.flow.flow
-import kotlinx.coroutines.flow.map
-import kotlinx.coroutines.flow.stateIn
-
-/**
- * Manage opensource license information and allow to display them in an UI
- */
-class OpenSourceLicensesViewModel constructor(
-    private val licenseInfoRepository: LicenseInfoRepository,
-    private val browserLauncher: BrowserLauncher,
-) : ViewModel() {
-    init {
-        browserLauncher.warmUp(null)
-    }
-
-    private val licensesInfo = flow {
-        emit(licenseInfoRepository.getLicensesInfo())
-    }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyMap())
-
-    val dependenciesList = licensesInfo.map { licensesInfo ->
-        licensesInfo.keys.sortedBy { it.lowercase() }
-    }
-
-    fun getLicenseDependency(dependency: String) = flow {
-        emit(licenseInfoRepository.getLicenseFor(dependency))
-    }
-
-    fun openLinkInBrowser(context: Context, link: String) {
-        browserLauncher.launchUrl(context, link.toUri(),  null as BrowserLauncher.LaunchCustomizer?)
-    }
-
-    fun mayLaunchUrl(vararg uris: Uri) = browserLauncher.mayLaunchUrl(*uris)
-
-    override fun onCleared() {
-        browserLauncher.shutdown()
-    }
-
-    companion object {
-        val Factory = viewModelFactory {
-            initializer {
-                val application = this[APPLICATION_KEY]!!
-                val licenseInfoRepository = GmsLicenseInfoRepository(
-                    appContext = application,
-                    mainCoroutineDispatcher = Dispatchers.Main,
-                    ioCoroutineDispatcher = Dispatchers.IO
-                )
-                val browserLauncher = BrowserLauncher(application, application.packageManager)
-                OpenSourceLicensesViewModel(
-                    licenseInfoRepository,
-                    browserLauncher
-                )
-            }
-        }
-    }
-}
--- a/ui/common/src/main/res/values/strings.xml	Tue Apr 22 14:35:57 2025 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-
-    AboutOss is an utility library to retrieve and display
-    opensource licenses in Android applications.
-
-    Copyright (C) 2023-2025 by Frederic-Charles Barthelery.
-
-    This file is part of AboutOss.
-
-    AboutOss is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    AboutOss is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with AboutOss.  If not, see <http://www.gnu.org/licenses/>.
-
--->
-<resources>
-    <string name="title_oss_licenses">Opensource Licenses</string>
-</resources>
\ No newline at end of file