mirror of
https://github.com/KRTirtho/spotube.git
synced 2026-08-05 19:59:51 +00:00
88 lines
4.1 KiB
Markdown
88 lines
4.1 KiB
Markdown
# Troubleshooting Compose in REPL
|
|
|
|
Common issues when rendering Compose components in the REPL and how to resolve them.
|
|
|
|
## Kotlin Multiplatform (KMP) Issues
|
|
|
|
The Gradle REPL only supports JVM-based source sets.
|
|
|
|
- **Issue**: Attempting to start the REPL on a common, iOS, or Android source set fails.
|
|
- **Solution**: Select a JVM or Desktop target source set. Recommended names: `jvmMain`, `jvmTest`, `desktopMain`, `desktopTest`.
|
|
- **Issue**: Dependencies from `commonMain` are not resolving.
|
|
- **Solution**: Starting the REPL on a JVM-specific source set that *depends* on `commonMain` (which is standard KMP structure) will include all inherited dependencies. Ensure the project is built before starting.
|
|
|
|
## Android Limitation (FUNDAMENTAL)
|
|
|
|
**IMPORTANT: `runComposeUiTest` and `captureToImage()` CANNOT work on Android.**
|
|
|
|
This is not a bug or limitation that can be fixed—it is a fundamental architectural incompatibility:
|
|
|
|
- `runComposeUiTest` requires desktop Compose runtime with Skiko rendering
|
|
- Android's ART does not support desktop Compose testing APIs
|
|
- `captureToImage()` relies on desktop-specific rendering pipelines
|
|
|
|
**Solution**: Put your Composables in `commonMain` and run the REPL on a JVM target (`jvmMain`, `jvmTest`, `desktopMain`, or `desktopTest`).
|
|
|
|
## `ClassNotFoundException: androidx.compose.ui.test.junit4.DesktopComposeTestRule`
|
|
|
|
This occurs when the Compose UI Test dependencies are not on the REPL's classpath.
|
|
The REPL uses the runtime classpath of the selected `sourceSet`.
|
|
If you are using `sourceSet: "main"`, but the test dependencies are in `testImplementation`, they won't be included.
|
|
|
|
**Solutions:**
|
|
|
|
1. **(Preferred)** Start the REPL with `sourceSet: "test"`. This usually includes the required test dependencies.
|
|
2. Add the dependency manually using `additionalDependencies` if using `sourceSet: "main"`:
|
|
```json
|
|
{
|
|
"command": "start",
|
|
"projectPath": ":my-app",
|
|
"sourceSet": "main",
|
|
"additionalDependencies": ["org.jetbrains.compose.ui:ui-test-junit4-desktop:1.7.0"]
|
|
}
|
|
```
|
|
|
|
## `java.lang.NoClassDefFoundError: org/jetbrains/skiko/SkiaLayer`
|
|
|
|
Skiko is the rendering engine for Compose Desktop. It might be missing if the project is not correctly configured for Compose Desktop or if dependencies are incomplete.
|
|
|
|
**Solution:**
|
|
Ensure `compose.desktop.currentOs` is in the project's dependencies or add it to `additionalDependencies`.
|
|
|
|
## Composable Renders but No Image is Shown
|
|
|
|
The `project_repl` tool only returns content that is explicitly rendered via `responder.render(value)` or the result of the last expression in the script.
|
|
|
|
**Solution:**
|
|
Ensure you call `responder.render(bitmap)` inside your `runComposeUiTest` block.
|
|
|
|
```kotlin
|
|
runComposeUiTest {
|
|
setContent { MyComposable() }
|
|
responder.render(onRoot().captureToImage()) // <--- Important!
|
|
}
|
|
```
|
|
|
|
## `Unresolved reference: runComposeUiTest`
|
|
|
|
The `runComposeUiTest` function may be located in different packages depending on your version of Compose or whether you are using JetBrains Compose.
|
|
|
|
**Solutions:**
|
|
|
|
1. Check the correct import for your project. Common ones:
|
|
- `androidx.compose.ui.test.runComposeUiTest`
|
|
- `org.jetbrains.compose.ui.test.runComposeUiTest` (for older or specific JetBrains Compose versions)
|
|
2. Ensure you are using a compatible version of the `ui-test` library. Some older versions used `runDesktopComposeUiTest` or similar.
|
|
|
|
## `Unresolved reference: responder`
|
|
|
|
The `responder` property is automatically injected into the REPL session by the worker.
|
|
If it is unresolved, check if you have a custom `providedProperties` in your script configuration (usually not an issue for users).
|
|
Ensure you are using the `project_repl` tool which uses the custom REPL worker.
|
|
|
|
## `java.lang.IllegalStateException: runComposeUiTest { ... } needs to be called from the main thread`
|
|
|
|
On some platforms, Compose UI tests might require being run on the main/UI thread.
|
|
The REPL evaluates snippets on a background thread. `runComposeUiTest` usually handles its own thread management, but if you encounter this, try wrapping your code in a `SwingUtilities.invokeLater` (for Desktop) if applicable, though
|
|
`runComposeUiTest` should be sufficient.
|