chore(workflows,fastlane): configure macOS App Store distribution for desktop app (lanes, workflow, screenshots) (#1911)

This commit is contained in:
Hekmatullah 2025-08-28 20:44:50 +01:00 committed by GitHub
parent 4d200dc358
commit 33652bcc1e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
31 changed files with 462 additions and 99 deletions

113
.github/workflows/macos-distribute.yaml vendored Normal file
View File

@ -0,0 +1,113 @@
name: macOS Build & Distribute (TestFlight / App Store)
on:
workflow_dispatch:
inputs:
distribution:
description: Where to distribute this build
type: choice
required: true
options: [testflight, appstore]
default: testflight
jobs:
build_and_ship:
name: Build & Ship to → ${{ inputs.distribution }}
runs-on: macos-latest
env:
KEYCHAIN_NAME: signing-${{ github.run_id }}.keychain-db
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
APP_IDENTIFIER: org.mifospay
APPSTORE_KEY_ID: ${{ secrets.APPSTORE_KEY_ID }}
APPSTORE_ISSUER_ID: ${{ secrets.APPSTORE_ISSUER_ID }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: ☕ Set up Java 21 (Temurin)
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "21"
- name: Set up Ruby & bundle
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Install Fastlane dependencies
shell: bash
run: |
gem install bundler
bundler install --jobs 4 --retry 3
- name: Create & unlock temporary keychain
run: |
security create-keychain -p "${KEYCHAIN_PASSWORD}" "${KEYCHAIN_NAME}"
security set-keychain-settings -lut 21600 "${KEYCHAIN_NAME}"
security unlock-keychain -p "${KEYCHAIN_PASSWORD}" "${KEYCHAIN_NAME}"
security list-keychains -d user -s "${KEYCHAIN_NAME}" $(security list-keychains -d user | sed 's/[ "]//g')
- name: Import Mac App Distribution certificate
env:
MAC_APP_DISTRIBUTION_CERTIFICATE_B64: ${{ secrets.MAC_APP_DISTRIBUTION_CERTIFICATE_B64 }}
CERTIFICATES_PASSWORD: ${{ secrets.CERTIFICATES_PASSWORD }}
run: |
CERT="${RUNNER_TEMP}/mac_app_distribution.p12"
printf '%s' "$MAC_APP_DISTRIBUTION_CERTIFICATE_B64" | base64 -D > "$CERT"
security import "$CERT" -P "$CERTIFICATES_PASSWORD" -A -t cert -f pkcs12 -k "${KEYCHAIN_NAME}"
security set-key-partition-list -S apple-tool:,apple: -k "${KEYCHAIN_PASSWORD}" "${KEYCHAIN_NAME}"
echo "APP_CERTIFICATE_PATH=$CERT" >> "$GITHUB_ENV"
- name: Import Mac Installer Distribution certificate
env:
MAC_INSTALLER_DISTRIBUTION_CERTIFICATE_B64: ${{ secrets.MAC_INSTALLER_DISTRIBUTION_CERTIFICATE_B64 }}
CERTIFICATES_PASSWORD: ${{ secrets.CERTIFICATES_PASSWORD }}
run: |
CERT="${RUNNER_TEMP}/mac_installer_distribution.p12"
printf '%s' "$MAC_INSTALLER_DISTRIBUTION_CERTIFICATE_B64" | base64 -D > "$CERT"
security import "$CERT" -P "$CERTIFICATES_PASSWORD" -A -t cert -f pkcs12 -k "${KEYCHAIN_NAME}"
security set-key-partition-list -S apple-tool:,apple: -k "${KEYCHAIN_PASSWORD}" "${KEYCHAIN_NAME}"
echo "INSTALLER_CERTIFICATE_PATH=$CERT" >> "$GITHUB_ENV"
- name: Write Embedded provisioning profile
env:
MAC_EMBEDDED_PROVISION_B64: ${{ secrets.MAC_EMBEDDED_PROVISION_B64 }}
run: |
mkdir -p cmp-desktop
echo "$MAC_EMBEDDED_PROVISION_B64" > cmp-desktop/embedded.provisionprofile.b64
base64 -d -i cmp-desktop/embedded.provisionprofile.b64 > cmp-desktop/embedded.provisionprofile
- name: Write Runtime provisioning profile
env:
MAC_RUNTIME_PROVISION_B64: ${{ secrets.MAC_RUNTIME_PROVISION_B64 }}
run: |
echo "$MAC_RUNTIME_PROVISION_B64" > cmp-desktop/runtime.provisionprofile.b64
base64 -d -i cmp-desktop/runtime.provisionprofile.b64 > cmp-desktop/runtime.provisionprofile
- name: Write App Store Connect API key (.p8)
env:
APPSTORE_CONNECT_API_KEY_B64: ${{ secrets.APPSTORE_AUTH_KEY }}
run: |
mkdir -p secrets
echo "$APPSTORE_CONNECT_API_KEY_B64" | base64 --decode > secrets/Auth_key.p8
- name: Upload to TestFlight
if: ${{ inputs.distribution == 'testflight' }}
run: |
bundle exec fastlane mac desktop_testflight \
app_identifier:"$APP_IDENTIFIER" \
appstore_key_id:"$APPSTORE_KEY_ID" \
appstore_issuer_id:"$APPSTORE_ISSUER_ID" \
key_file_path:secrets/Auth_key.p8
- name: Submit to App Store (Production)
if: ${{ inputs.distribution == 'appstore' }}
run: |
bundle exec fastlane mac desktop_release \
app_identifier:"$APP_IDENTIFIER" \
appstore_key_id:"$APPSTORE_KEY_ID" \
appstore_issuer_id:"$APPSTORE_ISSUER_ID" \
key_file_path:secrets/Auth_key.p8

View File

@ -91,3 +91,4 @@ jobs:
build_ios: true build_ios: true
use_cocoapods: true use_cocoapods: true
shared_module: ':cmp-shared' shared_module: ':cmp-shared'
java-version: '21'

2
.gitignore vendored
View File

@ -76,3 +76,5 @@ secrets/
# Sync Log File # Sync Log File
*.log *.log
*.provisionprofile

View File

@ -9,8 +9,8 @@ group = "org.mifospay.buildlogic"
// Configure the build-logic plugins to target JDK 19 // Configure the build-logic plugins to target JDK 19
// This matches the JDK used to build the project, and is not related to what is running on device. // This matches the JDK used to build the project, and is not related to what is running on device.
java { java {
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_21
} }
kotlin { kotlin {

View File

@ -28,8 +28,8 @@ internal fun Project.configureKotlinAndroid(
compileOptions { compileOptions {
// Up to Java 11 APIs are available through desugaring // Up to Java 11 APIs are available through desugaring
// https://developer.android.com/studio/write/java11-minimal-support-table // https://developer.android.com/studio/write/java11-minimal-support-table
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_21
isCoreLibraryDesugaringEnabled = true isCoreLibraryDesugaringEnabled = true
} }
} }
@ -48,8 +48,8 @@ internal fun Project.configureKotlinJvm() {
extensions.configure<JavaPluginExtension> { extensions.configure<JavaPluginExtension> {
// Up to Java 11 APIs are available through desugaring // Up to Java 11 APIs are available through desugaring
// https://developer.android.com/studio/write/java11-minimal-support-table // https://developer.android.com/studio/write/java11-minimal-support-table
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_21
} }
configureKotlin() configureKotlin()
@ -63,7 +63,7 @@ private fun Project.configureKotlin() {
tasks.withType<KotlinCompile>().configureEach { tasks.withType<KotlinCompile>().configureEach {
compilerOptions { compilerOptions {
// Set JVM target to 17 // Set JVM target to 17
jvmTarget = JvmTarget.JVM_17 jvmTarget = JvmTarget.JVM_21
// Treat all Kotlin warnings as errors (disabled by default) // Treat all Kotlin warnings as errors (disabled by default)
// Override by setting warningsAsErrors=true in your ~/.gradle/gradle.properties // Override by setting warningsAsErrors=true in your ~/.gradle/gradle.properties
val warningsAsErrors: String? by project val warningsAsErrors: String? by project

View File

@ -313,23 +313,23 @@
| | | | | | | +--- androidx.lifecycle:lifecycle-common:2.9.2 (*) | | | | | | | +--- androidx.lifecycle:lifecycle-common:2.9.2 (*)
| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*) | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*)
| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 -> 1.10.2 (*) | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 -> 1.10.2 (*)
| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.1
| | | | | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.8.0 | | | | | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.8.1
| | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-bom:1.8.0 | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-bom:1.8.1
| | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.0 (c) | | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.8.1 (c)
| | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.8.0 (c) | | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.1 (c)
| | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0 (c) | | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.8.1 (c)
| | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json-io-jvm:1.8.0 (c) | | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (c)
| | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json-io:1.8.0 (c) | | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json-io:1.8.1 (c)
| | | | | | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.8.0 (c) | | | | | | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-json-io-jvm:1.8.1 (c)
| | | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 -> 2.1.21 (*) | | | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*)
| | | | | | | +--- androidx.savedstate:savedstate-compose:1.3.1 (c) | | | | | | | +--- androidx.savedstate:savedstate-compose:1.3.1 (c)
| | | | | | | +--- androidx.savedstate:savedstate-ktx:1.3.1 (c) | | | | | | | +--- androidx.savedstate:savedstate-ktx:1.3.1 (c)
| | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.21 (c) | | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.21 (c)
| | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*) | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*)
| | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 -> 1.10.2 (*) | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 -> 1.10.2 (*)
| | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 -> 1.10.2 (*) | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 -> 1.10.2 (*)
| | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 (*) | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.1 (*)
| | | | | | +--- androidx.lifecycle:lifecycle-common:2.9.2 (c) | | | | | | +--- androidx.lifecycle:lifecycle-common:2.9.2 (c)
| | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.9.2 (c) | | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.9.2 (c)
| | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.9.2 (c) | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.9.2 (c)
@ -879,7 +879,7 @@
| | +--- androidx.lifecycle:lifecycle-viewmodel:2.9.2 (*) | | +--- androidx.lifecycle:lifecycle-viewmodel:2.9.2 (*)
| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.2 (*) | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.2 (*)
| | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*) | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.1 (*)
| | +--- androidx.lifecycle:lifecycle-common:2.9.2 (c) | | +--- androidx.lifecycle:lifecycle-common:2.9.2 (c)
| | +--- androidx.lifecycle:lifecycle-livedata:2.9.2 (c) | | +--- androidx.lifecycle:lifecycle-livedata:2.9.2 (c)
| | +--- androidx.lifecycle:lifecycle-livedata-core:2.9.2 (c) | | +--- androidx.lifecycle:lifecycle-livedata-core:2.9.2 (c)
@ -943,11 +943,11 @@
| | | | | +--- org.jetbrains.compose.annotation-internal:annotation:1.8.2 (*) | | | | | +--- org.jetbrains.compose.annotation-internal:annotation:1.8.2 (*)
| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*) | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*)
| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.10.2 (*) | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.10.2 (*)
| | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 (*) | | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.1 (*)
| | | | +--- org.jetbrains.compose.annotation-internal:annotation:1.8.2 (*) | | | | +--- org.jetbrains.compose.annotation-internal:annotation:1.8.2 (*)
| | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*) | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*)
| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.10.2 (*) | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.10.2 (*)
| | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 (*) | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.1 (*)
| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*) | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*)
| | +--- androidx.appcompat:appcompat:1.7.1 | | +--- androidx.appcompat:appcompat:1.7.1
| | | +--- androidx.activity:activity:1.8.0 -> 1.10.1 (*) | | | +--- androidx.activity:activity:1.8.0 -> 1.10.1 (*)
@ -1222,7 +1222,7 @@
| | | | | +--- androidx.profileinstaller:profileinstaller:1.4.0 -> 1.4.1 (*) | | | | | +--- androidx.profileinstaller:profileinstaller:1.4.0 -> 1.4.1 (*)
| | | | | +--- androidx.savedstate:savedstate:1.3.0 -> 1.3.1 (*) | | | | | +--- androidx.savedstate:savedstate:1.3.0 -> 1.3.1 (*)
| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*) | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*)
| | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 (*) | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.1 (*)
| | | | | +--- androidx.navigation:navigation-compose:2.9.2 (c) | | | | | +--- androidx.navigation:navigation-compose:2.9.2 (c)
| | | | | +--- androidx.navigation:navigation-fragment:2.9.2 (c) | | | | | +--- androidx.navigation:navigation-fragment:2.9.2 (c)
| | | | | +--- androidx.navigation:navigation-fragment-ktx:2.9.2 (c) | | | | | +--- androidx.navigation:navigation-fragment-ktx:2.9.2 (c)
@ -1242,7 +1242,7 @@
| | | | | +--- androidx.navigation:navigation-common:2.9.2 (*) | | | | | +--- androidx.navigation:navigation-common:2.9.2 (*)
| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*) | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*)
| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.10.2 (*) | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.10.2 (*)
| | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 (*) | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.1 (*)
| | | | | +--- androidx.navigation:navigation-common:2.9.2 (c) | | | | | +--- androidx.navigation:navigation-common:2.9.2 (c)
| | | | | +--- androidx.navigation:navigation-compose:2.9.2 (c) | | | | | +--- androidx.navigation:navigation-compose:2.9.2 (c)
| | | | | +--- androidx.navigation:navigation-fragment:2.9.2 (c) | | | | | +--- androidx.navigation:navigation-fragment:2.9.2 (c)
@ -1269,7 +1269,7 @@
| | | | | \--- androidx.collection:collection:1.1.0 -> 1.5.0 (*) | | | | | \--- androidx.collection:collection:1.1.0 -> 1.5.0 (*)
| | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*) | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*)
| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.10.2 (*) | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.10.2 (*)
| | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 (*) | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.1 (*)
| | | | +--- androidx.navigation:navigation-common:2.9.2 (c) | | | | +--- androidx.navigation:navigation-common:2.9.2 (c)
| | | | +--- androidx.navigation:navigation-compose:2.9.2 (c) | | | | +--- androidx.navigation:navigation-compose:2.9.2 (c)
| | | | +--- androidx.navigation:navigation-fragment-ktx:2.9.2 (c) | | | | +--- androidx.navigation:navigation-fragment-ktx:2.9.2 (c)
@ -1343,9 +1343,9 @@
| | | | | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 -> 2.1.21 (*) | | | | | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 -> 2.1.21 (*)
| | | | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 -> 2.1.21 (*) | | | | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 -> 2.1.21 (*)
| | | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*) | | | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*)
| | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.0 (*) | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.0 -> 1.8.1 (*)
| | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*) | | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*)
| | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.0 (*) | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.0 -> 1.8.1 (*)
| | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*) | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*)
| | | | | +--- io.ktor:ktor-http-cio:3.1.2 | | | | | +--- io.ktor:ktor-http-cio:3.1.2
| | | | | | \--- io.ktor:ktor-http-cio-jvm:3.1.2 | | | | | | \--- io.ktor:ktor-http-cio-jvm:3.1.2
@ -1424,11 +1424,11 @@
| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.10.2 (*) | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 -> 1.10.2 (*)
| | | +--- org.jetbrains.compose.runtime:runtime:1.8.2 (*) | | | +--- org.jetbrains.compose.runtime:runtime:1.8.2 (*)
| | | +--- org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.1 (*) | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.1 (*)
| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1
| | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.8.0 | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.8.1
| | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-bom:1.8.0 (*) | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-bom:1.8.1 (*)
| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 -> 2.1.21 (*) | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*)
| | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.0 (*) | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.1 (*)
| | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 | | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8
| | | | \--- org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8 | | | | \--- org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.8
| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.1.21 (*) | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.21 -> 2.1.21 (*)
@ -1449,21 +1449,21 @@
| | | | \--- com.russhwolf:multiplatform-settings-serialization-android:1.3.0 | | | | \--- com.russhwolf:multiplatform-settings-serialization-android:1.3.0
| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 -> 2.1.21 (*) | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 -> 2.1.21 (*)
| | | | +--- com.russhwolf:multiplatform-settings:1.3.0 (*) | | | | +--- com.russhwolf:multiplatform-settings:1.3.0 (*)
| | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 (*) | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.1 (*)
| | | +--- com.russhwolf:multiplatform-settings-coroutines:1.3.0 | | | +--- com.russhwolf:multiplatform-settings-coroutines:1.3.0
| | | | \--- com.russhwolf:multiplatform-settings-coroutines-android:1.3.0 | | | | \--- com.russhwolf:multiplatform-settings-coroutines-android:1.3.0
| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 -> 2.1.21 (*) | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 -> 2.1.21 (*)
| | | | +--- com.russhwolf:multiplatform-settings:1.3.0 (*) | | | | +--- com.russhwolf:multiplatform-settings:1.3.0 (*)
| | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 -> 1.10.2 (*) | | | | \--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 -> 1.10.2 (*)
| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 -> 1.10.2 (*) | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 -> 1.10.2 (*)
| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 (*) | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.1 (*)
| | | +--- project :core:model | | | +--- project :core:model
| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*) | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*)
| | | | +--- io.insert-koin:koin-bom:4.1.0 (*) | | | | +--- io.insert-koin:koin-bom:4.1.0 (*)
| | | | +--- io.insert-koin:koin-core:4.1.0 (*) | | | | +--- io.insert-koin:koin-core:4.1.0 (*)
| | | | +--- io.insert-koin:koin-annotations:2.1.0 (*) | | | | +--- io.insert-koin:koin-annotations:2.1.0 (*)
| | | | +--- project :core:common (*) | | | | +--- project :core:common (*)
| | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | | | \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.1.20 (*) | | | | \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.1.20 (*)
| | | \--- project :core:common (*) | | | \--- project :core:common (*)
| | +--- project :core:model (*) | | +--- project :core:model (*)
@ -1508,16 +1508,16 @@
| | | | | | +--- org.slf4j:slf4j-api:2.0.16 | | | | | | +--- org.slf4j:slf4j-api:2.0.16
| | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1 -> 1.10.2 (*) | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1 -> 1.10.2 (*)
| | | | | | +--- io.ktor:ktor-serialization:3.1.2 (*) | | | | | | +--- io.ktor:ktor-serialization:3.1.2 (*)
| | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.0 (*) | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.0 -> 1.8.1 (*)
| | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*) | | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*)
| | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0 (*) | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0 -> 1.8.1 (*)
| | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json-io:1.8.0 | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json-io:1.8.0 -> 1.8.1
| | | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-json-io-jvm:1.8.0 | | | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-json-io-jvm:1.8.1
| | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-bom:1.8.0 (*) | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-bom:1.8.1 (*)
| | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 -> 2.1.21 (*) | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*)
| | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.0 (*) | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.1 (*)
| | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0 (*) | | | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | | | | | \--- org.jetbrains.kotlinx:kotlinx-io-core:0.4.0 -> 0.7.0 (*) | | | | | | \--- org.jetbrains.kotlinx:kotlinx-io-core:0.6.0 -> 0.7.0 (*)
| | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*) | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*)
| | | | +--- io.ktor:ktor-client-auth:3.1.2 | | | | +--- io.ktor:ktor-client-auth:3.1.2
| | | | | \--- io.ktor:ktor-client-auth-jvm:3.1.2 | | | | | \--- io.ktor:ktor-client-auth-jvm:3.1.2
@ -1547,7 +1547,7 @@
| | | +--- io.insert-koin:koin-annotations:2.1.0 (*) | | | +--- io.insert-koin:koin-annotations:2.1.0 (*)
| | | +--- project :core:model (*) | | | +--- project :core:model (*)
| | | +--- project :core:datastore (*) | | | +--- project :core:datastore (*)
| | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | | +--- io.ktor:ktor-client-json:3.1.2 | | | +--- io.ktor:ktor-client-json:3.1.2
| | | | \--- io.ktor:ktor-client-json-jvm:3.1.2 | | | | \--- io.ktor:ktor-client-json-jvm:3.1.2
| | | | +--- org.slf4j:slf4j-api:2.0.16 | | | | +--- org.slf4j:slf4j-api:2.0.16
@ -1559,7 +1559,7 @@
| | | | +--- org.slf4j:slf4j-api:2.0.16 | | | | +--- org.slf4j:slf4j-api:2.0.16
| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1 -> 1.10.2 (*) | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1 -> 1.10.2 (*)
| | | | +--- io.ktor:ktor-client-core:3.1.2 (*) | | | | +--- io.ktor:ktor-client-core:3.1.2 (*)
| | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0 (*) | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0 -> 1.8.1 (*)
| | | | +--- io.ktor:ktor-client-json:3.1.2 (*) | | | | +--- io.ktor:ktor-client-json:3.1.2 (*)
| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*) | | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*)
| | | \--- com.squareup.okio:okio:3.15.0 (*) | | | \--- com.squareup.okio:okio:3.15.0 (*)
@ -1575,7 +1575,7 @@
| | | +--- io.insert-koin:koin-core:4.1.0 (*) | | | +--- io.insert-koin:koin-core:4.1.0 (*)
| | | +--- io.insert-koin:koin-annotations:2.1.0 (*) | | | +--- io.insert-koin:koin-annotations:2.1.0 (*)
| | | \--- org.jetbrains.compose.runtime:runtime:1.8.2 (*) | | | \--- org.jetbrains.compose.runtime:runtime:1.8.2 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.runtime:runtime:1.8.2 (*) | | +--- org.jetbrains.compose.runtime:runtime:1.8.2 (*)
| | +--- org.jetbrains.compose.components:components-resources:1.8.2 (*) | | +--- org.jetbrains.compose.components:components-resources:1.8.2 (*)
| | \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.1.20 (*) | | \--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.1.20 (*)
@ -1935,7 +1935,7 @@
| | | | | \--- androidx.savedstate:savedstate-ktx:1.3.1 (c) | | | | | \--- androidx.savedstate:savedstate-ktx:1.3.1 (c)
| | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*) | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*)
| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.10.2 (*) | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.10.2 (*)
| | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 (*) | | | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.1 (*)
| | | | +--- androidx.navigation:navigation-common:2.9.2 (c) | | | | +--- androidx.navigation:navigation-common:2.9.2 (c)
| | | | +--- androidx.navigation:navigation-fragment-ktx:2.9.2 (c) | | | | +--- androidx.navigation:navigation-fragment-ktx:2.9.2 (c)
| | | | +--- androidx.navigation:navigation-runtime:2.9.2 (c) | | | | +--- androidx.navigation:navigation-runtime:2.9.2 (c)
@ -1956,7 +1956,7 @@
| | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.1 (*) | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.1 (*)
| | | | +--- org.jetbrains.androidx.savedstate:savedstate:1.3.1 (*) | | | | +--- org.jetbrains.androidx.savedstate:savedstate:1.3.1 (*)
| | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*) | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*)
| | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 (*) | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.1 (*)
| | | +--- org.jetbrains.androidx.navigation:navigation-runtime:2.9.0-beta03 | | | +--- org.jetbrains.androidx.navigation:navigation-runtime:2.9.0-beta03
| | | | +--- androidx.annotation:annotation:1.9.1 (*) | | | | +--- androidx.annotation:annotation:1.9.1 (*)
| | | | +--- androidx.collection:collection:1.5.0-beta01 -> 1.5.0 (*) | | | | +--- androidx.collection:collection:1.5.0-beta01 -> 1.5.0 (*)
@ -1968,7 +1968,7 @@
| | | | +--- org.jetbrains.androidx.navigation:navigation-common:2.9.0-beta03 (*) | | | | +--- org.jetbrains.androidx.navigation:navigation-common:2.9.0-beta03 (*)
| | | | +--- org.jetbrains.androidx.savedstate:savedstate:1.3.1 (*) | | | | +--- org.jetbrains.androidx.savedstate:savedstate:1.3.1 (*)
| | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*) | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*)
| | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 (*) | | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.1 (*)
| | | +--- org.jetbrains.androidx.savedstate:savedstate:1.3.1 (*) | | | +--- org.jetbrains.androidx.savedstate:savedstate:1.3.1 (*)
| | | +--- org.jetbrains.androidx.savedstate:savedstate-compose:1.3.1 | | | +--- org.jetbrains.androidx.savedstate:savedstate-compose:1.3.1
| | | | +--- androidx.savedstate:savedstate-compose:1.3.0 -> 1.3.1 (*) | | | | +--- androidx.savedstate:savedstate-compose:1.3.0 -> 1.3.1 (*)
@ -1980,7 +1980,7 @@
| | | +--- org.jetbrains.compose.runtime:runtime:1.8.2 (*) | | | +--- org.jetbrains.compose.runtime:runtime:1.8.2 (*)
| | | +--- org.jetbrains.compose.runtime:runtime-saveable:1.8.2 (*) | | | +--- org.jetbrains.compose.runtime:runtime-saveable:1.8.2 (*)
| | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*) | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.1.21 (*)
| | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 (*) | | | \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.1 (*)
| | +--- io.github.vinceglb:filekit-core:0.10.0-beta04 | | +--- io.github.vinceglb:filekit-core:0.10.0-beta04
| | | \--- io.github.vinceglb:filekit-core-android:0.10.0-beta04 | | | \--- io.github.vinceglb:filekit-core-android:0.10.0-beta04
| | | +--- androidx.documentfile:documentfile:1.1.0 (*) | | | +--- androidx.documentfile:documentfile:1.1.0 (*)
@ -2020,7 +2020,7 @@
| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.24 -> 2.1.21 (*) | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.24 -> 2.1.21 (*)
| +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| +--- project :core:domain | +--- project :core:domain
| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*) | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*)
| | +--- io.insert-koin:koin-bom:4.1.0 (*) | | +--- io.insert-koin:koin-bom:4.1.0 (*)
@ -2118,7 +2118,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- project :core:domain (*) | | +--- project :core:domain (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
@ -2156,7 +2156,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2165,7 +2165,7 @@
| | +--- org.jetbrains.compose.components:components-ui-tooling-preview:1.8.2 (*) | | +--- org.jetbrains.compose.components:components-ui-tooling-preview:1.8.2 (*)
| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*) | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.1.21 (*)
| | +--- org.jetbrains.kotlin:kotlin-reflect:2.1.20 -> 2.1.21 (*) | | +--- org.jetbrains.kotlin:kotlin-reflect:2.1.20 -> 2.1.21 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.1 (*)
| | +--- com.russhwolf:multiplatform-settings-no-arg:1.3.0 (*) | | +--- com.russhwolf:multiplatform-settings-no-arg:1.3.0 (*)
| | +--- com.russhwolf:multiplatform-settings-serialization:1.3.0 (*) | | +--- com.russhwolf:multiplatform-settings-serialization:1.3.0 (*)
| | +--- com.russhwolf:multiplatform-settings-coroutines:1.3.0 (*) | | +--- com.russhwolf:multiplatform-settings-coroutines:1.3.0 (*)
@ -2197,7 +2197,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2230,7 +2230,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2262,7 +2262,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2294,7 +2294,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2326,7 +2326,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2362,7 +2362,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2394,7 +2394,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2426,7 +2426,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2458,7 +2458,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2491,7 +2491,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2523,7 +2523,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2559,7 +2559,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2591,7 +2591,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2632,7 +2632,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2665,7 +2665,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2697,7 +2697,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2777,7 +2777,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2810,7 +2810,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2941,7 +2941,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -2974,7 +2974,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)
@ -3006,7 +3006,7 @@
| | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*) | | +--- org.jetbrains.androidx.core:core-bundle:1.0.1 (*)
| | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*) | | +--- org.jetbrains.androidx.navigation:navigation-compose:2.9.0-beta03 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*) | | +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8 (*)
| | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3 -> 1.8.0 (*) | | +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1 (*)
| | +--- org.jetbrains.compose.ui:ui:1.8.2 (*) | | +--- org.jetbrains.compose.ui:ui:1.8.2 (*)
| | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*) | | +--- org.jetbrains.compose.foundation:foundation:1.8.2 (*)
| | +--- org.jetbrains.compose.material3:material3:1.8.2 (*) | | +--- org.jetbrains.compose.material3:material3:1.8.2 (*)

