- Assign the shared development team to the widget extension and watch
complication targets, and correct the watch app's companion bundle
identifier so on-device installs succeed after the bundle ID rename
to de.s0.fototeddy.VanAligneiOS.
- Guard against two ConfiguredDevices sharing a peripheralID (e.g. a
double-tapped "Sichern"), which crashed BluetoothManager's
Dictionary(uniqueKeysWithValues:) on launch.
- Keep Bluetooth running in the background while a Live Activity is
active, so lock screen/CarPlay keep receiving fresh readings instead
of freezing at the last value before backgrounding.
- Render the actual bubble-level graphic (not just a static icon) in
the Live Activity's lock screen view and expanded Dynamic Island.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Replaces the ActivityKit boilerplate with a real lock screen/Dynamic
Island UI driven by live pitch/roll readings, toggled from the
leveling device's detail screen. Since iOS 17 shows any running Live
Activity on CarPlay's dashboard without a dedicated CarPlay app entitlement,
this covers the requested CarPlay use case without one.
Also fixes the widget extension never being embedded into the app
(missing Embed Foundation Extensions build phase and target
dependency), which meant no widget or Live Activity could ever have
rendered regardless of code changes.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>