Repository navigation
Complete iPhone/iPad distribution and port Apple controls and graphics diagnostics - #1
AttilaTheFun wants to merge 29 commits into
Conversation
Adapt the earlier Apple contributions while preserving upstream branding and defaults. Includes private game imports, iPhone/iPad controls, graphics diagnostics, simulator ABI support, IPA tooling and settings fixes. Attribution and validation are recorded in docs/apple-ios-migration.md.
f8c6ab9 to
3eeba72
Compare
When the process is suspended (a phone app in the background) or the machine sleeps (a laptop), the p2p thread's wait lasts far longer than it asked for. The NAT's mapping of the tunnel may have lapsed and the brokers' TCP connections may be gone, but nothing notices until each one's silence timeout, so joins and listings fail for a while after the game resumes. When a wait lasts longer than its length plus PEER_TIMEOUT, the thread now discards what the sockets reported, asks the STUN servers for the public address again, and has every broker close and connect again at once (p2p_signal_reconnect). A wait of normal length changes nothing. Nothing sent over the network changes, so HALO_PORT_NETWORK_VERSION stays. Checked: the Android guest and the web build compile with no new warnings. The same change, together with an iOS host fix for the sockets iOS takes from a suspended app, made server browser joins work on an iPad Pro after about five minutes in the background (they failed until a relaunch without both). Not run on Linux, Windows or Android. (cherry picked from commit 0a5a235)
(cherry picked from commit 2059b6c)
Hosts send players who join without the game's Custom Edition map the map and the resource maps it needs; the other players help, torrent-style. Network version 27: new map sharing messages, and players of an internet game now reach each other.
… still downloading it. (cherry picked from commit 71ceb36)
… joins. (cherry picked from commit 67f2214)
…r late join. (cherry picked from commit baab078)
(cherry picked from commit 05dd9cc)
Campaign scripts only name two players, so a large group was left on the beach when Truth and Reconciliation's grav lift switched into the ship. (cherry picked from commit d6df944)
…icle limits. (cherry picked from commit 417de7e)
…oads the level. (cherry picked from commit c3365b1)
… type chooses the sky. (cherry picked from commit b71bd6a)
Network version 28: the host now holds a downloading machine's players out of the game, and keeps a multiplayer map's first scripted BSP. Dynamic lights and the flashlight stay on past the Xbox limits, and a second weapon picked up while firing is readied. Machines of version 27 would disagree on these. - A large co-op game's respawn fallback no longer picks a teammate who is in the air, outside the BSP, or riding an AI vehicle. - A machine still downloading the map times out when it goes silent. - Held players join through the late-join queue, so they get the same checks. A machine with no held players is started instead of being refused. - The co-op teleport uses world positions, which are right for seated players. - Overshield drain no longer cuts off a hit's flash, and hits over 0.02 flash. - The menu XML is the generator's (Custom Edition's layout) again. - port: markers on two new declarations. Checked: ninja linux, android and web build; tools/harness, test_touch_menu and test_web_build pass. (cherry picked from commit 5a7c655)
|
Following up on the feedback from the original OpenCommunityEdition/OpenCE PR #64, now that the Apple work is based on this fork. @UEMxMDE — thank you for the detailed gameplay/input report. I checked all six points against the current code:
@cybersecurity — regarding the Apple CI/testing concern, this contribution is now against the Apple-maintained innerhat fork, which already has macOS workflows. It requests no runner/workflow changes in the original repository. This does not remove Apple runner costs or ask you to take on Apple-device testing. The new changes are in 811cbb42. Validation: signed iOS device build passed; five focused routing, browser-ordering and menu checks passed. Routing tests exercise production functions with ASan/UBSan, including separate-player isolation, reconnect, bounded enumeration and modal input suppression. Physical split-screen/controller gameplay still needs testing; no phone/tablet was installed or launched during this review. Full disposition and validation record. The larger feature requests above remain explicitly open rather than being presented as fixed. |
|
I just tested this app in LiveContainer (I downloaded it from here: https://github.com/AttilaTheFun/halo-ce-universal/releases/tag/apple-ios-pr1-20261012). I enabled "Fix File Picker" before booting it up for the first time. Here is what happened:
Halo OG could not start Here is save/halo.log after getting this error for the first time: halo.log Here is save/halo.log after opening the app multiple times after the first time: halo.log Also once the app is opened more than the first time, the "OK" button becomes untappable. The entire error window quickly shrinks to nothing when I open the app and the "OK" button is kind of cut off. When I tap the "OK" button or anywhere else on the screen, nothing happens. These issues are not fixed by closing and reopening the app or by deleting and reinstalling the app. I tested this on an iPhone 17 Pro Max on iOS 26.0. |
|
@UEMxMDE Thanks for both logs. They report the same failure: This runtime requires Extended Virtual Addressing in the process actually running the game. LiveContainer documents that guest entitlements are not applied to its host, so granting it to the Halo guest does not establish that the host has it. “Fix File Picker” only addresses the picker. The error is consistent with a missing host capability or incompatible address-space layout; these two logs alone cannot distinguish them. I cannot yet claim LiveContainer support, even with an entitled host. I pushed 38b21174 to address the app-side failure handling:
Updated unsigned IPA and signing kit (public build 16). This improves diagnostics/error handling; it does not bypass the memory capability or establish LiveContainer compatibility. The tested signing route remains a standalone app with a provisioning profile that grants Extended Virtual Addressing, as described in the guide. Validation: device build and re-signing/signature/entitlement checks passed. A forced-error iPhone simulator test exercised Copy details and Close across three launches with orientation changes; ordinary startup still loaded the guest and menus. I have not reproduced your exact LiveContainer/iPhone 17 Pro Max setup. If you can try standalone signing and it still fails, the new |

Try it on iPhone or iPad
Download the unsigned IPA and re-signing kit, then follow the re-signing/source-build guide. Requires a profile granting Extended Virtual Addressing; the tested route uses a paid developer team. Free-account AltStore installation is not verified. Supply your own Xbox ISO/XISO on first launch. The public IPA contains no personal profile or game data.
iPhone/iPad imports and Apple diagnostics on the current runtime
Ports the useful additions from my earlier Apple PR onto
innerhat-dev/OpenCEmain (036b9fe6). This base already includes iOS: the change completes its import/distribution path and adapts the previous controls and graphics tools while retaining the newer LLVM runtime, renderer, native menus, server browser and network protocol.macOS ISO/XISO picker now retains a SHA-256-verified private image as well as extracted maps, and saves the private image path. A regression test removes the original selected ISO and verifies import data and reloaded preferences still work.
Universal iPhone/iPad app with Files ISO/XISO import, structural validation, SHA-256 copy verification and transactional private storage. No retail images/maps are bundled. Existing private imports and saves remain usable when the bundle ID is unchanged.
Touch layout, D-pad, primary hardware-controller routing, automatic touch visibility and landscape handling.
Shake-accessed iOS Graphics & Diagnostics menu with persisted Metal (ANGLE, default) or native OpenGL ES, render resolution, 30/60/120 FPS limit, smooth-motion interpolation and optional FPS overlay. MetalFX spatial upscaling is optional with Metal. Mac retains its separate graphics window. The old WebKit room transport remains retired.
Bounded ANGLE shader cache and shareable session reports containing active settings, frame-time/thermal samples, shader timings and recent logs. First-use GPU-stall capture is opt-in. Scenario-script music cues respect the console filter and stay in debug.txt instead of appearing during normal play.
Restore the iOS platform imports/DTLS build and separate simulator addressing from the device's signed instruction image. Use a 448-GiB device arena above the GPU carveout and below the observed 512-GiB VM limit, with consistent compiler/import lowering. Keep the upstream Extended Virtual Addressing entitlement requirement.
IPA packaging/re-signing tools with explicit profile checks. Repository bundle IDs remain unchanged; builders supply their own with
--bundle-id.Mouse sensitivity 1–100, default 20; preserve existing multiplier units. Fix duplicate
[display]sections that made newly generated configuration invalid on relaunch.Update public-game discovery to upstream network protocol 28, bundle the missing iOS broker defaults, recover broker connections after resume, and rank joinable servers by population before limiting results. Include the upstream map-transfer and join-admission dependencies while retaining Apple transport fixes.
Attribution and lineage
This builds on innerhat-dev/OpenCE main, retaining its Apple runtime and current networking. The carried additions originate in AttilaTheFun/halo-ce-universal, former apple/ios-web-multiplayer, previously OpenCommunityEdition/OpenCE PR #64.
Earlier foundations deserve credit: NicholasDominici/halo-ce-ios, ios-port for the iOS port, and fqlx/halo-ce-universal, fqlx/browser-webgl-stream-batching, PR #12, for the earlier browser/network foundation. Shared decompilation lineage comes through OpenCommunityEdition/OpenCE and bnunu/halo-1.
The protocol-28 integration selectively adopts OpenCommunityEdition/OpenCE networking work, with source commits, decisions and validation recorded in the network review.
Browser visibility and landscape correction
Fixed an invalid map-sharing menu platform attribute that caused the whole updated menu set to fall back to the Xbox menus. The browser is now visually verified in the iPhone simulator, showing 35 public servers in population order. Updated XML validation catches this failure. Removed the scene lock to permit rotation between the two supported landscape orientations; simulator orientation and background/resume checks pass. Physical-device rotation still needs a retest.
Validation and draft limits
Current networking checks: exact upstream protocol-28 wire-format fingerprint; signed iOS and native Mac builds; population-ranking regression and menu checks; 128 cache-format cases and 15 native map-name harness cases. The updated native Mac client successfully joined the populated public “The Dude” Blood Gulch game and exchanged gameplay updates. This was a short join test, not a full match or a physical-iOS networking test.
Passed: native Mac, simulator and signed device builds; signed-image ABI probe; 16 importer safety tests under ASan/UBSan; menu XML/capacity validation; fresh config parse/save/relaunch test. A private retail ISO imported successfully in the iPad simulator; main menu, first-mission startup and graphics modal rendered. Mac menu rendering and MetalFX initialization also passed smoke tests.
The broad inherited fixture run reproduces the same 5 failures, 7 errors and 1 skip on pristine
036b9fe6; these are documented, not suppressed. See migration decisions and validation and iOS build/re-signing instructions.Physical iPhone 15 Pro launch has passed, and the owner reports playable Silent Cartographer with a Backbone controller, approximately 110 FPS at native resolution with occasional area-loading drops to 50–60 FPS. These are user observations, not a controlled benchmark. Simulator checks covered both Metal and native OpenGL menu rendering, resolution selection, the shake handler, FPS overlay and session-report generation.
Still draft pending broader physical iPad/gameplay coverage, controller reconnect, background/resume, physical-device MetalFX output validation and a full online match against a compatible current web build. This does not claim compatibility with older deployed PR OpenCommunityEdition#12 clients.
Branch scope
innerhat-dev:main→AttilaTheFun:apple/ios-installer→AttilaTheFun:apple/ios-internal.This PR contains the reusable functionality and preserves upstream app names, icons and bundle-ID defaults. Personal distribution branding and identifier overrides live only on the downstream
apple/ios-internalbranch, which is not proposed for merging.