View File

@ -434,13 +434,13 @@ org.jetbrains.kotlinx:kotlinx-io-bytestring-jvm:0.7.0
org.jetbrains.kotlinx:kotlinx-io-bytestring:0.7.0 org.jetbrains.kotlinx:kotlinx-io-bytestring:0.7.0
org.jetbrains.kotlinx:kotlinx-io-core-jvm:0.7.0 org.jetbrains.kotlinx:kotlinx-io-core-jvm:0.7.0
org.jetbrains.kotlinx:kotlinx-io-core:0.7.0 org.jetbrains.kotlinx:kotlinx-io-core:0.7.0
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.8.0 org.jetbrains.kotlinx:kotlinx-serialization-bom:1.8.1
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.8.0 org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.8.1
org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.0 org.jetbrains.kotlinx:kotlinx-serialization-core:1.8.1
org.jetbrains.kotlinx:kotlinx-serialization-json-io-jvm:1.8.0 org.jetbrains.kotlinx:kotlinx-serialization-json-io-jvm:1.8.1
org.jetbrains.kotlinx:kotlinx-serialization-json-io:1.8.0 org.jetbrains.kotlinx:kotlinx-serialization-json-io:1.8.1
org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.8.0 org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.8.1
org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0 org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1
org.jetbrains:annotations:23.0.0 org.jetbrains:annotations:23.0.0
org.jspecify:jspecify:1.0.0 org.jspecify:jspecify:1.0.0
org.slf4j:slf4j-api:2.0.16 org.slf4j:slf4j-api:2.0.16

