Skip to content

feat(ios): add Home Screen, Lock Screen and StandBy widgets - #1277

Open
loki-inu wants to merge 1 commit into
LNPANDY:mainfrom
loki-inu:ios-home-screen-widgets
Open

loki-inu wants to merge 1 commit into
LNPANDY:mainfrom
loki-inu:ios-home-screen-widgets

Conversation

@loki-inu

Copy link
Copy Markdown
Contributor

Fix or feature

  • Fix
  • Feature

Feature from outside: #1272 (ready for milestone and maintainer review by @LNPANDY and @v0lumehi).

What and why

Problem. Players on iPhone and iPad cannot launch a game directly from the Home Screen, Lock Screen or StandBy.
Change. Add an optional WidgetKit extension, App Group snapshots, configurable AppIntents and nx2apple:// deep links across seven widget families.

Checked

  • Tests: frontend, frontend-ios, frontend-qt, tools, l10n_shell_catalogs.py --check and generic iOS xcodebuild all passed.
  • Visual QA: Rendered all seven widget families and localized states via NX_SHELL_CAPTURE_DIR using synthetic placeholder art.
  • Not checked: Live Simulator or device widget gallery runs, since this Mac has no iOS Simulator runtime.

Screenshots

No existing desktop or iOS library view changed. New iOS and iPadOS widget renders:

iPad Pro Home Screen showcase
iPhone Home Screen, Lock Screen and StandBy
All seven WidgetKit families and tap zones
AppIntents edit modes and localized states

Details

Architecture and provisioning compatibility

  • ShellHostModel writes a compact snapshot.json (up to 48 games) and downsampled cover thumbnails into the shared App Group container (group.<app-bundle-id>) whenever library state or launch recency changes.
  • ShellWidget implements ContinuePlayingWidget and Switch2DeckWidget across systemSmall, systemMedium, systemLarge, systemExtraLarge, accessoryCircular, accessoryRectangular and accessoryInline, backed by WidgetConfigurationIntent (All Games, Switch 2, Pinned Game) and a zero-artwork EntityQuery.
  • ShellDeepLink routes nx2apple://play/<title_id>, nx2apple://settings/<title_id>, nx2apple://controllers and nx2apple://library from cold start (ShellMain.m and ShellApp.swift) and warm start (onOpenURL) with 16-hex Title ID validation.
  • ShellInstall, ShellExport, AppSignature, build_shell.sh, build_shell_template.py and frontend-qt/nspb_qt/win/shell_export.py re-sign PlugIns/DmShellWidget.appex when a matching extension provisioning profile is present, and strip PlugIns/ cleanly on free Personal Team accounts so standard device installs keep working.

Commands and test results (bff5164 on d0adbda, macOS 26, MacOSX27.2.sdk and iPhoneOS27.2.sdk)

  • python3 tools/l10n_shell_catalogs.py --check — passed (all 10 locales synced)
  • python3 -m unittest discover -s frontend-qt/tests — 492 tests passed (46 skipped)
  • python3 -m unittest discover tools/tests — 249 tests passed (29 skipped)
  • swift test --package-path frontend — 1,195 tests passed (49 skipped, 0 failures)
  • swift test --package-path frontend-ios — XCTest plus 223 Swift Testing tests in 26 suites passed (0 failures)
  • xcodebuild -project frontend-ios/Demo/ShellDemo.xcodeproj -scheme ShellDemo -destination 'generic/platform=iOS' CODE_SIGNING_ALLOWED=NO build — BUILD SUCCEEDED
  • bash frontend-ios/Shell/build_shell.sh --build — DmShell.app and embedded PlugIns/DmShellWidget.appex built cleanly

Scope

  • No engine file (dm/, scripts/, docs/, ref/) is added to the repository: a change there is a patch in patches/ (a commit in engine/, then tools/engine.py export, and tools/engine.py check passes), with its Upstream-Status
  • A change to a launcher view has before and after screenshots above
  • No keys, game files or data extracted from a game in the change or the attachments

@github-actions github-actions Bot added launcher The NX2Apple launcher app ios iPhone or iPad windows Windows (the Qt front end) labels Nov 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ios iPhone or iPad launcher The NX2Apple launcher app windows Windows (the Qt front end)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant