IceCubesApp
Dimillian/IceCubesApp
Generated 2026-08-10T10:25 UTC · CLI v0.4 · static + captured-layout pass · 424 Swift files
A passing grade for the 7.8in inner display. One structural gap pulls the score down: navigation runs on stacked tabs, so the inner display won't gain a sidebar. Worth fixing before launch — see the roadmap.
Check breakdown
7 checks · weightedAdaptive
w 0.2234 hardcoded frames · 6 UIScreen.main.bounds reads across 424 files
ParallelView
w 0.08Parallel View not blocked · w 0.10
Sidebar
w 0.250 NavigationSplitView · 0 sidebar opt-ins · 31 stacks
Scene
w 0.15SwiftUI @main App scene · w 0.10
Adaptive geometry
w 0.120 fold-state reads · 5 adaptive geometry
State
w 0.080 @SceneStorage · 0 restoration · 42 view models
SwiftUI
w 0.10265 SwiftUI files · 26 UIKit files
Findings
sample · 12 of 37 rows| Severity | Check | Finding | Location |
|---|---|---|---|
| Major | Navigation | NavigationStack without NavigationSplitView: the list/detail panes will not gain a sidebar on the inner display. | TimelineTab.swift |
| Major | Navigation | NavigationStack without NavigationSplitView: the list/detail panes will not gain a sidebar on the inner display. | MessagesTab.swift |
| Major | Navigation | NavigationStack without NavigationSplitView: the list/detail panes will not gain a sidebar on the inner display. | ProfileTab.swift |
| Major | Navigation | NavigationStack without NavigationSplitView: the list/detail panes will not gain a sidebar on the inner display. | ExploreTab.swift |
| Major | Navigation | NavigationStack without NavigationSplitView: the list/detail panes will not gain a sidebar on the inner display. | SettingsTab.swift |
| Major | Navigation | NavigationStack without NavigationSplitView: the list/detail panes will not gain a sidebar on the inner display. | MediaUIView.swift |
| Major | Adaptive layout | UIScreen.main.bounds is a fixed geometry read; use the scene coordinate space. | SceneDelegate.swift:11 |
| Major | Adaptive layout | UIScreen.main.bounds is a fixed geometry read; use the scene coordinate space. | SceneDelegate.swift:12 |
| Major | Adaptive layout | UIScreen.main.bounds is a fixed geometry read; use the scene coordinate space. | SceneDelegate.swift:44 |
| Minor | Adaptive layout | Hardcoded frame (width and height literals) will not reflow on the 7.8 inch inner display. | AboutView.swift:35 |
| Minor | Adaptive layout | Hardcoded frame (width and height literals) will not reflow on the 7.8 inch inner display. | TagChartView.swift:26 |
| Minor | State | No explicit scroll/selection state preservation. A fold transition can rebuild the view hierarchy; state held only in views is lost. | app-wide |
Remediation roadmap
ordered by effort · total 214hSwiftUI / UIKit boundary
Box the 26 UIKit files behind representable wrappers so the foldable renderer treats them as one surface.
Parallel View verification
Capture inner-display layouts at 7.8in on a device and confirm the opt-in holds for every tab.
State preservation
Add @SceneStorage and scenePhase restoration across the 42 view models so the fold keeps every scroll position.
Adaptive layout pass
Resolve the 34 hardcoded frames and 6 UIScreen.main.bounds reads to the scene coordinate space.
Adaptive geometry pass
Add size-class reads and respond to didUpdateEffectiveGeometry across the 5 adaptive sites so the layout reflows, not letterboxes, on wide canvases.
Sidebar & adaptive navigation
Replace the 31 stacked tabs with NavigationSplitView and a sidebar opt-in — the single largest lift, and the one that earns the featured look on the inner display.
Port plan
generated by the FoldReady CLI · dry runReady-to-review changes that move this app toward the foldable contract: scene lifecycle, Parallel View opt-in, sidebar navigation. Review each diff, download a patch, or apply them locally with the CLI.
git clone https://github.com/Dimillian/IceCubesApp && foldready port IceCubesApp --apply --tiers rClones the repo and runs the safe + review transforms, then re-scores.
Fixed these? Re-run the audit.
The CLI re-scans your source tree and re-scores in minutes — the roadmap above is the exact checklist.