View File

@ -1,4 +1,4 @@
package: name='org.mifospay' versionCode='1' versionName='2025.8.2-beta.0.3' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15' package: name='org.mifospay' versionCode='1' versionName='2025.8.2-beta.0.6' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15'
minSdkVersion:'26' minSdkVersion:'26'
targetSdkVersion:'34' targetSdkVersion:'34'
uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.INTERNET'

View File

@ -8,6 +8,7 @@
* See https://github.com/openMF/mobile-wallet/blob/master/LICENSE.md * See https://github.com/openMF/mobile-wallet/blob/master/LICENSE.md
*/ */
import org.jetbrains.compose.desktop.application.dsl.TargetFormat import org.jetbrains.compose.desktop.application.dsl.TargetFormat
import org.gradle.internal.os.OperatingSystem
plugins { plugins {
alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.kotlinMultiplatform)
@ -19,7 +20,7 @@ plugins {
kotlin { kotlin {
jvm("desktop") jvm("desktop")
jvmToolchain(17) jvmToolchain(21)
sourceSets { sourceSets {
val desktopMain by getting { val desktopMain by getting {
@ -48,6 +49,10 @@ val appPackageVersion: String = libs.versions.packageVersion.get()
compose.desktop { compose.desktop {
application { application {
mainClass = "MainKt" mainClass = "MainKt"
val buildNumber: String = (project.findProperty("buildNumber") as String?) ?: "1"
val isAppStoreRelease: Boolean =
(project.findProperty("macOsAppStoreRelease") as String?)?.toBoolean() ?: false
nativeDistributions { nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Exe, TargetFormat.Deb) targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Exe, TargetFormat.Deb)
packageName = appPackageName packageName = appPackageName
@ -57,16 +62,41 @@ compose.desktop {
vendor = "Mifos Initiative" vendor = "Mifos Initiative"
licenseFile.set(project.file("../LICENSE")) licenseFile.set(project.file("../LICENSE"))
includeAllModules = true includeAllModules = true
outputBaseDir.set(project.layout.buildDirectory.dir("release"))
macOS { macOS {
bundleID = appPackageNameSpace bundleID = appPackageNameSpace
dockName = appPackageName dockName = appPackageName
iconFile.set(project.file("icons/ic_launcher.icns")) iconFile.set(project.file("icons/ic_launcher.icns"))
notarization { minimumSystemVersion = "12.0"
val providers = project.providers appStore = isAppStoreRelease
appleID.set(providers.environmentVariable("NOTARIZATION_APPLE_ID"))
password.set(providers.environmentVariable("NOTARIZATION_PASSWORD")) infoPlist {
teamID.set(providers.environmentVariable("NOTARIZATION_TEAM_ID")) packageBuildVersion = buildNumber
extraKeysRawXml = """
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
""".trimIndent()
}
if (isAppStoreRelease) {
signing {
sign.set(true)
identity.set("The Mifos Initiative")
}
provisioningProfile.set(project.file("embedded.provisionprofile"))
runtimeProvisioningProfile.set(project.file("runtime.provisionprofile"))
entitlementsFile.set(project.file("entitlements.plist"))
runtimeEntitlementsFile.set(project.file("runtime-entitlements.plist"))
} else {
notarization {
val providers = project.providers
appleID.set(providers.environmentVariable("NOTARIZATION_APPLE_ID"))
password.set(providers.environmentVariable("NOTARIZATION_PASSWORD"))
teamID.set(providers.environmentVariable("NOTARIZATION_TEAM_ID"))
}
} }
} }
@ -84,9 +114,50 @@ compose.desktop {
} }
} }
buildTypes.release.proguard { buildTypes.release.proguard {
configurationFiles.from(file("compose-desktop.pro")) isEnabled = false
obfuscate.set(true) // configurationFiles.from(file("compose-desktop.pro"))
optimize.set(true) // obfuscate.set(true)
// optimize.set(true)
} }
} }
} }
/**
* Removes the `com.apple.quarantine` extended attribute from the built `.app`.
*
* Why:
* macOS Gatekeeper marks files that originated from the Internet with the
* `com.apple.quarantine` xattr. During a Compose Desktop / jpackage build the
* JBR/JRE, native libs, and other resources are copied into the `.app`. If any
* of those files are quarantined, Appstore will not allow it..
*
* What this does:
* Runs `xattr -dr com.apple.quarantine <App.app>` **recursively** on the
* distributable after it has been assembled but before signing/packaging.
* We depend on `createReleaseDistributable` so the `.app` exists, and we guard
* execution to only run on macOS hosts.
*/
val unquarantineApp = tasks.register<Exec>("unquarantineMacApp") {
group = "macOS"
description = "Remove com.apple.quarantine from the built .app before signing"
onlyIf { OperatingSystem.current().isMacOsX }
// Ensure the .app bundle exists first
dependsOn("createReleaseDistributable")
// build/release/main-release/app/<YourApp>.app
val appName = "$appPackageName.app"
val appPath = layout.buildDirectory
.dir("release/main-release/app/$appName")
.map { it.asFile.absolutePath }
commandLine("xattr", "-dr", "com.apple.quarantine", appPath.get())
}
/**
* Ensure un-quarantining always happens before we create the signed PKG.
*/
tasks.matching { it.name == "packageReleasePkg" }.configureEach {
dependsOn(unquarantineApp)
}

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
<key>com.apple.security.cs.debugger</key>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
<key>com.apple.application-identifier</key>
<string>L432S2FZP5.org.mifospay</string>
<key>com.apple.developer.team-identifier</key>
<string>L432S2FZP5</string>
<!-- Add additional entitlements here, for example for network or hardware access. -->
</dict>
</plist>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
<key>com.apple.security.cs.debugger</key>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
</dict>
</plist>

View File

@ -19,7 +19,7 @@ fun main() {
application { application {
initKoin() initKoin()
// Initialize FileKit // Initialize FileKit
FileKit.init(appId = "org.mifospay.desktop") FileKit.init(appId = "org.mifospay")
val windowState = rememberWindowState() val windowState = rememberWindowState()
Window( Window(
onCloseRequest = ::exitApplication, onCloseRequest = ::exitApplication,

View File

@ -93,8 +93,8 @@ android {
} }
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_21
} }
} }

View File

@ -30,7 +30,9 @@ module FastlaneConfig
key_filepath: "./secrets/Auth_key.p8", key_filepath: "./secrets/Auth_key.p8",
version_number: "1.0.0", version_number: "1.0.0",
metadata_path: "./fastlane/metadata/ios", metadata_path: "./fastlane/metadata/ios",
app_rating_config_path: "./fastlane/age_rating.json" app_rating_config_path: "./fastlane/age_rating.json",
screenshots_ios_path: "./fastlane/screenshots_ios",
screenshots_macos_path: "./fastlane/screenshots_macos",
} }
end end
end end

View File

@ -589,4 +589,133 @@ platform :ios do
} }
) )
end end
end
platform :mac do
#############################
# Shared Private Lane Helpers
#############################
private_lane :setup_ci_if_needed do
if ENV['CI']
setup_ci
else
UI.message("🖥️ Running locally, skipping CI-specific setup.")
end
end
private_lane :load_api_key_macos do |options|
ios_config = FastlaneConfig::IosConfig::BUILD_CONFIG
app_store_connect_api_key(
key_id: options[:appstore_key_id] || ios_config[:key_id],
issuer_id: options[:appstore_issuer_id] || ios_config[:issuer_id],
key_filepath: options[:key_filepath] || ios_config[:key_filepath],
duration: 1200
)
end
private_lane :next_macos_build_number do |options|
ios_config = FastlaneConfig::IosConfig::BUILD_CONFIG
latest = latest_testflight_build_number(
app_identifier: options[:app_identifier] || ios_config[:app_identifier],
api_key: Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY],
platform: "osx",
version: ios_config[:version_number]
)
(latest.to_i + 1).to_s
end
# Resolve the most-recent generated .pkg path
private_lane :find_pkg_path do
project_dir = File.expand_path('..', Dir.pwd)
Dir[File.join(project_dir, 'cmp-desktop', 'build', 'release', '**', 'pkg', '*.pkg')]
.max_by { |p| File.mtime(p) } || UI.user_error!('PKG not found!')
end
###################
# Public lanes
###################
desc "Build & upload macOS (.pkg) to TestFlight"
lane :desktop_testflight do |options|
setup_ci_if_needed
load_api_key_macos(options)
new_build_number = next_macos_build_number(options)
gradle(
tasks: ["packageReleasePkg"],
properties: {
"buildNumber" => new_build_number,
"macOsAppStoreRelease" => true
}
)
pkg_path = find_pkg_path
UI.message("Found PKG at: #{pkg_path}")
pilot(
api_key: Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY],
pkg: pkg_path,
app_platform: 'osx',
skip_waiting_for_build_processing: true,
)
end
desc "Build & submit macOS app to App Store (non-beta)"
lane :desktop_release do |options|
ios_config = FastlaneConfig::IosConfig::BUILD_CONFIG
setup_ci_if_needed
load_api_key_macos(options)
new_build_number = next_macos_build_number(options)
gradle(
tasks: ["packageReleasePkg"],
properties: {
"buildNumber" => new_build_number,
"macOsAppStoreRelease" => true
}
)
# Locate the produced PKG (adjust pattern if you rename)
pkg_path = find_pkg_path
UI.message("Found PKG at: #{pkg_path}")
deliver(
platform: 'osx',
pkg: pkg_path,
screenshots_path: ios_config[:screenshots_macos_path],
metadata_path: options[:metadata_path] || ios_config[:metadata_path],
submit_for_review: true, # Set to true if you want to auto-submit for review
automatic_release: true, # Set to true if you want to auto-release once it approved
api_key: Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY],
skip_app_version_update: false,
force: true, # Skips HTML report verification
precheck_include_in_app_purchases: false,
overwrite_screenshots: true,
reject_if_possible: true,
app_rating_config_path: ios_config[:app_rating_config_path],
submission_information: {
add_id_info_uses_idfa: false,
add_id_info_limits_tracking: false,
add_id_info_serves_ads: false,
add_id_info_tracks_action: false,
add_id_info_tracks_install: false,
content_rights_has_rights: true,
content_rights_contains_third_party_content: false,
export_compliance_platform: 'osx',
export_compliance_compliance_required: false,
export_compliance_encryption_updated: false,
export_compliance_app_type: nil,
export_compliance_uses_encryption: false,
export_compliance_is_exempt: true,
export_compliance_contains_third_party_cryptography: false,
export_compliance_contains_proprietary_cryptography: false,
export_compliance_available_on_french_store: true
}
)
end
end end

