Skip to content

Add native Apple ARM64 apps and in-game public server browsing - #64

Closed
AttilaTheFun wants to merge 7 commits into
OpenCommunityEdition:mainfrom
AttilaTheFun:apple/ios-web-multiplayer
Closed

AttilaTheFun wants to merge 7 commits into
OpenCommunityEdition:mainfrom
AttilaTheFun:apple/ios-web-multiplayer

Conversation

@AttilaTheFun

@AttilaTheFun AttilaTheFun commented Oct 3, 2026 •

Copy link
Copy Markdown

Adds native ARM64 iPhone/iPad and Apple Silicon Mac apps with private ISO/XISO import, Metal rendering, controllers and public-server multiplayer. Multiplayer → Join Game → Server Browser now uses upstream’s in-game PC-style menus, including live server rows, selection outlines and game-lobby previews.

Draft: this revision is rebased/consolidated onto main 193cbf59. A Mac client joined a live public Blood Gulch match through the new menus. Signed 0.1.9 (13) builds and launches on iPhone 15 Pro. Sustained testing, dedicated visionOS support and renewed browser crossplay/migration validation remain open.

Test builds

  • macOS: Download notarized Halo 0.1.10 (14) for Apple Silicon. Extract the ZIP and move the app to Applications. The app is signed with Developer ID, accepted by Apple notarization, stapled, and verified by Gatekeeper; a fresh download was checked against the published SHA-256. Normal sandboxed Metal/audio startup and clean exit passed. This is a prerelease for testing.
  • iOS: Download the unsigned IPA from a successful iOS workflow run. The branch includes tools/ios_resign.sh and setup instructions for signing with the tester's own Keychain identity and device provisioning profile. Re-signing the CI-produced IPA and verifying nested/app signatures passed locally; free Personal Team provisioning remains untested.
  • Both require the user's own supported original Xbox ISO/XISO; no game image/maps/saves are distributed.

Attribution and source branches

This port builds on the work of the following maintainers and contributors:

  • Upstream decompilation and cross-platform runtime: cybersecurity/halo-ce-universal, branch main, rebased onto revision 193cbf59. This supplies the shared game/runtime foundation and the recent PC menus/settings, signed public-server browser, focus/name fixes, player-slot reuse, weapon pickup/melee fixes and split-screen co-op code. Co-op is not yet validated on Apple hardware.
  • Browser/WASM port by fqlx (Ben Burns): fqlx/halo-ce-universal, branch fqlx/browser-webgl-stream-batching, revision eaa82e68, submitted as upstream PR #12. This PR retains that source-built WASM/WebGL port and its browser storage, input and room/multiplayer work, and adapts the room transport for the optional Apple browser-room mode. The Apple game itself executes native ARM64; optional WebKit runs bundled room transport JavaScript, not the WASM game.
  • Native iOS ARM64 foundation by NicholasDominici: NicholasDominici/halo-ce-ios, branch ios-port, imported/adapted from revision 3f2c1410. This supplies the signed ARM64 ILP32 runtime and 4 GB pointer-arena approach, Darwin bridges, UIKit/SDL input and audio, GLES renderer, XISO importer and build tooling used as the Apple port's starting point. No JIT or executable-memory entitlement.

The Apple integration and subsequent changes are developed in AttilaTheFun/halo-ce-universal, apple/ios-web-multiplayer. The foundations above are credited to their original authors and contributors; this PR combines and extends their work. Third-party attribution is recorded in THIRD_PARTY.md.

Integration changes

  • Add Expat and SDL key-name bridges to the Apple runtime. Preserve Apple renderer fixes, private imports, controllers, graphics settings and native-menu audio servicing. Fix the interaction between browser solo-host behavior and main’s configurable match time limit.
  • Native networking uses shared STUN/UDP/KCP, signed MQTT listings and protocol 11. Retain Darwin address conversion and older game-settings record compatibility. The old native list remains available with Xbox menus and diagnostic launch controls.

Apple app behavior

  • Mouse Setup now offers 1–100 with a default of 20 (0.10 multiplier, 2.5 times slower than the previous menu minimum), finer low-end adjustment and vertical SAME. Existing settings retain their multiplier; select 20 and confirm OK after updating to lower an existing setting. Mac 0.1.10 builds and renders the new menu correctly; Apple notarization/Gatekeeper checks pass.

  • Metal via pinned ANGLE by default, with a persisted iOS OpenGL ES fallback. Optional MetalFX spatial upscaling; performance benefit remains unmeasured.

  • Persistent bounded ANGLE shader cache and shareable shader-stall reports. iOS graphics settings appear on shake; macOS has a separate Settings window and standard application menus, including Quit.

  • Touch controls hide when a controller connects and return on disconnect. Mac supports mouse/keyboard and controllers without a touch overlay. Xbox use is user-confirmed; Backbone and PlayStation hardware remain untested.

  • First launch asks for the user’s own supported Xbox ISO/XISO in Files/Finder. Import copies into private storage, verifies SHA-256 readback and validates maps before atomic publication. Private data/saves survive app replacement.

  • Bundles contain no disc images, maps or saves. They now include upstream XML menu layouts and redrawn menu graphics; original logos/map pictures are read from the user’s image. HUD/font replacements remain excluded. This packaging does not establish legal clearance for reconstructed code; see distribution notes.

  • App/menu name: Halo: Combat Evolved; icon label: Halo. Retain the original ring icon and Choose Halo ISO import UI.

Multiplayer boundaries

