-
Notifications
You must be signed in to change notification settings - Fork 120
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
IOS crash, kotlin.IllegalArgumentException: can't read UIImage of ..., 0.24.0-beta-1 #680
Comments
Hi, can u send sample or branch with problems? |
https://github.com/parfenovedyard/MokoResSample While preparing sample noticed that only dark theme causes crash. |
@parfenovedyard you should apply moko-resources plugin to https://github.com/parfenovedyard/MokoResSample/blob/a46e516150a015a47066186fcce63dd3ec476c01/composeApp/build.gradle.kts#L6 and should not create framework here https://github.com/parfenovedyard/MokoResSample/blob/a46e516150a015a47066186fcce63dd3ec476c01/resources/build.gradle.kts#L22 and also you should change order of build phases in xcode - at first you should compile kotlin framework, then you should copy resources from framework by your current config very not optimal (long build time required), but it's not cause of issue. we will research why dark theme image broken |
crash on ios with dark images, will be fixed in 0.24.0-beta-2 |
got it, thanks. Regarding framework, if i change code like this: May add to readme comment about order of build phases in xcode, cz in readme we need add to the end. |
i already said that you should use you should use project that produce ios framework. it's composeApp in your case |
@ExNDY please add in readme that build phase should be after kotlin framework compilation
|
There is a module "resources" with moko-resources in project.
If I try to load image on IOS emulator I had a crash:
kotlin.IllegalArgumentException: can't read UIImage of ImageResource(assetImageName=pic_plug, bundle=NSBundle </Users/username/Library/Developer/CoreSimulator/Devices/7BD82449-BAA7-463F-8A97-D967D0A2C8D8/data/Containers/Bundle/Application/742CD347-DE49-4030-AE6D-1B4FAE53411A/ExampleApp.app/ExampleApp:resources.bundle> (not yet loaded))
But on android svg and png files loaded well, and fonts and strings also loaded well on Android and Ios.
My module setup:
toml file:
[versions]
jvm = "11"
agp = "8.2.0"
kotlin = "1.9.23"
compose-plugin = "1.6.2"
moko-resources = "0.24.0-beta-1"
[libraries]
moko-resources = { module = "dev.icerock.moko:resources", version.ref = "moko-resources" }
moko-resources-compose = { module = "dev.icerock.moko:resources-compose", version.ref = "moko-resources" }
[plugins]
androidLibrary = { id = "com.android.library", version.ref = "agp" }
jetbrainsCompose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" }
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
mokoResources = { id = "dev.icerock.mobile.multiplatform-resources", version.ref = "moko-resources" }
[bundles]
moko-resources = [
"moko-resources",
"moko-resources-compose"
]
module build.gradle file:
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidLibrary)
alias(libs.plugins.mokoResources)
alias(libs.plugins.jetbrainsCompose)
}
kotlin {
androidTarget {
compilations.all {
kotlinOptions {
jvmTarget = libs.versions.jvm.get()
}
}
}
}
android {
namespace = "com.pe.exampleApp.resources"
compileSdk = libs.versions.android.compileSdk.get().toInt()
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
defaultConfig {
minSdk = libs.versions.android.minSdk.get().toInt()
}
}
and also added script to Build phase in Xcode:
"$SRCROOT/../gradlew" -p "$SRCROOT/../" :resources:copyFrameworkResourcesToApp
-Pmoko.resources.PLATFORM_NAME="$PLATFORM_NAME"
-Pmoko.resources.CONFIGURATION="$CONFIGURATION"
-Pmoko.resources.ARCHS="$ARCHS"
-Pmoko.resources.BUILT_PRODUCTS_DIR="$BUILT_PRODUCTS_DIR"
-Pmoko.resources.CONTENTS_FOLDER_PATH="$CONTENTS_FOLDER_PATH"
In generated MR object I see all necessary images.
Looks like it happens if toUIImage() fun in actual class ImageResource in Ios part returns null and than actual fun painterResource thrown an Exception
The text was updated successfully, but these errors were encountered: