Skip to content

Add native iPad support - #47

Open
sbroenne wants to merge 7 commits into
mainfrom
sbroenne-native-ipad-support
Open

sbroenne wants to merge 7 commits into
mainfrom
sbroenne-native-ipad-support

Conversation

@sbroenne

@sbroenne sbroenne commented Aug 25, 2026

Copy link
Copy Markdown
Owner

Summary

  • make the app and UI-test targets universal for iPhone and iPad while keeping iOS/iPadOS 17 as the minimum
  • support all iPad orientations and multitasking, with responsive ride/setup layouts and accessible keyboard, sheet, dialog, and navigation behavior
  • preserve the sole-Click discovery deadline across candidate-driven SwiftUI updates, with a deterministic delayed-candidate regression fixture
  • run UI coverage on iPhone 17 Pro, iPad mini, and iPad Pro 13-inch in CI
  • add six verified 2064 x 2752 iPad App Store screenshots and update product, accessibility, privacy, support, development, and release documentation

Validation

  • swift test --enable-code-coverage
  • full UI suites on iPhone 17 Pro, iPad mini (A17 Pro), and iPad Pro 13-inch (M5)
  • iPad portrait, upside-down portrait, landscape, compact-width, sheet, navigation, and accessibility coverage
  • delayed sole-Click regression passed on all three destinations; the fixture starts empty, injects one candidate after discovery is active, and requires selection at the original deadline
  • iPad mini fan-control regression rerun twice; shared flow also passed on iPhone and iPad Pro
  • strict MkDocs build and all six iPad screenshots verified at 2064 x 2752

Physical evidence and release status

  • signed development build installed and launched on a physical iPad Air (iPad14,10) running iPadOS 26.6.1
  • sole original Zwift Click was physically rediscovered and selected automatically after the deadline fix
  • physical Wahoo KICKR V5 gate passed: discovery/connection, FTMS riding-app connection, Start Shifting, easier/harder shifts including Click, Stop Shifting, normal wheel-size restoration, and riding-app continuity
  • Headwind was not repeated on iPad; the existing physical iPhone evidence remains the supported claim
  • universal build 1.0 (19) uploaded and validated for device family iPhone, iPad, attached to App Store version 1.0, and available to the internal Insiders TestFlight group
  • live App Store metadata now has universal iPhone/iPad wording, the current support/marketing/privacy URLs, and all six 13-inch iPad screenshots
  • not submitted for App Review

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI lite review requested due to automatic review settings August 25, 2026 09:20

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The code, CI, and documentation changes are consistent with the stated iPad enablement goals and include explicit validation/release gating for the remaining physical-iPad Bluetooth verification.

Pull request overview

This PR expands Virtual Gears from iPhone-only to a universal iPhone+iPad app, adding iPad-specific layout bounding, orientation support (including upside-down portrait), CI coverage across representative iPhone/iPad simulators, and updating all major documentation/release surfaces to reflect the new device scope and the remaining physical-iPad validation gate.

Changes:

  • Make the app + UI test targets universal and add iPad orientation support, with bounded ride controls for large displays.
  • Add/extend UI tests for iPad orientation/layout and provide a deterministic “Done” keyboard-dismissal path for numeric entry.
  • Update CI, App Store metadata docs, MkDocs site copy, and repository documentation to consistently reflect iPhone+iPad support and the physical iPad Bluetooth release gate.
File summaries
File Description
VirtualGearsUITests/VirtualGearsUITests.swift Adds iPad orientation/layout regression coverage and validates the new explicit keyboard dismissal control in wheel-size UI.
VirtualGearsProduct/VirtualGearsHomeView.swift Bounds shifting UI/control sizes for large iPad layouts to keep controls at deliberate, usable sizes.
VirtualGearsProduct/SetupView.swift Adds a keyboard toolbar “Done” button using FocusState to explicitly dismiss the numeric keyboard.
VirtualGearsProduct/Info.plist Declares iPad-supported orientations (including upside-down portrait).
VirtualGears.xcodeproj/project.pbxproj Switches targeted device family to iPhone+iPad ("1,2") for universal support.
README.md Updates product overview/requirements/screenshots section to include iPad and clarifies simulator vs physical validation.
mkdocs.yml Updates site description copy to reflect iPhone+iPad support.
docs/support.md Updates support language from “iPhone” to “Apple device” where applicable.
docs/requirements.md Updates requirements and user-facing instructions to cover iPhone+iPad and documents the physical-iPad Bluetooth gate.
docs/PRIVACY.md Updates “Last updated” date and changes wording from iPhone-only storage to device (iPhone/iPad).
docs/index.md Updates landing page copy and adds iPad screenshot section and iPad layout explanation.
docs/how-it-works.md Updates diagram caption/copy to reflect iPhone or iPad and iOS/iPadOS behavior.
docs/DEMO_VIDEO.md Adds explicit instruction that a physical iPad recording/validation is required before universal upload.
docs/APP_STORE.md Updates App Store metadata guidance for universal release, adds explicit “not uploaded yet” warning, and defines the physical iPad gate steps.
docs/accessibility.md Updates accessibility documentation wording to cover both iPhone and iPad usage.
DEVELOPMENT.md Updates dev prerequisites, adds iPad simulator UI-test instructions, and documents the physical iPad release gate.
.github/workflows/ci.yml Runs UI tests across a destination matrix (iPhone 17 Pro, iPad mini, iPad Pro 13-inch) to cover iPad layouts in CI.
.github/ISSUE_TEMPLATE/bug_report.yml Updates bug report template to request “Apple device and OS version” instead of iPhone-only.
Review details
  • Files reviewed: 18/24 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Stefan Brönner added 6 commits August 25, 2026 11:30
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 282ed3db-8004-44ab-ae8d-e474cd2210b8
Wait for simulators to finish booting before UI tests, and document the successful signed iPad install and launch alongside the remaining automation and Bluetooth release gates.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 282ed3db-8004-44ab-ae8d-e474cd2210b8
Use an explicit view-owned search task so physical CoreBluetooth candidate updates cannot discard the single-device selection deadline. Record the physical Click evidence and required iPad retest.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 282ed3db-8004-44ab-ae8d-e474cd2210b8
Inject the sole debug Click only after scanning begins and require the intermediate discovery state before automatic selection. Drive the absolute search deadline with a timer so candidate updates cannot cancel it.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 282ed3db-8004-44ab-ae8d-e474cd2210b8
Record the completed physical iPad Bluetooth gate, refresh release and App Store copy, make the compact demo fan test wait for the segmented control transition, and increment the universal TestFlight build.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 282ed3db-8004-44ab-ae8d-e474cd2210b8
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 282ed3db-8004-44ab-ae8d-e474cd2210b8
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.

2 participants