Contents — page 2 of 3
Day 64A Compose UI test in commonTest runs five times and fails on oneThe clock, the input source and the available fonts differ per target.Day 65Four crash reporters, one shared module, and the traces nobody could readThe reporting SDK is platform code and the crash is in shared code.Day 66A deep link is four platform integrations wearing one URLVerified, registered and delivered differently; parsing is the easy part.Day 67There is no shared way to store a secret, and that is the correct answerKeystore and Keychain hold a key your process cannot read.Day 68An expect declaration cannot carry default arguments, and the error says otherwiseDefaults live on the expect side; the diagnostic points at the actual.Day 69ignoreUnknownKeys is a compatibility policy you are choosing for everyoneStrict parsing is an outage on a new field; lenient is silent data loss on a rename.Day 70Ktor plugin order is not style — it decides what gets retriedInstall auth after retry and a refresh happens per attempt; before, once.Day 71The multipart upload that worked on three enginesStreaming a file body needs a filesystem, and one target has none.Day 72One notification API, four delivery systems that behave differentlyChannels, categories, a service worker and a tray have different rules.Day 73Two Kotlin classes, one Objective-C name, and a header that will not compileObjective-C has no namespaces, so two same-named classes export as one.Day 74Gradle's configuration cache, and the one task that kept invalidating itA task capturing Project at execution time disables it for the whole build.Day 75A golden screenshot is a per-platform artifact, whatever the test saysFont rasterisation differs per renderer, so one reference image cannot hold.Day 76Shared navigation state and the one platform that kills your processA back stack in memory is correct on desktop and loses the user's place on Android.Day 77One shared call, five targets, three different stringsLocale-aware formatting is implemented per platform, and the outputs differ.Day 78The shared analytics event that meant something different on each platformEach SDK truncates names, coerces types and limits parameters differently.Day 79Two feature modules that needed each other, and the type that fixed itA direct dependency between siblings is a cycle waiting for the third one.Day 80There is no shared permission API, and the lifecycles disagreeAndroid can be asked twice; iOS once; the browser needs a gesture.Day 81Preferences on five targets: what each one actually persists toFour stores with different durability, size limits and clearing behaviour.Day 82R8 stripped a reflective call that only the shared module madeShrinking runs on one target, so a reflection path ships broken there.Day 83Room compiles for KMP and still needs a driver per targetThe DAO is shared and the connection is not.Day 84Remote config defaults that disagreed, and the feature that shipped twiceThe fetched value is shared and the fallback is per platform.Day 85shareIn's replay count is a product decision, not a tuning knobreplay = 1 re-delivers the last value to every new collector.Day 86A SQLDelight migration is a contract with every installed versionMigrations run forward from whatever version the device holds.Day 87A Kotlin crash on iOS arrives without a usable stack traceThe dSYM for the shared framework is produced by Gradle and uploaded by nobody.Day 88@MainActor and Dispatchers.Main are two different promisesBoth mean the main thread and neither knows about the other.