Skip to content

Cmp migration#17

Open
laetuz wants to merge 9 commits intodevelopfrom
cmp-migration
Open

Cmp migration#17
laetuz wants to merge 9 commits intodevelopfrom
cmp-migration

Conversation

@laetuz
Copy link
Copy Markdown
Owner

@laetuz laetuz commented Jun 16, 2025

No description provided.

laetuz added 9 commits June 2, 2025 00:39
- Updated Gradle from 8.9 to 8.11.1
- Updated AGP from 8.7.2 to 8.10.1
- Updated Kotlin from 1.9.0 to 2.1.21
- Updated lifecycleRuntimeKtx from 2.7.0 to 2.9.0
- Updated composeMultiplatform from 1.8.0 to 1.8.1
- Removed example tests.
- Replaced AndroidX Compose dependencies with Jetpack Compose Multiplatform dependencies.
- Added documentation to NumberField composable.
- Minor UI update in MainActivity to display NumberField value.
- Renamed iOS app from Rickpository to Droidcore.
- Updated iOS ContentView to ignore all safe areas.
- Added `kotlin.native.cacheKind=none` to `gradle.properties`.
- Downgraded Kotlin version from 2.1.21 to 2.1.20.
- Implemented initial iOS functionality for `NetworkImage` component.
- Added iOS specific build files and user data to .gitignore.
- Created `contents.xcworkspacedata` for iOS project.
- Added NeoToast, a simple toast component that is available for both Android and iOS.
- Added CustomCarousel, a simple and lightweight custom carousel component.
- Added FlipCard component.
- Added ContextPlatform for context handling.
- Added an enabled parameter to NeoTextField.
The Maven publication configuration in `droidcore/build.gradle.kts` has been refactored.
Instead of creating a new publication named "maven", the existing publications are now configured directly using `publishing.publications.all`.
The `groupId`, `artifactId`, and `version` are set for all publications.
- Added GitHub workflow to publish library to Maven Central.
- Updated Maven Publish plugin to version 0.30.0.
- Configured Maven publishing details in `droidcore/build.gradle.kts`.
- Updated `MainActivity.kt` to use `org.jetbrains.compose.ui.tooling.preview.Preview`.
- Removed unused imports and commented out wallpaper scheme in `MainActivity.kt`.
Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Summary of Changes

Hello @laetuz, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request represents a significant architectural shift for the Droidcore library, transitioning it from an Android-only library to a Kotlin Multiplatform library. This migration facilitates code sharing between Android and iOS, streamlines UI development with Compose Multiplatform, and introduces new versatile UI components, ultimately broadening the library's applicability and maintainability.

Highlights

  • Kotlin Multiplatform Migration: The Droidcore library and its sample app module have been migrated to Kotlin Multiplatform, enabling shared UI components and logic across Android and iOS platforms. This includes extensive updates to Gradle configurations and project structure.
  • New UI Components: Two new Compose Multiplatform components, FlipCard (a horizontally flippable card with animations) and CustomCarousel (a customizable image carousel), have been added to the droidcore library, enhancing its UI capabilities.
  • Cross-Platform Component Refactoring: Existing components such as NeoToast and NetworkImage have been refactored using Kotlin Multiplatform's expect/actual mechanism, providing common APIs with platform-specific implementations for Android and iOS.
  • Centralized Resource Management: Drawable resources have been moved to commonMain/composeResources and are now accessed via generated resource accessors, ensuring consistent resource availability and usage across all supported platforms.
  • iOS Application Integration: A new iosApp module has been introduced, complete with necessary Xcode project files and Swift bridging code, to successfully run the shared Compose Multiplatform UI on iOS devices.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request primarily focuses on migrating the Droidcore library and its sample app to Kotlin Multiplatform (KMP), enabling support for iOS alongside Android. Key changes include restructuring build configurations, adding an iOS application module, refactoring shared code into commonMain, and implementing platform-specifics using expect/actual. New components like FlipCard, CustomCarousel, and NeoToast have also been introduced or adapted for KMP. The review highlights critical issues in the iOS image loading, potential misconfigurations in build settings, and areas for code cleanup and clarification.