View File

Before

Width:  |  Height:  |  Size: 734 KiB

After

Width:  |  Height:  |  Size: 734 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

Before

Width:  |  Height:  |  Size: 873 KiB

After

Width:  |  Height:  |  Size: 873 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

Before

Width:  |  Height:  |  Size: 727 KiB

After

Width:  |  Height:  |  Size: 727 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

Before

Width:  |  Height:  |  Size: 523 KiB

After

Width:  |  Height:  |  Size: 523 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

Before

Width:  |  Height:  |  Size: 482 KiB

After

Width:  |  Height:  |  Size: 482 KiB

View File

Before

Width:  |  Height:  |  Size: 1023 KiB

After

Width:  |  Height:  |  Size: 1023 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

View File

@ -87,7 +87,7 @@ kotlinInject = "0.7.2"
kotlinxCoroutines = "1.9.0" kotlinxCoroutines = "1.9.0"
kotlinxDatetime = "0.6.1" kotlinxDatetime = "0.6.1"
kotlinxImmutable = "0.3.8" kotlinxImmutable = "0.3.8"
kotlinxSerializationJson = "1.7.3" kotlinxSerializationJson = "1.8.1"
ksp = "2.1.20-2.0.1" ksp = "2.1.20-2.0.1"
# Ktor & Ktorfit # Ktor & Ktorfit
@ -129,8 +129,8 @@ material3adaptive = "1.1.2"
room = "2.7.2" room = "2.7.2"
# Desktop Version # Desktop Version
packageName = "MifosWallet" packageName = "Mifos Pay"
packageNamespace = "org.mifospay.desktop" packageNamespace = "org.mifospay"
packageVersion = "1.0.0" packageVersion = "1.0.0"
[libraries] [libraries]