USB-Meter / Documentation / Issues / 001_2026-03-24_17-30_catalyst-tabview-freeze.md
1 contributor
40 lines | 2.115kb

Issue: macOS Catalyst Navigation Freeze with TabView in MeterView

Description

  • 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).
  • Condiții: în detaliu (right pane) existau layout-uri cu tab-uri și paginare.

Impact

  • Nu se puteau deschide ferestre modal și nici naviga spre info/settings.
  • Doar pe Apple Silicon + macOS 26. Intel + Sonoma nu era afectat.

Root cause

  • Commit introdus 324f2f8 a adus:
    • TabView + PageTabViewStyle în MeterView landscape
    • GeometryReader intern și .navigationBarHidden(landscape)
  • PageTabViewStyle pe Catalyst, în split NavigationView, pare să interfereze cu UINavigationController intern, blocând stările de navigare.

Investigatie și attempts

  1. git bisect => first bad commit 324f2f8.
  2. Diagnostic: PageTabViewStyle suspect.
  3. Inițial workaround: #if targetEnvironment(macCatalyst) exclude PageTabViewStyle.
  4. Alte modificări încercate: blocare actualizare nav bar ascuns pe Catalyst, reducere BLE churn, diverse pipeline fixes (wireless caching etc.).

Soluție finală aplicată

  • În USB Meter/Views/Meter/MeterView.swift:
    1. Eliminat PageTabViewStyle intern (deși nu era principal, s-a migrat la custom tab).
    2. navigationBarHidden(landscape) folosit doar iOS, nu Catalyst.
    3. Înlocuit Picker(.segmented) cu tab bar custom HStack + Button + icon/text, pentru consistență.
    4. Mutați datele MeterInfoView în tab Home (fără buton info separat).
    5. adaptare portrait/landscape cu segment stabil.
    6. titlu nav inline să comprime spațiul pe macOS.

Commit-uri relevante

  • ef857c8 - custom tabs + blocker solution
  • 08a8ff3 - migrat MeterInfo content în Home și eliminat info button

Verificare

  • Reproducere: deschide app pe macOS Catalyst Apple Silicon, selectează un meter, comută taburile, deschide history modal; verifică fără blocaje.

Document location

  • Documentation/Issue-Report-Catalyst-TabView-Blocking.md