Comment on lines +17 to +28
actual fun NetworkImage(
url: String,
contentDescription: String?,
modifier: Modifier
) {
var imageBitmap by remember { mutableStateOf<ImageBitmap?>(null) }
var isLoading by remember { mutableStateOf(true) }
var hasSuccessfullyLoadedOnce by remember(url) { mutableStateOf(false) }

Text(url)

}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

critical

The NetworkImage actual implementation for iOS appears to be incomplete. While it defines the function and includes logic for fetching image data in loadImage(), the composable itself currently only renders Text(url).
The crucial part for converting the fetched UIImage to a ImageBitmap and displaying it (e.g., image.toComposeImageBitmap()) is commented out or missing within the composable body.

This will prevent network images from being displayed on iOS. This needs to be completed for the component to function as expected on the iOS platform.

Comment thread app/build.gradle.kts
excludes += "/META-INF/{AL2.0,LGPL2.1}"
buildTypes {
release {
isMinifyEnabled = false
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

high

isMinifyEnabled is set to false for the release build type in the application module. For production releases, it's highly recommended to enable minification (isMinifyEnabled = true) to reduce app size and obfuscate code, which can offer a layer of security.

            isMinifyEnabled = true

ENABLE_PREVIEWS = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../shared/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)\n$(SRCROOT)/../composeApp/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

high

The FRAMEWORK_SEARCH_PATHS in the Xcode project settings include $(SRCROOT)/../shared/build/xcode-frameworks/... and $(SRCROOT)/../composeApp/build/xcode-frameworks/....

Given the project structure, the KMP module that builds the framework for the iOS app is named app. The shared and composeApp names seem like placeholders from a template and might not correspond to actual module names in this project.

This path should likely be $(SRCROOT)/../app/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME) to correctly locate the framework built by the :app Gradle module. Incorrect paths here can lead to build failures or runtime errors on iOS when trying to link or load the KMP framework.

