Skip to content

Conversation

@vkatz
Copy link
Contributor

@vkatz vkatz commented Dec 18, 2025

Fixes #318 by migration to kotlion 2.3.0 + compose 1.10.+ structure
Fixes #312 hilt integration
Fixes #313 compose version update onto 1.10.+
Fixes SaveStateHandle

Summary by CodeRabbit

Release Notes

  • New Features

    • Added dedicated run configurations for Android, Desktop, Web, and iOS development environments
    • Restructured project modules for improved organization and clarity
  • Refactor

    • Reorganized project architecture with clearer module separation
    • Updated navigation naming conventions for better consistency
    • Simplified state management infrastructure
    • Enhanced build configuration with Gradle updates
  • Chores

    • Updated GitHub Actions workflows for CI/CD integration
    • Modernized Gradle plugin and dependency configurations

✏️ Tip: You can customize this high-level summary in your review settings.

@vkatz vkatz added this to the 2.2.0 milestone Dec 18, 2025
@vkatz vkatz requested a review from egorikftp December 18, 2025 14:19
@vkatz vkatz added bugfix Something isn't working housekeeping labels Dec 18, 2025
@vkatz vkatz changed the title #318 kotlin 2.3.0 structure migration kotlin 2.3.0 structure migration Dec 18, 2025
@vkatz
Copy link
Contributor Author

vkatz commented Dec 18, 2025

@CodeRabbit review

@coderabbitai
Copy link

coderabbitai bot commented Dec 18, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai
Copy link

coderabbitai bot commented Dec 18, 2025

Walkthrough

This PR restructures the sample app from a single composeApp module into separate platform-specific modules (app-android, app-ios, app-jvm, app-wasm) with shared code, reorganizes navigation content with clearer naming conventions, removes the mutable SavedState infrastructure, and refactors entry lifecycle management for improved state handling.

Changes

Cohort / File(s) Summary
Module Structure & Settings
.github/workflows/verify.yml, gradle.properties, settings.gradle.kts, build.gradle.kts, gradle/libs.versions.toml, gradle/tiamat.toml, README.md
Updated workflow task references to new module paths; increased Kotlin daemon heap; changed iOS project path; updated AGP version; added kotlin-android plugin alias; adjusted version catalog entries.
IDE Run Configurations
.run/App Android.run.xml, .run/App Desktop*.run.xml, .run/App Web.run.xml, .run/App iOs.run.xml, .run/Clean.run.xml, .run/Run Abi Update.run.xml, .run/Run Jvm Tests.run.xml, .run/Run Static Analysis.run.xml
Added new IntelliJ run configurations for each platform target and common tasks (clean, tests, static analysis).
Android App Module
sample/app-android/build.gradle.kts, sample/app-android/src/main/AndroidManifest.xml, sample/app-android/src/main/kotlin/composegears/tiamat/app/*
New Android module with build configuration, manifest updates, and migrated platform-specific code with package refactoring from composegears.tiamat.sample to composegears.tiamat.app.
Desktop & WASM Modules
sample/app-jvm/build.gradle.kts, sample/app-jvm/kotlin/main.kt, sample/app-wasm/build.gradle.kts
Added new JVM desktop and WebAssembly app modules with respective Gradle configurations.
iOS Module
sample/app-ios/Tiamat.xcodeproj/project.pbxproj, sample/app-ios/iosApp/...swift
Updated Xcode project configuration, code signing settings, and minor formatting.
Shared Module
sample/shared/build.gradle.kts, sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/App.kt, sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/*
Created shared Kotlin Multiplatform module; centralized App composable with PlatformFeatures support; reorganized navigation destinations with systematic renaming (Arch*State*, Adv*Layout*/Nav*/Other*); updated visibility and locations.
Removed ComposeApp Module
sample/composeApp/build.gradle.kts, sample/composeApp/src/*/kotlin/...
Deleted monolithic multiplatform module; removed platform-specific implementations and central App entry point.
SavedState Infrastructure Removal
tiamat/api/{android,jvm}/tiamat.api, tiamat/api/tiamat.klib.api, tiamat/src/commonMain/kotlin/com/composegears/tiamat/navigation/SavedState.kt, tiamat/src/commonTest/kotlin/com/composegears/tiamat/navigation/SavedStateRecordTests.kt
Removed mutable state APIs: MutableSavedState, SavedStateRecord, recordOf, asStateFlow; retained immutable SavedState factory.
Entry Lifecycle & State Management
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposableNavEntry.kt, tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposableNavDestination.kt
Reworked entry content composition with dedicated lifecycle and SavedStateRegistryOwner binding; added SaveableStateProvider for entry-scoped state; removed saveableViewModel function.
Tiamat Compiler Plugin
tiamat-destinations/compiler-plugin/src/main/kotlin/.../TiamatDestinationsComponentRegistrar.kt, tiamat-destinations/compiler-plugin/api/tiamat-destinations-compiler.api, tiamat-destinations/tiamat-destinations/build.gradle.kts
Added pluginId property to component registrar; updated DSL usage for JVM target configuration.
Tiamat Core Build
tiamat/build.gradle.kts
Simplified JVM target configuration by moving from compilations block to direct compilerOptions.

Possibly related PRs

Suggested reviewers

  • egorikftp

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 2.94% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The PR successfully addresses both linked issues: #318 refactoring sample structure into app-android/ios/wasm/jvm/shared modules, and #312 fixing Hilt integration via custom defaultCreationExtras.
Out of Scope Changes check ✅ Passed The PR contains comprehensive and focused changes aligned with the objectives: sample structure refactoring, Hilt fixes, SavedStateHandle updates, and version upgrades. Changes appear intentional and within scope.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title 'kotlin 2.3.0 structure migration' directly summarizes the main change: migrating the project structure to align with Kotlin 2.3.0 and Compose 1.10+ requirements, which is clearly reflected in the PR objectives and the comprehensive restructuring of the sample modules.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/#318-kotlin-2.3.0-structure-migration

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🧹 Nitpick comments (6)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/actions/NavActionReplace.kt (1)

1-1: LGTM! Well-structured navigation destination.

The renaming from NavReplace to NavActionReplace improves consistency with the new project structure. The navigation setup correctly demonstrates the replace action with proper controller configuration and destination registration.

Optional: Consider updating the nav controller key for consistency

For naming consistency with the renamed destination, you might update the key on line 24:

             val nc = rememberNavController(
-                key = "Replace nav controller",
+                key = "NavActionReplace nav controller",
                 startDestination = NavActionReplaceScreen1,
             )

This is purely cosmetic and doesn't affect functionality.

Also applies to: 20-41

sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/data/NavDataFreeArgs.kt (1)

95-95: Consider using val instead of var.

The args variable is assigned once and never reassigned. Following Kotlin best practices, declare it as val for immutability.

🔎 Apply this diff:
-    var args = freeArgs<Any>()
+    val args = freeArgs<Any>()
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/actions/NavActionRoute.kt (1)

137-137: Consider documenting or removing the unused generic type parameter.

The <String> generic type parameter on NavActionRouteScreen3 doesn't appear to be utilized within the destination's composable body. If this is intentional for demonstration purposes, consider adding a comment explaining it. Otherwise, it could be removed for clarity.

🔎 View suggested change if the type parameter is not needed:
-private val NavActionRouteScreen3 by navDestination<String> {
+private val NavActionRouteScreen3 by navDestination {
sample/shared/build.gradle.kts (1)

13-23: Consider setting JVM target for the jvm() target as well.

The Android library sets jvmTarget.set(JvmTarget.JVM_17), but the jvm() target at line 14 doesn't explicitly set its JVM target. For consistency, consider configuring the JVM target for both.

🔎 Apply this diff to set JVM target consistently:
 kotlin {
-    jvm()
+    jvm {
+        compilerOptions {
+            jvmTarget.set(JvmTarget.JVM_17)
+        }
+    }
     androidLibrary {
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/state/StateViewModel.kt (1)

152-178: Consider consolidating SimpleViewModel and SharedSimpleViewModel.

Both classes have identical implementations - they differ only in how they're instantiated (screen-scoped vs nav-controller-scoped). Consider using a single class with a descriptive parameter or comment explaining the scoping difference occurs at the call site.

🔎 Possible consolidation:
-class SimpleViewModel : ViewModel() {
+class CounterViewModel : ViewModel() {
     private val _counter = MutableStateFlow(0)
     val counter = _counter.asStateFlow()

     init {
         viewModelScope.launch {
             while (isActive) {
                 _counter.value++
                 delay(1000)
             }
         }
     }
 }

-class SharedSimpleViewModel : ViewModel() {
-    private val _counter = MutableStateFlow(0)
-    val counter = _counter.asStateFlow()
-
-    init {
-        viewModelScope.launch {
-            while (isActive) {
-                _counter.value++
-                delay(1000)
-            }
-        }
-    }
-}

Then use CounterViewModel for both cases, where the scoping is determined by the call site:

  • viewModel { CounterViewModel() } for screen-scoped
  • viewModel(nc) { CounterViewModel() } for nav-controller-scoped (shared)

However, keeping them separate may be intentional for demonstration purposes to clearly show the different ViewModel types in a sample app.

sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/App.kt (1)

22-22: Consider optimizing array concatenation.

The spread operator suppression on line 22 and the array concatenation on lines 40-41 suggest awareness of potential performance implications. While acceptable for typical feature counts, consider using a builder pattern for cleaner, more efficient array construction.

🔎 Alternative approach:
-@Suppress("SpreadOperator")
 fun App(
     platformFeatures: PlatformFeatures? = null,
     navControllerConfig: NavController.() -> Unit = {},
     overlay: @Composable (navController: NavController) -> Unit = {},
 ) {
     CompositionLocalProvider(LocalPlatformFeatures provides platformFeatures) {
         AppTheme {
             Surface(Modifier.fillMaxSize()) {
                 val rootNavController = rememberNavController(
                     key = "rootNavController",
                     startDestination = HomeScreen,
                     configuration = navControllerConfig
                 )
+                val destinations = buildList {
+                    add(HomeScreen)
+                    addAll(HomeItems.flatMap { it.items }.map { it.destination })
+                    platformFeatures?.features?.forEach { add(it.destination) }
+                }.toTypedArray()
                 Navigation(
                     navController = rootNavController,
-                    destinations = arrayOf(
-                        HomeScreen,
-                        *HomeItems.flatMap { it.items }.map { it.destination }.toTypedArray(),
-                        *(platformFeatures?.features?.map { it.destination }?.toTypedArray() ?: emptyArray())
-                    ),
+                    destinations = destinations,
                     modifier = Modifier.fillMaxSize(),
                     contentTransformProvider = { navigationPlatformDefault(it) }
                 )

Also applies to: 38-42

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 53ac5ca and 76f61ea.

⛔ Files ignored due to path filters (2)
  • sample/app-ios/iosApp/Assets.xcassets/AppIcon.appiconset/app-icon-1024.png is excluded by !**/*.png
  • sample/app-wasm/src/wasmJsMain/resources/images/tiamat.png is excluded by !**/*.png
📒 Files selected for processing (74)
  • .github/workflows/verify.yml (2 hunks)
  • .run/App Android.run.xml (1 hunks)
  • .run/App Desktop + Hot Reload.run.xml (1 hunks)
  • .run/App Desktop.run.xml (1 hunks)
  • .run/App Web.run.xml (1 hunks)
  • .run/App iOs.run.xml (1 hunks)
  • .run/Clean.run.xml (1 hunks)
  • .run/Run Abi Update.run.xml (1 hunks)
  • .run/Run Jvm Tests.run.xml (1 hunks)
  • .run/Run Static Analysis.run.xml (1 hunks)
  • README.md (0 hunks)
  • build.gradle.kts (1 hunks)
  • gradle.properties (2 hunks)
  • gradle/libs.versions.toml (3 hunks)
  • gradle/tiamat.toml (1 hunks)
  • sample/app-android/build.gradle.kts (1 hunks)
  • sample/app-android/src/main/AndroidManifest.xml (1 hunks)
  • sample/app-android/src/main/kotlin/composegears/tiamat/app/MainActivity.kt (2 hunks)
  • sample/app-android/src/main/kotlin/composegears/tiamat/app/TiamatSampleApp.kt (1 hunks)
  • sample/app-android/src/main/kotlin/composegears/tiamat/app/platform/CameraXLifecycleScreen.kt (2 hunks)
  • sample/app-android/src/main/kotlin/composegears/tiamat/app/platform/HiltScreen.kt (1 hunks)
  • sample/app-android/src/main/kotlin/composegears/tiamat/app/platform/PredictiveBack.android.kt (1 hunks)
  • sample/app-android/src/main/kotlin/composegears/tiamat/app/platform/icons/FlipCameraAndroid.kt (1 hunks)
  • sample/app-android/src/main/kotlin/composegears/tiamat/app/platform/icons/Lens.kt (1 hunks)
  • sample/app-ios/Tiamat.xcodeproj/project.pbxproj (5 hunks)
  • sample/app-ios/iosApp/ContentView.swift (1 hunks)
  • sample/app-ios/iosApp/iOSApp.swift (1 hunks)
  • sample/app-jvm/build.gradle.kts (1 hunks)
  • sample/app-jvm/kotlin/main.kt (1 hunks)
  • sample/app-wasm/build.gradle.kts (1 hunks)
  • sample/composeApp/build.gradle.kts (0 hunks)
  • sample/composeApp/src/androidMain/kotlin/composegears/tiamat/sample/platform/Platform.android.kt (0 hunks)
  • sample/composeApp/src/commonMain/kotlin/composegears/tiamat/sample/App.kt (0 hunks)
  • sample/composeApp/src/commonMain/kotlin/composegears/tiamat/sample/platform/Platform.kt (0 hunks)
  • sample/composeApp/src/iosMain/kotlin/composegears/tiamat/sample/MainViewController.kt (0 hunks)
  • sample/composeApp/src/iosMain/kotlin/composegears/tiamat/sample/platform/Platform.ios.kt (0 hunks)
  • sample/composeApp/src/jvmMain/kotlin/composegears/tiamat/sample/platform/Platform.jvm.kt (0 hunks)
  • sample/composeApp/src/wasmJsMain/kotlin/composegears/tiamat/sample/platform/Platform.wasmJs.kt (0 hunks)
  • sample/shared/build.gradle.kts (1 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/App.kt (1 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/HomeScreen.kt (4 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/layouts/LayoutAdaptiveListDetails.kt (8 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/layouts/LayoutOverlayDestinations.kt (10 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/layouts/LayoutTwoPane.kt (6 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/actions/NavActionForwardAndBack.kt (6 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/actions/NavActionReplace.kt (6 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/actions/NavActionRoute.kt (8 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/animations/NavAnimationCustom.kt (9 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/animations/NavAnimationSharedElementTransition.kt (7 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/data/NavDataArgs.kt (5 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/data/NavDataFreeArgs.kt (5 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/data/NavDataResult.kt (6 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/data/NavDataSerializable.kt (7 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/patterns/NavPatternNested.kt (6 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/patterns/NavPatternTabs.kt (7 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/other/OtherDestinationsGraph.kt (6 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/other/OtherExtensions.kt (7 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/other/OtherNavStackAlteration.kt (10 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/state/StateCustomSaveState.kt (7 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/state/StateRetain.kt (5 hunks)
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/state/StateViewModel.kt (10 hunks)
  • sample/shared/src/iosMain/kotlin/composegears/tiamat/sample/MainViewController.kt (1 hunks)
  • settings.gradle.kts (1 hunks)
  • tiamat-destinations/compiler-plugin/api/tiamat-destinations-compiler.api (1 hunks)
  • tiamat-destinations/compiler-plugin/src/main/kotlin/com/composegears/tiamat/destinations/TiamatDestinationsComponentRegistrar.kt (1 hunks)
  • tiamat-destinations/tiamat-destinations/build.gradle.kts (1 hunks)
  • tiamat/api/android/tiamat.api (0 hunks)
  • tiamat/api/jvm/tiamat.api (0 hunks)
  • tiamat/api/tiamat.klib.api (0 hunks)
  • tiamat/build.gradle.kts (1 hunks)
  • tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposableNavDestination.kt (0 hunks)
  • tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposableNavEntry.kt (3 hunks)
  • tiamat/src/commonMain/kotlin/com/composegears/tiamat/navigation/SavedState.kt (1 hunks)
  • tiamat/src/commonTest/kotlin/com/composegears/tiamat/navigation/SavedStateRecordTests.kt (0 hunks)
💤 Files with no reviewable changes (14)
  • sample/composeApp/src/jvmMain/kotlin/composegears/tiamat/sample/platform/Platform.jvm.kt
  • sample/composeApp/src/iosMain/kotlin/composegears/tiamat/sample/MainViewController.kt
  • tiamat/src/commonTest/kotlin/com/composegears/tiamat/navigation/SavedStateRecordTests.kt
  • tiamat/api/android/tiamat.api
  • tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposableNavDestination.kt
  • sample/composeApp/src/androidMain/kotlin/composegears/tiamat/sample/platform/Platform.android.kt
  • README.md
  • sample/composeApp/src/commonMain/kotlin/composegears/tiamat/sample/App.kt
  • sample/composeApp/src/commonMain/kotlin/composegears/tiamat/sample/platform/Platform.kt
  • sample/composeApp/src/wasmJsMain/kotlin/composegears/tiamat/sample/platform/Platform.wasmJs.kt
  • sample/composeApp/build.gradle.kts
  • sample/composeApp/src/iosMain/kotlin/composegears/tiamat/sample/platform/Platform.ios.kt
  • tiamat/api/jvm/tiamat.api
  • tiamat/api/tiamat.klib.api
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-09-29T20:14:34.056Z
Learnt from: vkatz
Repo: ComposeGears/Tiamat PR: 273
File: tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposableNavDestination.kt:114-129
Timestamp: 2025-09-29T20:14:34.056Z
Learning: In Tiamat navigation framework, MutableSavedState used with rememberSaveable in saveableViewModel function is intentional and works correctly. The MutableSavedState doesn't need to be directly serializable because state persistence is handled through the NavEntry.setSavedStateSaver mechanism and NavController's custom Saver implementation, not through rememberSaveable's direct serialization.

Applied to files:

  • tiamat/src/commonMain/kotlin/com/composegears/tiamat/navigation/SavedState.kt
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/data/NavDataSerializable.kt
  • tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposableNavEntry.kt
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/state/StateRetain.kt
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/state/StateCustomSaveState.kt
  • sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/state/StateViewModel.kt
🧬 Code graph analysis (20)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/animations/NavAnimationSharedElementTransition.kt (2)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/CoreComponents.kt (1)
  • Screen (123-165)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/patterns/NavPatternTabs.kt (3)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/CoreComponents.kt (1)
  • Screen (123-165)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/AppTheme.kt (1)
  • AppTheme (97-106)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/actions/NavActionReplace.kt (2)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/CoreComponents.kt (1)
  • Screen (123-165)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/layouts/LayoutAdaptiveListDetails.kt (2)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/AppTheme.kt (1)
  • AppTheme (97-106)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/data/NavDataSerializable.kt (2)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposableNavDestination.kt (2)
  • navArgs (42-44)
  • freeArgs (73-76)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposableNavEntry.kt (1)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/NavDestination.kt (1)
  • Content (51-54)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/layouts/LayoutOverlayDestinations.kt (1)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/CoreComponents.kt (2)
  • Screen (123-165)
  • AppButton (41-60)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/App.kt (1)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/AppTheme.kt (1)
  • AppTheme (97-106)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/animations/NavAnimationCustom.kt (3)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/CoreComponents.kt (1)
  • Screen (123-165)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/AppTheme.kt (1)
  • AppTheme (97-106)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/other/OtherExtensions.kt (3)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/CoreComponents.kt (1)
  • Screen (123-165)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/AppTheme.kt (1)
  • AppTheme (97-106)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/state/StateViewModel.kt (4)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/CoreComponents.kt (1)
  • Screen (123-165)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposableNavDestination.kt (1)
  • navController (15-16)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/AppTheme.kt (1)
  • AppTheme (97-106)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/actions/NavActionRoute.kt (2)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/CoreComponents.kt (2)
  • AppButton (41-60)
  • VSpacer (21-24)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/layouts/LayoutTwoPane.kt (3)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/CoreComponents.kt (1)
  • Screen (123-165)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/AppTheme.kt (1)
  • AppTheme (97-106)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/data/NavDataArgs.kt (2)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/CoreComponents.kt (1)
  • Screen (123-165)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/HomeScreen.kt (1)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposableNavDestination.kt (1)
  • navController (15-16)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/actions/NavActionForwardAndBack.kt (3)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/CoreComponents.kt (1)
  • Screen (123-165)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/AppTheme.kt (1)
  • AppTheme (97-106)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/data/NavDataResult.kt (4)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/CoreComponents.kt (2)
  • Screen (123-165)
  • VSpacer (21-24)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposableNavDestination.kt (1)
  • navResult (93-96)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/AppTheme.kt (1)
  • AppTheme (97-106)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
sample/app-android/src/main/kotlin/composegears/tiamat/app/MainActivity.kt (1)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/App.kt (1)
  • App (23-50)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/other/OtherNavStackAlteration.kt (3)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/CoreComponents.kt (1)
  • Screen (123-165)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/AppTheme.kt (1)
  • AppTheme (97-106)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/content/navigation/patterns/NavPatternNested.kt (2)
sample/shared/src/commonMain/kotlin/composegears/tiamat/sample/ui/AppTheme.kt (1)
  • AppTheme (97-106)
tiamat/src/commonMain/kotlin/com/composegears/tiamat/compose/ComposablePreview.kt (1)
  • TiamatPreview (53-70)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: verify-android-jvm-wasm
  • GitHub Check: verify-ios

buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_IDENTITY = "Developer ID Application";
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Find and read the project file around lines 301 and 326
FILE_PATH="sample/app-ios/Tiamat.xcodeproj/project.pbxproj"
if [ -f "$FILE_PATH" ]; then
  echo "=== Lines 295-310 ==="
  sed -n '295,310p' "$FILE_PATH"
  echo ""
  echo "=== Lines 320-335 ==="
  sed -n '320,335p' "$FILE_PATH"
  echo ""
  echo "=== Searching for all CODE_SIGN_IDENTITY occurrences ==="
  rg "CODE_SIGN_IDENTITY" "$FILE_PATH" -n
else
  echo "File not found at $FILE_PATH"
  # Try to find the project file
  find . -name "project.pbxproj" -type f 2>/dev/null | head -5
fi

Repository: ComposeGears/Tiamat

Length of output: 1579


Fix iOS code signing certificate: "Developer ID Application" is for macOS, not iOS.

"Developer ID Application" is a macOS certificate type for distribution outside the App Store. For iOS projects, use:

  • Debug: "Apple Development" (or "iPhone Developer" for legacy projects)
  • Release: "Apple Distribution" (or "iPhone Distribution" for legacy projects)

Developer ID Application certificates are for Mac applications distributed outside the App Store, not for iOS. Apple experts strongly recommend against using Developer ID for day-to-day development and recommend using Apple Development for local development instead.

🤖 Prompt for AI Agents
In sample/app-ios/Tiamat.xcodeproj/project.pbxproj around line 301, the
CODE_SIGN_IDENTITY is set to "Developer ID Application" which is a macOS
certificate and not valid for iOS; change the identity to the appropriate iOS
certificates—use "Apple Development" (or "iPhone Developer" for legacy) for
Debug builds and "Apple Distribution" (or "iPhone Distribution" for legacy) for
Release builds, updating the CODE_SIGN_IDENTITY entries (or build
configuration-specific settings) accordingly so Debug and Release use the
correct iOS identities.

@@ -0,0 +1,8 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="App iOs" type="AppleRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Tiamat" TARGET_NAME="iosApp" CONFIG_NAME="Debug" IS_LOCATION_SIMULATION_SUPPORTED="true" SCHEME_NAME="App iOs" IS_LOCATION_SIMULATION_ALLOWED="true" LOCATION_SCENARIO_ID="com.apple.dt.IDEFoundation.CurrentLocationScenarioIdentifier" LOCATION_SCENARIO_TYPE="1" APPLICATION_LANGUAGE="IDELaunchSchemeLanguageUseSystemLanguage" APPLICATION_REGION="" DEVELOPMENT_TEAM="${TEAM_ID}" RUN_TARGET_PROJECT_NAME="Tiamat" RUN_TARGET_NAME="iosApp" MAKE_ACTIVE="TRUE" SHOULD_DEBUG_EXTENSIONS="false">
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

File can be renamed into iOS

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'v add separate file name prefixes to keep em in order "App / Run"

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mean not 'iOs' but 'iOS'

alias(libs.plugins.compose.compiler)
}

sourceSets.main {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks redundant

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

source needed to add kotlin folder, compiler in order to compile app composable
image

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's should available by default

@vkatz vkatz merged commit f0201c7 into main Dec 22, 2025
8 checks passed
@vkatz vkatz deleted the feature/#318-kotlin-2.3.0-structure-migration branch December 22, 2025 12:27
@coderabbitai coderabbitai bot mentioned this pull request Dec 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugfix Something isn't working housekeeping

Projects

None yet

Development

Successfully merging this pull request may close these issues.

#2.2.0 refactor sample structure according kotlin 2.3.0 rq's #2.2.0 Update kotlin dependency to 1.10.+ #2.2.0 Fix hilt integration

3 participants