Public native servers are the default. Browser rooms (experimental) remains a separate setting requiring relaunch. The deployed PR #12 demos checked on 2026-10-04 used protocol 6, versus native protocol 11; this refresh does not claim compatibility with those deployments. Browser checkpoint/migration compatibility needs revalidation after the game-settings changes. No voice chat, native UPnP or PR #69 HTTP-list/sorting additions.

Validation and known issues

  • Both Apple Release targets build; signed 0.1.9 installed on iPhone 15 Pro, with normal Metal/audio/touch startup checked. Mac main menu, separate Settings window and Quit checked.
  • Real Mac in-game browser → public server → lobby preview → player admission → Blood Gulch gameplay, followed by clean exit. Fresh profile creation exercised through the menus. Prior 0.1.8 also successfully joined a public match on the physical iPhone; sustained 0.1.9 iOS matches still need testing.
  • Apple regression suite passes: ABI/memory, SDL audio, display, 16 XISO cases, room queues, shader cache, actual Darwin TCP/UDP and quick-play lifecycle. 132 browser JavaScript checks pass, plus native rejoin/ownership, client lifecycle, checkpoint, migration-manager, connection-idle, player-name, pending-rejoin and host-policy/solo-time-limit harnesses.
  • Eight applicable upstream Python checks pass, including menu XML and settings. Three Linux-specific ABI/link/listing checks cannot run on this macOS toolchain. The full WASM build and its checks passed in CI; Linux/Windows/Android builds also passed. Native and browser relay transport fixtures now pass with correct MQTT version negotiation. All final runtime CI checks passed at 33ee5d53, including clean-runner iOS device/simulator packaging. Later changes add the re-signing helper and 0.1.10 mouse sensitivity; CI is rerunning for the latter, with local Mac build and menu checks passing.
  • Missing floor/pod surfaces, end-of-first-mission pod jitter and remaining shader hitches are still reported issues. Every new in-game setting, co-op, NAT/background behavior and extended stability remain unverified. The 0.1.9 Mac test release is now notarized and published above; extended user testing is pending.

Apple build instructions and attribution · Validation record · Mac build

@AttilaTheFun AttilaTheFun changed the title Add native iOS ARM64 runtime and browser-room multiplayer Add native Apple ARM64 apps, private disc import, and browser-room multiplayer Oct 3, 2026
@AttilaTheFun AttilaTheFun changed the title Add native Apple ARM64 apps, private disc import, and browser-room multiplayer Add native Apple ARM64 apps, public servers, and browser-room multiplayer Oct 4, 2026
Logan Shire added 2 commits October 4, 2026 11:37
Rebase and consolidate the Apple runtime on upstream main 193cbf5, retaining the browser runtime and optional WebRTC transport from PR OpenCommunityEdition#12 at eaa82e6. Include shared ILP32/Darwin bridges, private ISO import, Metal via ANGLE, controllers, shader diagnostics, macOS app menus and the upstream in-game server browser.

Validation: signed iPhone 15 Pro install and launch, both Apple Release builds, real Mac public-server join through the in-game browser, Apple regression suite, 132 browser JavaScript checks, menu schema/settings checks and updated native rejoin/checkpoint harnesses. See port/ios/VALIDATION.md for limits and attribution.
@AttilaTheFun
AttilaTheFun force-pushed the apple/ios-web-multiplayer branch from cfb5454 to 8e34cc4 Compare October 4, 2026 15:41
@AttilaTheFun AttilaTheFun changed the title Add native Apple ARM64 apps, public servers, and browser-room multiplayer Add native Apple ARM64 apps and in-game public server browsing Oct 4, 2026
@AttilaTheFun
AttilaTheFun marked this pull request as ready for review October 4, 2026 17:24
@MrMilenko MrMilenko added enhancement New feature or request priority: low Nice to have / when time allows labels Oct 5, 2026
@UEMxMDE

UEMxMDE commented Oct 7, 2026 •

Copy link
Copy Markdown

I have some thoughts about your progress so far:

  • There is no split screen multiplayer (I'm talking about normal split screen multiplayer from the original Xbox Halo CE, not COOP split screen, although I don't see any split screen option in general)
  • There is no on-screen option to hide or show the touch screen controls. Because of this, when I turn on my physical controller, the touch screen controls disappear (and when I turn my physical controller off, the on-screen controls reappear), meaning I can't use both at once. This means I can't re-enable the touch screen controls to see if I can treat the touch screen controls as one player and the physical controller as another player. Although like I said above, I don't see any split screen option so I'm not sure how I would even test this.
  • The touch screen controls "SWAP G" and "LIGHT" are swapped. I don't know if they are swapped for a physical controller as well.
  • When I press pause while in a match, then use the touch screen controls such as the d-pad, "MOVE", or "LOOK", the player moves around when trying to select option in the pause menu. This also happens with the physical controller. I don't remember if this happens with the original Xbox Halo CE as well because it has been a while since I played it.
  • I saw on the announcements channel of the discord server that Custom Edition support would begin soon. My suggestion is to also support Custom Edition in the ipa, so we can switch between playing the Xbox xiso.iso and playing Custom Edition in the app. Also, if possible, allow people playing the Xbox version to play with people playing Custom Edition.
  • EDIT 16 hours later: Suggestion: Make the on-screen controls customizable so I can do things like move the controls to different parts of the screen, remap existing controls to different inputs, add or remove controls, an option to revert to default controls, the ability to save different custom configurations of custom controls, and also do the same things for physical controllers where applicable.

@cybersecurity

Copy link
Copy Markdown
Collaborator

macOS support cannot be officially added due to the github runners for them costing 10x as much as Linux runners (I also don't own any apple products so I cannot do testing). Long term, I will likely link one of the MacOS / IOS forks in the main repo for people to find.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request priority: low Nice to have / when time allows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants