|
|
1
|
+# Issue: macOS Catalyst Navigation Freeze with TabView in MeterView
|
|
|
2
|
+
|
|
|
3
|
+## Description
|
|
|
4
|
+- Aplicația USB Meter (SwiftUI + Catalyst) se bloca complet la navigarea `NavigationLink` push și la deschiderea modalului `sheet` în mod macOS Catalyst (macOS 26 + Apple Silicon).
|
|
|
5
|
+- Condiții: în detaliu (right pane) existau layout-uri cu tab-uri și paginare.
|
|
|
6
|
+
|
|
|
7
|
+## Impact
|
|
|
8
|
+- Nu se puteau deschide ferestre modal și nici naviga spre info/settings.
|
|
|
9
|
+- Doar pe Apple Silicon + macOS 26. Intel + Sonoma nu era afectat.
|
|
|
10
|
+
|
|
|
11
|
+## Root cause
|
|
|
12
|
+- Commit introdus `324f2f8` a adus:
|
|
|
13
|
+ - `TabView` + `PageTabViewStyle` în `MeterView` landscape
|
|
|
14
|
+ - `GeometryReader` intern și `.navigationBarHidden(landscape)`
|
|
|
15
|
+- `PageTabViewStyle` pe Catalyst, în split NavigationView, pare să interfereze cu `UINavigationController` intern, blocând stările de navigare.
|
|
|
16
|
+
|
|
|
17
|
+## Investigatie și attempts
|
|
|
18
|
+1. `git bisect` => first bad commit `324f2f8`.
|
|
|
19
|
+2. Diagnostic: `PageTabViewStyle` suspect.
|
|
|
20
|
+3. Inițial workaround: `#if targetEnvironment(macCatalyst)` exclude `PageTabViewStyle`.
|
|
|
21
|
+4. Alte modificări încercate: blocare actualizare nav bar ascuns pe Catalyst, reducere BLE churn, diverse pipeline fixes (wireless caching etc.).
|
|
|
22
|
+
|
|
|
23
|
+## Soluție finală aplicată
|
|
|
24
|
+- În `USB Meter/Views/Meter/MeterView.swift`:
|
|
|
25
|
+ 1. Eliminat `PageTabViewStyle` intern (deși nu era principal, s-a migrat la custom tab).
|
|
|
26
|
+ 2. `navigationBarHidden(landscape)` folosit doar iOS, nu Catalyst.
|
|
|
27
|
+ 3. Înlocuit `Picker(.segmented)` cu tab bar custom `HStack` + `Button` + icon/text, pentru consistență.
|
|
|
28
|
+ 4. Mutați datele `MeterInfoView` în tab `Home` (fără buton `info` separat).
|
|
|
29
|
+ 5. adaptare portrait/landscape cu `segment` stabil.
|
|
|
30
|
+ 6. titlu nav inline să comprime spațiul pe macOS.
|
|
|
31
|
+
|
|
|
32
|
+## Commit-uri relevante
|
|
|
33
|
+- `ef857c8` - custom tabs + blocker solution
|
|
|
34
|
+- `08a8ff3` - migrat MeterInfo content în Home și eliminat info button
|
|
|
35
|
+
|
|
|
36
|
+## Verificare
|
|
|
37
|
+- Reproducere: deschide app pe macOS Catalyst Apple Silicon, selectează un meter, comută taburile, deschide history modal; verifică fără blocaje.
|
|
|
38
|
+
|
|
|
39
|
+## Document location
|
|
|
40
|
+- `Documentation/Issue-Report-Catalyst-TabView-Blocking.md`
|