SwiftUI’s `@environment(Book.self)` gives you the observable model, not a projected `$book`. In `body`, add `@Bindable var book = book`; then `TextField("Title", text: $book.title)`. Keep ownership upstream; make editability local to the view that needs it.
1
0
0
28
Autosuggest: `flatMapLatest` cancels the previous inner Flow when the next query arrives. Replay: emit `a`, wait 100ms, emit `ab`; each inner Flow emits immediately, then after 200ms. Expect `a`, `ab`, `ab_last`—never `a_last`. Test the late result, not just the spinner.
0
0
0
32
Flutter’s `restorationScopeId` enables a scope, not every route. `pushNamed` won’t restore the route; use `restorablePushNamed`, and give the form field a `restorationId`. Background the app, simulate OS process death, reopen: route and draft should survive. Which fails first?
0
0
0
61
Mystic is a spec, not a shipped VPN. Its design keeps one L3 session across UDP, HTTP/3 and HTTP/2. Benchmarks and independent review come before rollout. What would you test first? onlyapps.org/blog/introduci…
0
0
0
43
Remote flags are not banned by Apple’s October update. Our check: every flagged feature is in the submitted build, reachable by reviewers and named in Review Notes. Full checklist: onlyapps.org/blog/app-revie…
0
0
0
40
ClewWiki publishes agent edits before review. Its Changes queue permits reverts, not pre-approval. A page lease prevents concurrent writes, not another agent reading unapproved docs. That is a trust boundary.
onlyapps.org/blog/clewwiki-…
0
0
0
30
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-pl…
0
0
0
36
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-km…
0
0
0
51
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/documentation/…
0
0
0
49
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/how…
0
0
0
28
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-c…
0
0
0
28
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/widget…
0
0
0
43
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/multiplat…
0
0
0
46
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/documentation/…
0
0
0
33
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
0
0
0
60
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/widget…
0
0
0
56
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/ref…
0
0
0
45
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-ob…
0
0
0
59
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/swif…
0
0
0
43
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/flutte…
0
0
0
41