There is no Logcat in commonMain, and println is not a logger
Five targets, five sinks, and one of them discards your output silently.
We use Google Analytics to see which pages help people. No ads, no profiles. Privacy Policy
Compose, Kotlin, and multiplatform work — the mechanism under the symptom.
229 posts
Five targets, five sinks, and one of them discards your output silently.
MaterialTheme scopes values to a subtree, which is the wrong shape for reusable per-component configuration. Compose's styles direction addresses that gap; wrapper composables are the pattern to use today.
Virtual time makes a 30-second timeout instant — and makes a real-dispatcher leak invisible.
The default hierarchy creates intermediate source sets you never declared.
Conflation turns two identical emissions into one, so a repeated event vanishes.
Structured concurrency propagates failure upward by design. SupervisorJob is how you declare independence.
One test, five executions. That is how you find platform bugs — and how one flaky test fails five jobs.
Same folder names, different resolution. The accessor is typed, and a missing qualifier fails somewhere new.
Material models colour, type and shape. Everything else a design system needs — spacing, motion, semantic colour — has to be added. Extending with a parallel CompositionLocal is usually right; a full custom system rarely is.
Instant is unambiguous. LocalDateTime is not. The same arithmetic can disagree across targets.
An interface is resolved at runtime by an instance. expect/actual is resolved at compile time by the source set.
Every public declaration in the shared module becomes Swift API. internal is the design tool.