|
Bogdan Timofte
authored
2 weeks ago
|
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`
|