android {
namespace = "id.neotica.droidcore"
compileSdk = 34
compileSdk = 36
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

The compileSdk has been updated from 34 to 36. While keeping the SDK version up-to-date is good practice, this is a notable jump. Please ensure that the library has been thoroughly tested against this SDK version for any behavioral changes or new compatibility requirements. Also, check for any new lint warnings or errors that might have been introduced.

Comment on lines +140 to +188
//publishing {
// publications {
// create<MavenPublication>("bar") {
// from(components["release"])
// groupId = "com.github.laetuz"
// artifactId = "droidcore-neotica"
// version = "1.3.0"
// }
// publications.withType<MavenPublication> {
// artifact(javadocJar.get())
//
// pom {
// name.set("Droidcore")
// description.set("Droidcore")
// }
// }


// groupId = "id.neotica"
// artifactId = "droidcore"
// version = "1.3.1"
// }
//}

//afterEvaluate {
// publishing.publications.all {
// this as MavenPublication
//
// groupId = "com.github.laetuz"
// artifactId = "droidcore-neotica"
// version = "1.3.1"
// }

/**og version**/
// publishing {
// publications {
// create<MavenPublication>("maven") {
// from(components["release"])
// groupId = "com.github.laetuz"
// artifactId = "droidcore-neotica"
// version = "1.3.0"
// }
// }
// }
//}

//val javadocJar by tasks.registering(Jar::class) {
// archiveClassifier.set("javadoc")
//} No newline at end of file
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

There are multiple commented-out blocks related to publishing configurations (e.g., lines 140-162, 164-171, 174-184, 186-188). To improve the readability and maintainability of the build script, these unused or alternative configurations should be removed if they are no longer relevant.

Comment on lines +22 to +53
actual fun NeoToast(text: String, appear: MutableState<Boolean>) {
// val context = AppContext.get().applicationContext
// LaunchedEffect(Unit) {
// if (appear.value) {
// delay(1000)
// appear.value = false
// }
// }
// if (appear.value) {
// Toast.makeText(context, text, Toast.LENGTH_SHORT).show()
// }

LaunchedEffect(Unit) {
if (appear.value) {
delay(1000)
appear.value = false
}
}

BasicAlertDialog(
onDismissRequest = { appear.value = false },
content = {
Card {
Text(
modifier = Modifier.fillMaxWidth(),
text = text,
fontSize = 16.sp,
textAlign = TextAlign.Center,
)
}
},
)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

The NeoToast actual implementation for Android uses BasicAlertDialog. This is an unconventional approach for a component named "Toast", as BasicAlertDialog creates a modal dialog that blocks UI interaction, unlike a standard Android Toast which is non-blocking.

If the intention is to have a non-blocking, short-lived message similar to a native Android Toast, consider using the android.widget.Toast API (perhaps adapting the commented-out code that was present).

If this dialog-like behavior is intentional, it might be clearer to rename the component (e.g., NeoBriefMessageDialog or similar) to better reflect its behavior and avoid confusion with the standard Toast mechanism.

Comment on lines +1 to +36
package id.neotica.droidcore.component.alert.dump

//import android.content.Context
//import android.content.Intent
//import android.net.Uri
//import androidx.compose.material3.Text
//import androidx.compose.material3.TextButton
//import androidx.compose.runtime.Composable
//import androidx.compose.runtime.MutableState
//import id.neotica.droidcore.component.alert.NeoAlert
//
//@Composable
//fun PrimaryAlert(
// openDialog: MutableState<Boolean>,
// ctx: Context,
// url: String,
//) {
// NeoAlert(
// openDialog = openDialog,
// confirmButton = {
// TextButton(
// onClick = {
// val urlIntent = Intent(
// Intent.ACTION_VIEW,
// Uri.parse(url)
// )
// ctx.startActivity(urlIntent)
// }
// ) {
// Text("Coba")
// }
// },
// title = "Fitur dalam pengembangan",
// desc = "Mohon maaf untuk saat ini fitur yang anda pilih masih dalam tahap pengembangan. Namun anda dapat mencoba fitur ini dengan dengan browser anda."
// )
//} No newline at end of file
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

This newly added file, PrimaryAlert.kt, is entirely commented out. If this code is a placeholder, very old, or no longer needed, it should be removed from the project to keep the codebase clean and reduce clutter.

Comment on lines +18 to +39
actual fun NeoToast(text: String, appear: MutableState<Boolean>) {

LaunchedEffect(Unit) {
if (appear.value) {
delay(1000)
appear.value = false
}
}

BasicAlertDialog(
onDismissRequest = { appear.value = false },
content = {
Card {
Text(
modifier = Modifier.fillMaxWidth(),
text = text,
fontSize = 16.sp,
textAlign = TextAlign.Center,
)
}
},
)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

Similar to its Android counterpart, the NeoToast actual implementation for iOS uses BasicAlertDialog. This will result in a modal dialog rather than a non-intrusive, short-lived notification typically associated with a "toast".

If a behavior similar to Android's Toast is desired on iOS (e.g., a small, non-blocking overlay), a custom view or a different presentation approach would be needed. If the current dialog behavior is intended, consider renaming the component for clarity across platforms.

Comment thread gradle.properties
android.nonTransitiveRClass=true
android.enableR8.fullMode=false No newline at end of file
android.enableR8.fullMode=false
kotlin.native.cacheKind=none No newline at end of file
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

The Kotlin/Native cache kind is set to none (kotlin.native.cacheKind=none). While this can be useful for troubleshooting cache-related issues during development, it typically disables all caching for native compilations, potentially slowing down build times, especially for clean builds or when switching branches frequently.

Consider if this is a temporary setting for debugging or if the performance implications have been evaluated. For regular development and CI builds, static (pre-built caches for dependencies) or other appropriate cache kinds are often preferred for better build performance.

kotlin.native.cacheKind=static # Or remove if default is preferred and 'none' was for debugging

@laetuz
Copy link
Copy Markdown
Owner Author

laetuz commented Jun 21, 2025

/gemini summary

@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

This pull request introduces a significant architectural change by migrating the Droidcore library to a Kotlin Multiplatform (KMP) foundation. This strategic shift allows for the development of shared UI components that can run natively on both Android and iOS, thereby enhancing code reusability and streamlining cross-platform development efforts. The changes encompass a comprehensive update of the build system, adaptation of existing UI elements for cross-platform compatibility, and the integration of new, platform-agnostic components.

Highlights

  • Kotlin Multiplatform Migration: The project has been fundamentally migrated from an Android-only Jetpack Compose library to a Kotlin Multiplatform (KMP) library, enabling shared UI components and logic across Android and iOS.
  • Build System Overhaul: Extensive updates have been made to the Gradle build configurations (build.gradle.kts, libs.versions.toml, settings.gradle.kts) to fully support KMP, including new plugins, source sets for common, Android, and iOS targets, and updated dependency management.
  • Component Refactoring and Additions: Existing UI components like NeoAlert, PasswordTextField, NetworkImage, and NeoToast have been refactored to be KMP-compatible using expect/actual declarations and Compose Multiplatform APIs. New components such as FlipCard and CustomCarousel have also been introduced.
  • iOS Application Integration: New Xcode project files, Swift entry points, and asset configurations have been added to facilitate building and running the Compose Multiplatform application on iOS.
  • Maven Publishing Update: The droidcore module's publishing configuration has been updated to use the modern mavenPublishing block, including detailed POM information for proper distribution to Maven Central.
Changelog
  • .gitignore
    • Added new entries for Kotlin-specific build artifacts (.kotlin, .externalNativeBuild, .cxx) and iOS Xcode user data to prevent them from being committed.
  • README.md
    • Updated the library description to reflect its new status as a Kotlin MultiPlatform library with Compose-Multiplatform components.
    • Bumped the recommended dependency version from 1.2.6 to 1.3.0.
    • Added 'Flipcard' and 'NeoToast' to the list of available components.
  • app/build.gradle.kts
    • Migrated from jetbrainsKotlinAndroid to kotlinMultiplatform, compose.compiler, and composeMultiplatform plugins.
    • Configured Android and iOS targets, including static framework generation for iOS.
    • Defined sourceSets for androidMain, iosMain, commonMain, and test variants to structure dependencies for KMP.
    • Updated compileOptions to JavaVersion.VERSION_11.
    • Changed isMinifyEnabled to false for the debug build type.
    • Removed many Android-specific Compose dependencies, as they are now managed by KMP Compose.
  • app/src/androidMain/kotlin/id/neotica/droidcore/MainActivity.kt
    • New file: Android-specific entry point for the Compose Multiplatform application, handling Android lifecycle and previews.
  • app/src/commonMain/kotlin/id/neotica/droidcore/CommonApp.kt
    • Refactored the main application composable (TestContent renamed to CommonApp) to be platform-agnostic.
    • Removed Android-specific imports and preview annotations, which are now handled in platform-specific modules.
    • Integrated new NeoToast and NeoButton components for demonstration.
  • app/src/iosMain/kotlin/id/neotica/droidcore/MainViewController.kt
    • New file: iOS-specific entry point for the Compose Multiplatform application.
  • build.gradle.kts
    • Added KMP-related plugins (kotlinMultiplatform, compose.compiler, composeMultiplatform) to the top-level build script.
  • droidcore/build.gradle.kts
    • Migrated to KMP plugins and configured Android and iOS targets for the library module.
    • Updated compileSdk to 36.
    • Redefined dependencies using KMP sourceSets (e.g., commonMain now uses compose.material3, compose.runtime).
    • Implemented a new mavenPublishing block for publishing to Maven Central, including detailed POM metadata.
    • Removed deprecated composeOptions and old dependency declarations.
  • droidcore/src/androidMain/kotlin/id/neotica/droidcore/component/alert/NeoToast.android.kt
    • New file: Provides the Android actual implementation for NeoToast, currently using BasicAlertDialog.
  • droidcore/src/androidMain/kotlin/id/neotica/droidcore/component/context/ContextPlatform.android.kt
    • New file: Provides the Android actual implementation for AppContext.
  • droidcore/src/androidMain/kotlin/id/neotica/droidcore/component/image/NetworkImage.kt
    • Modified NetworkImage to be an actual function for Android.
  • droidcore/src/commonMain/composeResources/drawable/ic_check_circle.xml
    • New file: Added ic_check_circle.xml drawable resource.
  • droidcore/src/commonMain/composeResources/drawable/ic_clear.xml
    • New file: Added ic_clear.xml drawable resource.
  • droidcore/src/commonMain/composeResources/drawable/ic_info_filled.xml
    • New file: Added ic_info_filled.xml drawable resource.
  • droidcore/src/commonMain/composeResources/drawable/ic_lock.xml
    • New file: Added ic_lock.xml drawable resource.
  • droidcore/src/commonMain/composeResources/drawable/ic_warning_filled.xml
    • New file: Added ic_warning_filled.xml drawable resource.
  • droidcore/src/commonMain/composeResources/drawable/lock_24dp.svg
    • New file: Added lock_24dp.svg drawable resource.
  • droidcore/src/commonMain/composeResources/drawable/visibility_off.xml
    • New file: Added visibility_off.xml drawable resource.
  • droidcore/src/commonMain/composeResources/drawable/visibility_on.xml
    • New file: Added visibility_on.xml drawable resource.
  • droidcore/src/commonMain/kotlin/id/neotica/droidcore/component/alert/NeoAlert.kt
    • Updated NeoAlert to use painterResource for icons, making it compatible with Compose Multiplatform resources.
  • droidcore/src/commonMain/kotlin/id/neotica/droidcore/component/alert/NeoToast.kt
    • New file: Declares the expect function for NeoToast.
  • droidcore/src/commonMain/kotlin/id/neotica/droidcore/component/alert/dump/PrimaryAlert.kt
    • New file: Added a fully commented-out PrimaryAlert composable.
  • droidcore/src/commonMain/kotlin/id/neotica/droidcore/component/cards/FlipCard.kt
    • New file: Implemented a FlipCard composable with horizontal drag and animation logic.
  • droidcore/src/commonMain/kotlin/id/neotica/droidcore/component/cards/deprecated/NeoCard.kt
    • Minor text formatting adjustment in NeoCard by removing string interpolation.
  • droidcore/src/commonMain/kotlin/id/neotica/droidcore/component/carousel/CustomCarousel.kt
    • New file: Implemented a CustomCarousel composable with pager state and indicator support.
  • droidcore/src/commonMain/kotlin/id/neotica/droidcore/component/context/ContextPlatform.kt
    • New file: Declares the expect object for AppContext.
  • droidcore/src/commonMain/kotlin/id/neotica/droidcore/component/icon/AlertIcon.kt
    • Updated AlertIcon to accept Painter for broader compatibility with KMP resources.
  • droidcore/src/commonMain/kotlin/id/neotica/droidcore/component/image/NetworkImage.kt
    • New file: Declares the expect function for NetworkImage.
  • droidcore/src/commonMain/kotlin/id/neotica/droidcore/component/textfield/NeoTextField.kt
    • Added an enabled parameter to NeoTextField.
  • droidcore/src/commonMain/kotlin/id/neotica/droidcore/component/textfield/NumberField.kt
    • Added KDoc comments to the NumberField composable.
  • droidcore/src/commonMain/kotlin/id/neotica/droidcore/component/textfield/PasswordTextField.kt
    • Updated icon usage to painterResource for KMP compatibility.
  • droidcore/src/commonMain/kotlin/id/neotica/droidcore/component/textfield/deprecated/PasswordTextFieldLegacy.kt
    • Added @Deprecated annotation and updated icon usage to painterResource.
  • droidcore/src/iosMain/kotlin/id/neotica/droidcore/component/alert/NeoToast.ios.kt
    • New file: Provides the iOS actual implementation for NeoToast, currently using BasicAlertDialog.
  • droidcore/src/iosMain/kotlin/id/neotica/droidcore/component/context/ContextPlatform.ios.kt
    • New file: Provides the iOS actual implementation for AppContext.
  • droidcore/src/iosMain/kotlin/id/neotica/droidcore/component/image/NetworkImage.ios.kt
    • New file: Provides the iOS actual implementation for NetworkImage, currently rendering the URL as text.
  • droidcore/src/main/res/drawable/ic_check_circle.xml
    • New file: Added Android-specific ic_check_circle.xml drawable resource.
  • droidcore/src/main/res/drawable/ic_clear.xml
    • New file: Added Android-specific ic_clear.xml drawable resource.
  • droidcore/src/main/res/drawable/ic_info_filled.xml
    • New file: Added Android-specific ic_info_filled.xml drawable resource.
  • droidcore/src/main/res/drawable/ic_lock.xml
    • New file: Added Android-specific ic_lock.xml drawable resource.
  • droidcore/src/main/res/drawable/ic_warning_filled.xml
    • New file: Added Android-specific ic_warning_filled.xml drawable resource.
  • gradle.properties
    • Added kotlin.native.cacheKind=none.
  • gradle/libs.versions.toml
    • Updated versions for AGP (from 8.7.2 to 8.10.1), Kotlin (from 1.9.0 to 2.1.20), and Lifecycle Runtime KTX (from 2.7.0 to 2.9.0).
    • Replaced AndroidX Compose BOM and dependencies with Compose Multiplatform versions and related libraries.
    • Updated mavenPublish plugin version (from 0.28.0 to 0.30.0).
    • Added compose-multiplatform bundle for common dependencies.
  • gradle/wrapper/gradle-wrapper.properties
    • Updated Gradle wrapper version to 8.11.1.
  • iosApp/Configuration/Config.xcconfig
    • New file: Xcode configuration for the iOS application.
  • iosApp/droidcoreIos.xcodeproj/project.xcworkspace/contents.xcworkspacedata
    • New file: Xcode workspace data.
  • iosApp/iosApp.xcodeproj/project.pbxproj
    • New file: Xcode project configuration for the iOS application, including build phases for Kotlin framework embedding.
  • iosApp/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata
    • New file: Xcode workspace data.
  • iosApp/iosApp.xcodeproj/xcuserdata/ryomartin.xcuserdatad/xcschemes/xcschememanagement.plist
    • New file: Xcode user scheme management data.
  • iosApp/iosApp/Assets.xcassets/AccentColor.colorset/Contents.json
    • New file: Added AccentColor asset catalog.
  • iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json
    • New file: Added AppIcon asset catalog.
  • iosApp/iosApp/Assets.xcassets/Contents.json
    • New file: Added root Assets.xcassets Contents.json.
  • iosApp/iosApp/ContentView.swift
    • New file: SwiftUI wrapper for the KMP Compose UI.
  • iosApp/iosApp/Info.plist
    • New file: iOS application information property list.
  • iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json
    • New file: Asset catalog for iOS previews.
  • iosApp/iosApp/iOSApp.swift
    • New file: Main entry point for the iOS application.
  • settings.gradle.kts
    • Modified google() repository to include specific group and subgroups for better dependency resolution.
Activity
  • The gemini-code-assist[bot] left a critical comment on droidcore/src/iosMain/kotlin/id/neotica/droidcore/component/image/NetworkImage.ios.kt, noting that the iOS NetworkImage implementation is incomplete and currently only renders text instead of displaying images.
  • The gemini-code-assist[bot] raised a high-priority concern regarding isMinifyEnabled being set to false for the release build type in app/build.gradle.kts, recommending it be set to true for production builds.
  • The gemini-code-assist[bot] highlighted a high-priority issue with incorrect FRAMEWORK_SEARCH_PATHS in iosApp/iosApp.xcodeproj/project.pbxproj, suggesting they should be updated to correctly point to the app module's build output.
  • The gemini-code-assist[bot] commented on the compileSdk update to 36 in droidcore/build.gradle.kts, advising thorough testing for any behavioral changes or new compatibility requirements.
  • The gemini-code-assist[bot] suggested removing multiple commented-out publishing configurations in droidcore/build.gradle.kts to improve the readability and maintainability of the build script.
  • The gemini-code-assist[bot] noted that the NeoToast actual implementations for both Android (droidcore/src/androidMain/kotlin/id/neotica/droidcore/component/alert/NeoToast.android.kt) and iOS (droidcore/src/iosMain/kotlin/id/neotica/droidcore/component/alert/NeoToast.ios.kt) use BasicAlertDialog, which creates a modal dialog unlike a standard non-blocking toast. It recommended either changing the implementation or renaming the component for clarity.
  • The gemini-code-assist[bot] recommended removing the entirely commented-out PrimaryAlert.kt file (droidcore/src/commonMain/kotlin/id/neotica/droidcore/component/alert/dump/PrimaryAlert.kt) to keep the codebase clean.
  • The gemini-code-assist[bot] pointed out that kotlin.native.cacheKind=none in gradle.properties might negatively impact build times and suggested re-evaluating this setting for better performance.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant