Skip to content

Native iPad interface: sidebar navigation + responsive grids#1757

Open
MoreBlood wants to merge 1 commit into
altstoreio:marketplacefrom
MoreBlood:ipad-sidebar-grids
Open

Native iPad interface: sidebar navigation + responsive grids#1757
MoreBlood wants to merge 1 commit into
altstoreio:marketplacefrom
MoreBlood:ipad-sidebar-grids

Conversation

@MoreBlood

Copy link
Copy Markdown

Summary

Adapts AltStore for iPad with a native sidebar and width-responsive grids, without changing the iPhone UI — everything is gated on idiom / size class / a max content width, so compact widths are untouched.

Screenshots

iPad Pro, landscape — the tabs become a native sidebar tiled beside the content.

News Sources (centered empty state)
Add Source Browse
App detail My Apps
Settings

What changed

  • Sidebar (TabBarController) — on iPad (iOS 18+) the tabs render as a native sidebar (UITabBarController.mode = .tabSidebar) tiled beside the content; iPhone keeps the bottom tab bar. Deep links / programmatic selection use identity-based UITab lookup when the sidebar is active.
  • My Apps — the storyboard flow layout is replaced with a UICollectionViewCompositionalLayout so the installed-apps grid has exactly even gaps and adapts its column count to width (1 on iPhone, 2–3 on iPad). Update cards stay self-sizing; section headers / App IDs footer are reproduced as boundary supplementary items.
  • Sources — compositional adaptive grid + centered empty-state ("What are sources?") text.
  • Browse — more columns / wider cards at regular width.
  • News — feed constrained to a centered readable column; footer banner width matched to the news cards.
  • Detail pages — shorter hero at regular width.
  • ProjectTARGETED_DEVICE_FAMILY = "1,2" on the app target.

Testing

  • Built and run on the iPad simulator (iPad Pro 13"). Sidebar tiles in landscape, collapses to a top strip in portrait; grids reflow on rotation / sidebar toggle. iPhone tab bar unchanged.

Notes for review

  • Minimum iOS for the sidebar: the .tabSidebar presentation is iOS 18+; on iPad running iOS 17 the app falls back to the existing tab bar.
  • Drag-to-reorder active apps when there are no inactive apps — the drop delegate reads both section headers' attributes; the new layout only creates the "Inactive" header when that section is populated (same as the old .zero behavior). Happy to add an invisible anchor header if you'd prefer that be unconditional.

Adapt AltStore for iPad without changing the iPhone UI:

- TabBarController: on iPad (iOS 18+) present the tabs as a native
  sidebar (UITabBarController.mode = .tabSidebar) tiled beside the
  content; iPhone keeps the bottom tab bar. Navigation/deep links go
  through identity-based UITab lookup when the sidebar is active.
- My Apps: replace the storyboard flow layout with a compositional
  layout so the installed-apps grid has even gaps and adapts its
  column count to width (1 on iPhone, 2-3 on iPad); update cards and
  section headers/footers are preserved.
- Sources: compositional adaptive grid + centered empty-state text.
- Browse: more columns / wider cards at regular width.
- News: constrain the feed to a centered readable column and match
  the footer banner width to the news cards.
- Header detail pages: shorter hero at regular width.
- Enable iPad in TARGETED_DEVICE_FAMILY for the app target.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant