🐛 Fix iOS lags + 🔄 Update dependencies #49
Conversation
WalkthroughThis PR modernizes the project's build infrastructure by updating the Gradle wrapper (8.13→9.4.1), bumping key dependencies including Kotlin (2.2.10→2.3.20) and Android SDK (35→36), migrating from Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Code Review
This pull request updates build logic, dependency versions, and the Gradle wrapper, while switching iOS frameworks to static linking. Feedback identifies several critical issues, primarily the use of non-existent versions for the Android SDK, Kotlin, Compose Multiplatform, and Gradle. Additionally, the changes introduce compilation and interoperability errors regarding the Instant type in both Kotlin and Swift, and the removal of x86 targets drops support for Intel-based Mac simulators.
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@build-logic/convention/src/main/kotlin/config/KmpConfig.kt`:
- Around line 49-52: The framework is being built static (see the
binaries.framework block with baseName = nativeName, isStatic = true,
export(libs.mokoResources)), but static Apple frameworks can’t embed
moko-resources, so add an Xcode "Run Script" build phase to copy the framework
resources into the app bundle after Kotlin compilation; implement a script that
runs in the app target (e.g., named copy${nativeName}FrameworkResourcesToApp or
copyFrameworkResourcesToApp) which locates the built ${nativeName}.framework
Resources directory and copies its contents into
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH} (or use the standard
FRAMEWORKS_FOLDER_PATH/Resources paths), and ensure this phase runs after the
Kotlin/Gradle build step so strings/images/localizations from moko-resources are
available at runtime.
In `@gradle/libs.versions.toml`:
- Line 33: The moko-resources entry in the version catalog (mokoResources) is
incompatible with Kotlin/Native because moko-resources 0.26.1 was compiled
against Kotlin 2.1.0; update the project so Kotlin and the library use the same
Kotlin compiler version: either bump mokoResources in libs.versions.toml to a
moko-resources release built for Kotlin 2.3.x (preferred) or revert the project
Kotlin version to 2.1.0; ensure the static framework export in KmpConfig.kt
remains intact and run a clean rebuild to verify no KLIB incompatibility errors
on iOS/macOS.
In `@gradle/wrapper/gradle-wrapper.properties`:
- Line 3: The Gradle wrapper version in distributionUrl
(gradle-wrapper.properties) is set to 9.4.1 which is incompatible with the
pinned Kotlin version in gradle/libs.versions.toml (Kotlin 2.3.10); either
downgrade the wrapper to a supported Gradle ≤9.0.0 by updating distributionUrl
and regenerating gradlew and gradlew.bat, or upgrade the Kotlin and Compose
Multiplatform versions in gradle/libs.versions.toml to releases JetBrains
documents as compatible with Gradle 9.4.1 and then regenerate the wrapper
scripts; ensure the change is consistent across distributionUrl,
gradle/libs.versions.toml (Kotlin version), and the regenerated gradlew files.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 4e0c6d6b-1300-40a9-97b4-13bec02d5044
⛔ Files ignored due to path filters (1)
gradle/wrapper/gradle-wrapper.jaris excluded by!**/*.jar
📒 Files selected for processing (11)
build-logic/convention/src/main/kotlin/config/KmpConfig.ktbuild-logic/convention/src/main/kotlin/extensions/PojectExtensions.ktbuild.gradle.ktsgradle.propertiesgradle/libs.versions.tomlgradle/wrapper/gradle-wrapper.propertiesgradlewgradlew.batios/PresentationLayer/UIToolkit/Sources/UIToolkit/Extensions/View+Extensions.swiftshared/umbrella/src/iosMain/kotlin/kmp/shared/umbrella/KotlinDateTime.ktshared/umbrella/src/iosMain/swift/extensions/Interoperability+Extensions.swift
💤 Files with no reviewable changes (1)
- gradle.properties
| it.binaries.framework { | ||
| baseName = nativeName | ||
| isStatic = false | ||
| isStatic = true | ||
| export(libs.mokoResources) |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Verify that iOS/tvOS integration copies moko-resources when the KMP framework is static.
rg -n -C2 --glob '!**/build/**' \
'copy[A-Za-z0-9]*FrameworkResourcesToApp|copyFrameworkResourcesToApp|moko\.resources' \
--glob '*.pbxproj' \
--glob 'Podfile' \
--glob 'Podfile.lock' \
--glob '*.kts' \
--glob '*.gradle' || true
echo
echo "Expected: at least one Xcode/Pod build phase references the generated copy task."Repository: MateeDevs/MateeStarter
Length of output: 147
Add Xcode build phase to copy moko-resources from the static framework.
Line 51 makes the Apple framework static while exporting libs.mokoResources. Per moko-resources documentation, static Apple frameworks cannot carry their own resources; the app must run a separate Xcode build phase (e.g., copy<FrameworkName>FrameworkResourcesToApp or copyFrameworkResourcesToApp) after Kotlin compilation to copy resources in. No such configuration was found in the repository. Without this build phase, iOS/tvOS will lose access to strings, images, and localizations at runtime.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@build-logic/convention/src/main/kotlin/config/KmpConfig.kt` around lines 49 -
52, The framework is being built static (see the binaries.framework block with
baseName = nativeName, isStatic = true, export(libs.mokoResources)), but static
Apple frameworks can’t embed moko-resources, so add an Xcode "Run Script" build
phase to copy the framework resources into the app bundle after Kotlin
compilation; implement a script that runs in the app target (e.g., named
copy${nativeName}FrameworkResourcesToApp or copyFrameworkResourcesToApp) which
locates the built ${nativeName}.framework Resources directory and copies its
contents into ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH} (or use
the standard FRAMEWORKS_FOLDER_PATH/Resources paths), and ensure this phase runs
after the Kotlin/Gradle build step so strings/images/localizations from
moko-resources are available at runtime.
There was a problem hiding this comment.
Actionable comments posted: 5
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
android/shared/src/main/kotlin/kmp/android/shared/navigation/Destination.kt (1)
70-70: 🧹 Nitpick | 🔵 TrivialTODO: Type-safe route argument construction.
The TODO comment indicates a known limitation: there's no compile-time guarantee that route arguments are provided in the correct order and type when calling
Destination.invoke(...).Consider implementing a type-safe builder pattern or using Kotlin's context receivers/contracts to enforce correct argument types at compile time. Would you like me to open an issue to track this improvement or help design a type-safe alternative?
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@android/shared/src/main/kotlin/kmp/android/shared/navigation/Destination.kt` at line 70, The TODO notes that Destination.invoke(...) allows untyped/ordered arguments; to fix, make route construction type-safe by introducing a typed RouteBuilder/Factory per route and stop exposing the raw Destination.invoke signature: add a generic RouteBuilder<T> (or per-route sealed/data class) that enforces argument names/types and order and provide route-specific factory functions (e.g., MyRoute.build(...) or MyRoute.Factory.create(...)) that return a Destination instance; change Destination.invoke to internal/private and replace callers to use the new route-specific builders so argument types are checked at compile time (reference symbols: Destination.invoke, Destination class, RouteBuilder/Factory and route-specific factory function names).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@android/shared/src/main/kotlin/kmp/android/shared/navigation/Destination.kt`:
- Around line 101-120: The current else branch in the args building logic
(inside the mapping over routeArguments.zip(arguments)) converts a null value
for a nullable argument into the literal string "null" via value.toString();
change this so that when value == null and arg.argument.isNullable is true you
omit the parameter entirely (return an empty list) instead of
listOf(Pair(arg.name, value.toString())), while keeping the existing require
check for non-nullable args; update the mapping in the block referencing
routeArguments, arguments, arg and value so nullable-null returns no Pair and
only non-null values are turned into Pair(arg.name, value.toString()).
In
`@shared/samplefeature/src/commonTest/kotlin/kmp/shared/samplefeature/presentation/vm/SampleFeatureViewModelTest.kt`:
- Around line 135-146: The test uses a fixed kotlinx.coroutines.delay(50) to
wait for the collector to start (around the eventChannel/eventJob and
viewModel.events.collect logic), which is flaky; replace the delay with a
deterministic handshake: create a CompletableDeferred<Unit> (e.g.,
collectorReady), complete it inside the launched collector coroutine immediately
before calling viewModel.events.collect, and then await
collectorReady.complete() (collectorReady.await()) in the test instead of using
delay; this ensures the collector in SampleFeatureViewModelTest is started
deterministically before triggering intents while keeping the existing
eventChannel/eventJob and collect logic intact.
In
`@shared/umbrella/src/androidUnitTest/kotlin/konsistTest/domain/usecase/UseCaseTest.kt`:
- Around line 90-93: The predicate passed to withParameters is unsafe because it
calls params.first() and can throw when params is empty; update the lambda in
UseCaseTest.kt (the withParameters { params -> ... } block) to guard against
empty parameter lists (e.g., return false when params.isEmpty()) or use safe
access like params.firstOrNull() / params.singleOrNull() and then check the
found param's type against paramDateClass.fullyQualifiedName; ensure the
predicate returns a Boolean without ever calling first() on an empty collection.
In `@shared/umbrella/src/iosMain/kotlin/kmp/shared/umbrella/KotlinDateTime.kt`:
- Around line 13-15: The current helper fun Instant.Companion.dummy(): Nothing =
TODO() throws NotImplementedError; change it to a safe no-op by updating the
signature to return Unit and implementing an empty body (e.g., fun
Instant.Companion.dummy(): Unit = Unit) so it still forces companion inclusion
for framework export but no longer contains a crash path.
In `@shared/umbrella/src/iosMain/kotlin/kmp/shared/umbrella/SwiftCoroutines.kt`:
- Around line 26-30: The iosDefaultScope currently recreates a SupervisorJob on
every access because coroutineContext is a getter; change it to hold a single
stable context by creating the SupervisorJob once and using that same Job plus
Dispatchers.Default for the CoroutineScope. Specifically, replace the computed
coroutineContext getter with a single initialized context (or construct
CoroutineScope(SupervisorJob() + Dispatchers.Default)) so that iosDefaultScope,
its SupervisorJob and coroutineContext remain stable across accesses and support
proper cancellation and lifecycle management.
---
Outside diff comments:
In `@android/shared/src/main/kotlin/kmp/android/shared/navigation/Destination.kt`:
- Line 70: The TODO notes that Destination.invoke(...) allows untyped/ordered
arguments; to fix, make route construction type-safe by introducing a typed
RouteBuilder/Factory per route and stop exposing the raw Destination.invoke
signature: add a generic RouteBuilder<T> (or per-route sealed/data class) that
enforces argument names/types and order and provide route-specific factory
functions (e.g., MyRoute.build(...) or MyRoute.Factory.create(...)) that return
a Destination instance; change Destination.invoke to internal/private and
replace callers to use the new route-specific builders so argument types are
checked at compile time (reference symbols: Destination.invoke, Destination
class, RouteBuilder/Factory and route-specific factory function names).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: e9e9813d-ceac-4cb0-bb57-32c49af92e3e
📒 Files selected for processing (71)
.editorconfigandroid/app/src/androidTest/kotlin/kmp/android/extension/AndroidComposeTestRule.ktandroid/app/src/androidTest/kotlin/kmp/android/extension/ComposeContentTestRule.ktandroid/app/src/androidTest/kotlin/kmp/android/extension/SemanticsNodeInteractionsProvider.ktandroid/app/src/androidTest/kotlin/kmp/android/screen/Screen.ktandroid/app/src/androidTest/kotlin/kmp/android/util/TestRunner.ktandroid/app/src/main/kotlin/kmp/android/MainApp.ktandroid/app/src/main/kotlin/kmp/android/di/RootModule.ktandroid/samplefeature/src/main/kotlin/kmp/android/samplefeature/navigation/SampleFeatureGraph.ktandroid/samplefeature/src/main/kotlin/kmp/android/samplefeature/navigation/SampleFeatureNavigation.ktandroid/samplefeature/src/main/kotlin/kmp/android/samplefeature/ui/SampleFeatureMain.ktandroid/shared/src/main/kotlin/kmp/android/shared/navigation/Destination.ktshared/analytics/src/androidMain/kotlin/kmp/shared/analytics/data/provider/AndroidAnalyticsProviderImpl.ktshared/analytics/src/androidMain/kotlin/kmp/shared/analytics/di/AnalyticsModule.android.ktshared/analytics/src/commonMain/kotlin/kmp/shared/analytics/data/repository/AnalyticsRepositoryImpl.ktshared/analytics/src/commonMain/kotlin/kmp/shared/analytics/di/AnalyticsModule.ktshared/analytics/src/commonMain/kotlin/kmp/shared/analytics/domain/model/ToastAnalytics.ktshared/analytics/src/commonMain/kotlin/kmp/shared/analytics/domain/usecase/TrackAnalyticsEventUseCase.ktshared/auth/src/androidMain/kotlin/kmp/shared/auth/di/AuthModule.android.ktshared/auth/src/commonMain/kotlin/kmp/shared/auth/data/provider/AuthProviderImpl.ktshared/auth/src/commonMain/kotlin/kmp/shared/auth/data/remote/AuthService.ktshared/auth/src/commonMain/kotlin/kmp/shared/auth/data/remote/MockTokenRefresher.ktshared/auth/src/commonMain/kotlin/kmp/shared/auth/di/AuthModule.ktshared/auth/src/iosMain/kotlin/kmp/shared/auth/di/AuthModule.ios.ktshared/base/build.gradle.ktsshared/base/src/androidMain/kotlin/kmp/shared/base/data/preferences/SecureSharedPreferences.ktshared/base/src/androidMain/kotlin/kmp/shared/base/data/preferences/SharedPreferencesFactory.ktshared/base/src/androidMain/kotlin/kmp/shared/base/data/preferences/SharedPreferencesType.ktshared/base/src/androidMain/kotlin/kmp/shared/base/di/BaseModule.android.ktshared/base/src/androidMain/kotlin/kmp/shared/base/domain/system/ConfigImpl.ktshared/base/src/androidMain/kotlin/kmp/shared/base/presentation/vm/BaseScopedViewModel.android.ktshared/base/src/commonMain/kotlin/kmp/shared/base/data/provider/AuthProvider.ktshared/base/src/commonMain/kotlin/kmp/shared/base/data/remote/HttpClient.ktshared/base/src/commonMain/kotlin/kmp/shared/base/di/BaseModule.ktshared/base/src/commonMain/kotlin/kmp/shared/base/domain/error/domain/BackendError.ktshared/base/src/commonMain/kotlin/kmp/shared/base/domain/error/domain/CommonError.ktshared/base/src/commonMain/kotlin/kmp/shared/base/domain/error/util/Network.ktshared/base/src/commonMain/kotlin/kmp/shared/base/domain/model/Result.ktshared/base/src/commonMain/kotlin/kmp/shared/base/domain/system/ApiVariant.ktshared/base/src/commonMain/kotlin/kmp/shared/base/domain/util/extension/Result.ktshared/base/src/commonMain/kotlin/kmp/shared/base/presentation/ui/TestTag.ktshared/base/src/commonMain/kotlin/kmp/shared/base/presentation/ui/Theme.ktshared/base/src/commonMain/kotlin/kmp/shared/base/presentation/ui/Values.ktshared/base/src/commonMain/kotlin/kmp/shared/base/presentation/vm/BaseScopedViewModel.ktshared/base/src/iosMain/kotlin/kmp/shared/base/data/keychain/KeychainFactory.ktshared/base/src/iosMain/kotlin/kmp/shared/base/data/userdefaults/UserDefaultsFactory.ktshared/base/src/iosMain/kotlin/kmp/shared/base/di/BaseModule.ios.ktshared/base/src/iosMain/kotlin/kmp/shared/base/presentation/ui/PlatformSpecificButtonIndication.ios.ktshared/base/src/iosMain/kotlin/kmp/shared/base/presentation/vm/BaseScopedViewModel.ios.ktshared/samplefeature/src/commonMain/kotlin/kmp/shared/samplefeature/data/model/JokeDto.ktshared/samplefeature/src/commonMain/kotlin/kmp/shared/samplefeature/data/repository/JokeRepositoryImpl.ktshared/samplefeature/src/commonMain/kotlin/kmp/shared/samplefeature/data/service/JokeService.ktshared/samplefeature/src/commonMain/kotlin/kmp/shared/samplefeature/data/source/impl/JokeSourceImpl.ktshared/samplefeature/src/commonMain/kotlin/kmp/shared/samplefeature/di/SampleFeatureModule.ktshared/samplefeature/src/commonMain/kotlin/kmp/shared/samplefeature/domain/usecase/GetRandomJokeUseCase.ktshared/samplefeature/src/commonMain/kotlin/kmp/shared/samplefeature/presentation/ui/test/TestTags.ktshared/samplefeature/src/commonMain/kotlin/kmp/shared/samplefeature/presentation/vm/SampleFeatureViewModel.ktshared/samplefeature/src/commonTest/kotlin/kmp/shared/samplefeature/data/model/JokeConversionTest.ktshared/samplefeature/src/commonTest/kotlin/kmp/shared/samplefeature/domain/usecase/GetRandomJokeUseCaseTest.ktshared/samplefeature/src/commonTest/kotlin/kmp/shared/samplefeature/presentation/vm/SampleFeatureViewModelTest.ktshared/samplefeature/src/iosMain/kotlin/kmp/shared/samplefeature/presentation/SampleFeatureMainScreenViewController.ktshared/umbrella/src/androidUnitTest/kotlin/konsistTest/android/compose/ComposeTest.ktshared/umbrella/src/androidUnitTest/kotlin/konsistTest/common/GeneralTest.ktshared/umbrella/src/androidUnitTest/kotlin/konsistTest/data/DataTest.ktshared/umbrella/src/androidUnitTest/kotlin/konsistTest/di/KoinTest.ktshared/umbrella/src/androidUnitTest/kotlin/konsistTest/domain/model/DomainModelsTest.ktshared/umbrella/src/androidUnitTest/kotlin/konsistTest/domain/usecase/UseCaseTest.ktshared/umbrella/src/commonMain/kotlin/kmp/shared/umbrella/di/UmbrellaModule.ktshared/umbrella/src/iosMain/kotlin/kmp/shared/umbrella/KotlinDateTime.ktshared/umbrella/src/iosMain/kotlin/kmp/shared/umbrella/SwiftCoroutines.ktshared/umbrella/src/iosMain/kotlin/kmp/shared/umbrella/di/KoinIOS.kt
💤 Files with no reviewable changes (6)
- shared/auth/src/commonMain/kotlin/kmp/shared/auth/data/provider/AuthProviderImpl.kt
- android/samplefeature/src/main/kotlin/kmp/android/samplefeature/navigation/SampleFeatureGraph.kt
- shared/base/src/commonMain/kotlin/kmp/shared/base/presentation/ui/Values.kt
- shared/analytics/src/androidMain/kotlin/kmp/shared/analytics/data/provider/AndroidAnalyticsProviderImpl.kt
- shared/base/src/iosMain/kotlin/kmp/shared/base/data/keychain/KeychainFactory.kt
- shared/umbrella/src/androidUnitTest/kotlin/konsistTest/domain/model/DomainModelsTest.kt
JuliaJakubcova
left a comment
There was a problem hiding this comment.
Also konsist tests are broken, probably because of some of the updated versions, can you fix them, please? You can run them with ./gradlew testAlphaDebugUnitTest or by right clicking on konsistTest folder and Run tests in konsistTest
9f04bfa to
ee2be57
Compare
There was a problem hiding this comment.
Actionable comments posted: 3
♻️ Duplicate comments (1)
shared/umbrella/src/androidUnitTest/kotlin/konsistTest/domain/usecase/UseCaseTest.kt (1)
83-86:⚠️ Potential issue | 🟡 MinorPreviously reported:
params.first()is still unsafe in predicate.Line 84 can still throw when
paramsis empty, causing hard failure instead of a clean false predicate result.Suggested fix
val implementationHasParams = implementation .functions() .withName("invoke") .withParameters { params -> - val param = params.first() + val param = params.singleOrNull() ?: return@withParameters false param.type.fullyQualifiedName == paramDateClass.fullyQualifiedName }.size == 1#!/bin/bash set -euo pipefail echo "== Current predicate in UseCaseTest ==" fd -HI 'UseCaseTest.kt' --exec sed -n '75,100p' {} echo echo "== Potential zero-arg invoke declarations ==" rg -n --type=kotlin '\bfun\s+invoke\s*\(\s*\)'🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@shared/umbrella/src/androidUnitTest/kotlin/konsistTest/domain/usecase/UseCaseTest.kt` around lines 83 - 86, The predicate passed to withParameters uses params.first() which can throw on empty lists; change it to a null-safe check such as using params.singleOrNull() and safe navigation: replace the body of the withParameters lambda so it returns (params.singleOrNull()?.type?.fullyQualifiedName == paramDateClass.fullyQualifiedName) instead of using params.first(), ensuring the predicate yields false for empty or multi-arg parameter lists; keep references to withParameters, params, and paramDateClass to locate the change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@build.gradle.kts`:
- Line 2: The explicit import "import org.gradle.kotlin.dsl.register" is likely
unnecessary; remove that import line to rely on standard Gradle Kotlin DSL
implicit imports and reduce clutter, but if you added it to fix an IDE or
compilation error keep it and add a brief comment above explaining why it’s
required (e.g., “Required to resolve register(...) in this Gradle/KTS context”);
target the import statement referencing org.gradle.kotlin.dsl.register and
adjust accordingly.
In `@ios/MateeStarter.xcodeproj/project.pbxproj`:
- Around line 348-366: The build phase PBXShellScriptBuildPhase named "Copy moko
resources to app" invokes the non-existent Gradle task
":shared:umbrella:copyFrameworkResourcesToApp" in its shellScript; fix by either
adding/applying the moko-resources/multiplatformResources configuration in
shared/umbrella/build.gradle.kts so that the task is created, or update the
shellScript to call the correct existing Gradle task (replace
":shared:umbrella:copyFrameworkResourcesToApp" inside the shellScript property
of the PBXShellScriptBuildPhase with the actual task name exposed by your Gradle
build). Ensure the change keeps the same parameter args (-Pmoko.resources.*) if
the task expects them.
In
`@shared/umbrella/src/iosMain/swift/extensions/Interoperability`+Extensions.swift:
- Around line 91-94: The Swift Date.asInstant extension expects a
kotlin.time.Instant but KotlinDateTimeKt.toInstant currently returns a
kotlinx.datetime.Instant; update the Kotlin side so
KotlinDateTimeKt.toInstant(self: NSDate) (or the function used by the Swift
bridge) returns a kotlin.time.Instant directly instead of
kotlinx.datetime.Instant — convert the underlying milliseconds/nanoseconds to
kotlin.time.Instant (e.g. via kotlin.time.Instant.fromEpochMilliseconds or
equivalent) and update any uses of toKotlinInstant() to produce
kotlin.time.Instant so the Swift extension Date.asInstant returns the correct
kotlin.time.Instant type.
---
Duplicate comments:
In
`@shared/umbrella/src/androidUnitTest/kotlin/konsistTest/domain/usecase/UseCaseTest.kt`:
- Around line 83-86: The predicate passed to withParameters uses params.first()
which can throw on empty lists; change it to a null-safe check such as using
params.singleOrNull() and safe navigation: replace the body of the
withParameters lambda so it returns
(params.singleOrNull()?.type?.fullyQualifiedName ==
paramDateClass.fullyQualifiedName) instead of using params.first(), ensuring the
predicate yields false for empty or multi-arg parameter lists; keep references
to withParameters, params, and paramDateClass to locate the change.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: ebca24d3-89ce-4c5a-9724-d40b61387b2b
⛔ Files ignored due to path filters (1)
gradle/wrapper/gradle-wrapper.jaris excluded by!**/*.jar
📒 Files selected for processing (21)
build-logic/convention/src/main/kotlin/config/KmpConfig.ktbuild-logic/convention/src/main/kotlin/extensions/PojectExtensions.ktbuild.gradle.ktsgradle.propertiesgradle/libs.versions.tomlgradle/wrapper/gradle-wrapper.propertiesgradlewgradlew.batios/.swiftlint.ymlios/MateeStarter.xcodeproj/project.pbxprojios/PresentationLayer/UIToolkit/Sources/UIToolkit/Extensions/View+Extensions.swiftshared/umbrella/src/androidUnitTest/kotlin/konsistTest/KonsistScope.ktshared/umbrella/src/androidUnitTest/kotlin/konsistTest/android/compose/ComposeTest.ktshared/umbrella/src/androidUnitTest/kotlin/konsistTest/common/GeneralTest.ktshared/umbrella/src/androidUnitTest/kotlin/konsistTest/data/DataTest.ktshared/umbrella/src/androidUnitTest/kotlin/konsistTest/di/KoinTest.ktshared/umbrella/src/androidUnitTest/kotlin/konsistTest/domain/model/DomainModelsTest.ktshared/umbrella/src/androidUnitTest/kotlin/konsistTest/domain/usecase/UseCaseTest.ktshared/umbrella/src/androidUnitTest/kotlin/konsistTest/repository/RepositoryTest.ktshared/umbrella/src/iosMain/kotlin/kmp/shared/umbrella/KotlinDateTime.ktshared/umbrella/src/iosMain/swift/extensions/Interoperability+Extensions.swift
💤 Files with no reviewable changes (1)
- gradle.properties
📝 Description
Summary by CodeRabbit
Build & Infrastructure
iOS Enhancements
Dependency Updates