Signed AAB, locked submit button. ID Caller's Play release needed foreground-service and Data safety forms that the Developer API can't fill. Our order now: manifest → demo video → data inventory → console forms.
onlyapps.org/blog/google-pla…
We forked webrtc-kmp, not our call stack. An iPhone video freeze came from a camera-size view escaping `useContents` into freed memory. Return width/height inside the scope. After fix: 705+ encoded frames; before: 110–170.
onlyapps.org/blog/webrtc-kmp…
Renewal outside the app? A paywall callback won’t see it. Observe `Transaction.updates` at launch. Sandbox check: create a Test Transaction in Account Settings; verify access updates.
developer.apple.com/document…
Agent edits deploy CI? Actions `queue: single` replaces a pending run, even with `cancel-in-progress: false`. Before merge, start 3 runs; check which execute.
docs.github.com/en/actions/h…
CI, docker-compose, privacy texts and store metadata can break a release without a unit test failing. Our ID Caller checks get tested too: break one fixture invariant, require failure. The pattern: onlyapps.org/blog/testing-co…
Cached result, flashing spinner? A completed Future newly given to `FutureBuilder` still yields one `waiting` frame. Create the Future outside `build`. Gate: rebuild its parent and assert no second loading frame.
api.flutter.dev/flutter/widg…
KMP doesn't need an `expect` class per target. Keep a common interface; pass Android/iOS implementations at app entry points. Gate: test common logic with a fake and check each platform's wiring.
kotlinlang.org/docs/multipla…
Duplicate BGTaskScheduler registration kills the app. Register permitted IDs once before launch ends. Gate: map plist IDs to one handler; cold-launch.
developer.apple.com/document…
We've updated the ONLYAPPS website. Explore our products, tech stack and engineering notes—from mobile and desktop apps to bots and automation. Built and run in Novi Sad, Serbia. onlyapps.org
Flutter `Hero` needs the destination hero on the first animation frame. A detail screen that adds it after loading data misses the flight. Render a tagged placeholder immediately; test navigation with a cold cache.
api.flutter.dev/flutter/widg…
Agent PR edits `.github/workflows`? Green CI is not a security review. `pull_request_target` + untrusted checkout can expose secrets and write access. Before merge: inspect trigger, checkout ref, token permissions. docs.github.com/en/actions/r…
KMP → Swift: `suspend` without `@Throws` propagates only `CancellationException` as NSError. Other uncaught exceptions can terminate the app. Declare expected errors at the boundary; test one from Swift.
kotlinlang.org/docs/native-o…
UI state backlog: `AsyncStream` defaults to `.unbounded`. For replaceable state, use `.bufferingNewest(1)`; test a paused consumer gets the latest value. Keep lossless events separate.
github.com/swiftlang/swift-e…
AnimatedSwitcher won’t fade between two Text values with the same key. Same type + key updates in place. Key by value; assert both children exist mid-transition in a test.
github.com/flutter/flutter/b…
Our 2025 VPN trial explainer lays out the trade: 15 minutes connected, then wait 45 or subscribe. Let people test a real connection; don’t call unlimited server time a free trial.
Which task must your trial let someone finish?
onlyapps.org/why-15-min-sess…
A two-day-old queue replay can double-count usage. Stripe meter-event IDs are unique for at least 24h, not forever. Dedupe by event ID in your own durable ledger; replay an old job in staging and reconcile the meter total.
docs.stripe.com/api/billing/…
`PopScope(canPop: false)`: Android reports a blocked swipe (`didPop=false`); Cupertino iOS detects none. An unsaved-edits dialog in the callback won’t show on an iOS swipe. Test both.
github.com/flutter/flutter/b…
KMP iOS: `transitiveExport = true` exports dependencies of exported modules. Kotlin warns of bigger binaries and longer builds. Export only modules Swift calls; compare release XCFramework sizes.
kotlinlang.org/docs/multipla…
StoreKit has two paths: `Product.purchase()` returns same-device success; `Transaction.updates` receives Ask to Buy approvals and other-device buys. Verify entitlements in one handler. Test both flows.
developer.apple.com/document…
Swift’s `withTaskCancellationHandler`: if already cancelled, `onCancel` runs before `operation`, which still executes. Guard callback request creation. Test cancel-before-entry.
github.com/swiftlang/swift-e…
