Skip to content

Fix iOS analytics behaviour in contention with ComposePreference - #1035

Merged
davecraig merged 4 commits into
Scottish-Tech-Army:mainfrom
davecraig:main
Aug 24, 2026
Merged

Fix iOS analytics behaviour in contention with ComposePreference#1035
davecraig merged 4 commits into
Scottish-Tech-Army:mainfrom
davecraig:main

Conversation

@davecraig

Copy link
Copy Markdown
Contributor

No description provided.

davecraig and others added 3 commits August 24, 2026 16:32
Three issues that all surfaced when Firebase Analytics + Crashlytics
started running on iOS:

- compose-preference's iOS backend assumed exclusive ownership of the
  app's NSUserDefaults persistent domain, throwing IllegalArgumentException
  on Settings composition when Firebase Crashlytics's cached remote
  settings (nested NSDictionary) sat in the same domain, and wiping that
  cache on every user preference change via setPersistentDomain. Introduce
  a Soundscape-scoped preferences flow (expect/actual: Android delegates
  to the library default; iOS filters foreign value types on read and
  merges them back on write) and pass it into ProvidePreferenceLocals.

- UnhandledExceptionLogger's NSLog("%@", ...) crashed on
  objc_opt_respondsToSelector because Kotlin/Native's NSLog vararg binding
  cannot reliably bridge Kotlin String to NSString for %@ formatters,
  turning every uncaught coroutine exception into an app termination.
  Switch to println so exceptions actually surface in Console.app.

- Crashlytics dSYM upload script assumed the standard DerivedData layout
  where BUILD_DIR sits under DerivedData. Add a `find` fallback for
  custom Xcode build locations, skip the phase entirely on Debug (Firebase
  is gated off there), and move DEBUG_INFORMATION_FORMAT: dwarf-with-dsym
  to Release-only so Debug builds are not slowed generating unused dSYMs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Apple's HIG forbids apps from quitting themselves, and iOS never wired
an onExitApp callback — so the drawer item silently did nothing when
tapped. Make the callback nullable and skip rendering the item when it
is null; Android still passes a lambda so its behavior is unchanged.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Search results for roads (e.g. "Craigdhu Road, Milngavie") were rendering
as just the city ("Milngavie"). Photon returns highway hits with the road
in the "name" property and no "street" property, so AddressFormatter only
sees the city. The line that copied "name" into nameLocal had been
accidentally commented out (along with two debug printlns) during the iOS
Geocoder work, so the fallback dropped the road entirely.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@davecraig
davecraig merged commit e67aaea into Scottish-Tech-Army:main Aug 24, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant