Skip to content

Complete Apple dynamic memory, private ISO imports and controller settings - #1

Open
AttilaTheFun wants to merge 16 commits into
mastercheese-dev:mainfrom
AttilaTheFun:apple/ios-installer
Open

AttilaTheFun wants to merge 16 commits into
mastercheese-dev:mainfrom
AttilaTheFun:apple/ios-installer

Conversation

@AttilaTheFun

@AttilaTheFun AttilaTheFun commented Oct 12, 2026 •

Copy link
Copy Markdown

This refresh completes the remaining Apple runtime and import fixes on current CoreCE main (c88fcf2d). Most of the original PR's controls, graphics diagnostics and networking implementation are now present in the base, so those duplicate commits have been removed from this proposal.

Changes

  • Choose an OS-selected, aligned iOS guest arena instead of reserving one fixed address. Compiler translation, host services and graphics/import bridges use the runtime base. Executable instructions remain in the signed app; no JIT, Extended Virtual Addressing or Increased Memory Limit entitlement is required.
  • Restore selected-driver dispatch in the Apple GL stack-argument bridges. Without it, ANGLE texture allocation and framebuffer blits could reach the native driver and leave the game view black. Add a production-bridge regression probe with a failing negative control.
  • Keep the touch controller in player one's slot during split-screen setup. Add a visible gear button for Graphics & Diagnostics, including the existing “Touch as a separate player” setting; shaking still works. Hardware pairing continues to hide the gamepad controls automatically.
  • Retain and SHA-256-verify a private Mac ISO copy before extracting maps, store the retained path, and use Foundation to resolve application storage. Failed imports preserve existing data. Preserve CoreCE's naming and storage directory.
  • Exclude the loading-film resource from Apple packages, including stale resources left by incremental Xcode builds. Users continue to supply their own game image.
  • Correct stale signing and runtime documentation.

Upstream names, icons and default bundle identifiers remain unchanged. No personal signing material or internal distribution settings are included.

Building and compatibility

Use the iOS build guide and re-signing guide. Previously linked downloadable IPAs are historical builds of the old PR, not this refresh. A fresh public download has not yet been published.

This targets CoreCE protocol 34 and its discovery network. It does not discover or join current mainline OpenCE protocol-38 games. Changing a version constant or discovery topic alone would not provide compatibility. A mainline-compatible downstream path is still being evaluated; this PR does not claim that result.

Validation and remaining work

Passed on this refresh: iOS simulator build and landscape first-launch ISO screen; signed-image runtime probe at three arena addresses; both controller-routing probes; Mac private-import, rollback, preferences and legacy-migration probes. These do not establish full-match gameplay or performance parity. The device and native Metal Mac builds also passed; the installed Mac signature and device package boundary were verified. The game main menu renders in the leased iPhone simulator, and the gear button’s actual action opens Graphics & Diagnostics in landscape. The corrected runtime log has no incomplete-framebuffer report. The targeted suite passes 12 tests and three subtests. The final device rebuild after the GL correction passed. This is ready for code review, not a claim of full-match acceptance or mainline interoperability.

The previous reporter confirmed that the old dynamic-arena build launched in LiveContainer. That is historical user evidence, not a fresh test of this revision. Free-account sideloading remains unverified here.

Attribution and related ports

Built on mastercheese-dev/CoreCE, formerly innerhat-dev/OpenCE, retaining its Apple runtime and renderer. Earlier work came through our original Apple PR #64, NicholasDominici/halo-ce-ios, and fqlx's browser PR #12, with the shared decompilation lineage through OpenCE and bnunu/halo-1.

Reviewed VISR for additional Apple improvements. Its sampler probes and shader-warmup identity tests are useful references; no VISR code is copied here and no benchmark advantage is claimed. Detailed findings and open gates are in the refresh record.

@AttilaTheFun
AttilaTheFun marked this pull request as ready for review October 13, 2026 00:22
@AttilaTheFun

Copy link
Copy Markdown
Author

image

About 110fps on iPhone 15 Pro at native resolution.

@AttilaTheFun

Copy link
Copy Markdown
Author

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:

  • Split-screen: this base has multiplayer lobby Add Player / controller Start joining, plus Co-op Campaign. The menu-loading regression that hid the updated menus is fixed. I also fixed an iOS routing bug where the desktop single-controller rule could move the touch controller out of player one's slot.
  • Touch plus a physical controller: added Touch as a separate player in the shake settings. Enable it and relaunch: touch stays visible on player one, and hardware controllers get separate slots. Use Add Player in the lobby, then select the additional player's profile with their controller. The default still hides touch when a controller connects and shares player one, preserving the owner's requested behavior.
  • LIGHT / SWAP G: already corrected in the migrated controls. With default bindings, LIGHT maps to left shoulder / Xbox white / flashlight, and SWAP G maps to right shoulder / Xbox black / grenade switching.
  • Movement while navigating pause: already fixed by this fork's upstream 129d3483. Gameplay input is suppressed for the player whose controller owns the menu; the online match itself continues. That fix is retained and credited to upstream.
  • Custom Edition: partially covered by the current protocol-28 community-map transfer/download work. An iOS standalone CE import/switcher and full CE-map interoperability testing remain open; I am not claiming arbitrary Xbox and CE content can share a match.
  • Customizable layouts/remapping: a full drag/remap/add/remove editor and named layout presets remain feature follow-ups. The new routing setting does not close that request.

@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.

@UEMxMDE

UEMxMDE commented Oct 13, 2026

Copy link
Copy Markdown

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:

  • I opened the app and tapped on "Choose Halo ISO"
  • I chose the same .xiso.iso I have been using to test iOS ports
  • I see loading bars that say the app is importing stuff
  • I get an error that says:

Halo OG could not start
Cannot initialize game memory. See save/halo.log for the failed memory reservation or image load.
OK button

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.

@AttilaTheFun

Copy link
Copy Markdown
Author

@UEMxMDE Thanks for both logs. They report the same failure: Guest arena reservation: (os/kern) invalid address. The import completed, but iOS rejected the runtime's fixed virtual-memory range before the game image started. Re-importing the ISO will not fix that, and the logs do not suggest a bad ISO.

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:

  • Check the required memory reservation before asking you to import a large ISO.
  • Log the requested address, size and kernel result.
  • Replace the shrinking SDL alert with a dedicated scrollable UIKit screen, with Copy details and Close buttons outside the text area. Existing imported data and saves are preserved.

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 halo.log will give us the address/size and kernel code needed for the next investigation. Please don't upload provisioning profiles or signing keys.

@UEMxMDE

UEMxMDE commented Oct 14, 2026

Copy link
Copy Markdown

I just downloaded and tested your new ipa and the "extended virtual addressing" is an issue for me. I like that the error in the updated ipa is more descriptive of what I am missing to get the app to work. Previously I used an app called GetMoreRam (which can be found here: https://github.com/hugeBlack/GetMoreRam) to add the "Increased Memory Limit" entitlement to LiveContainer (I did this a long time ago and the entitlement is still there), but now to run your app I also need extended virtual addressing (by the way, extended virtual addressing was not a requirement to test other iOS Halo ports that I tried, I am not sure why it is a requirement now).

I found an app called iRAM+ (which can be found here: https://github.com/NexSideloading/iRAM-Plus) that says it can provide both the "Increased Memory Limit" and "extended virtual addressing" entitlement to any sideloaded app, but this app is experiencing an error called the "-80045" error. According to r/altstore right now, this error is happening to AltStore and Sidestore as well due to issues caused by Apple themselves, which means I can't actually test your app until Apple/sideloading developers resolve this issue.

@AttilaTheFun

Copy link
Copy Markdown
Author

@UEMxMDE I investigated why the other iOS port could run without Extended Virtual Addressing. NicholasDominici's ios-port uses an OS-selected aligned arena; our previous runtime hardcoded 448 GiB. I replaced that fixed-address dependency in the allocator, compiler lowering, import stubs and GL pointer arguments.

New unsigned IPA and signing kit: public build 17. It no longer requests Extended Virtual Addressing or Increased Memory Limit. Please use this new IPA; re-signing build 16 with an empty entitlement file cannot change its compiled memory layout.

I installed and launched the same runtime standalone on an iPhone 15 Pro/iOS 27.0.1, with both memory entitlements verified absent from the app signature. It loaded all imports and reached the main menu with Metal/MetalFX. The signed-code tests also run the same machine code at three different arena addresses.

Your iOS 26/LiveContainer combination is still unverified. Our test phone's OS selected 448 GiB, so this does not prove that every earlier OS/container has an available aligned region, or resolve the provisioning-service error you reported. When your signing tools work again, please try build 17 and share save/halo.log if it still fails. Existing imports and saves should be retained when updating with the same container/identifier.

Design, attribution and test limits. Physical gameplay/performance comparison remains to be done; the device check so far establishes startup.

@AttilaTheFun

Copy link
Copy Markdown
Author

@UEMxMDE The latest version is ready to try: public build 18 — unsigned IPA and re-signing kit.

It includes:

  • Dynamic memory allocation instead of the old fixed address, removing our Extended Virtual Addressing requirement. Neither that entitlement nor Increased Memory Limit is requested.
  • The readable startup error screen with working Copy details/Close buttons.
  • Updated protocol-29 multiplayer compatibility and upstream map-download/restart fixes, so it can discover and join current servers.

The memory change launched successfully standalone on my iPhone 15 Pro without either memory entitlement. The latest protocol-29 runtime also joined a populated live server in the simulator. Your iOS 26/LiveContainer setup is still unverified, so I'd appreciate another try when your sideloading tools allow it. Download the new IPA itself; re-signing an older build won't update its memory layout.

If it still fails, please attach the new save/halo.log and let me know whether you used LiveContainer or a standalone installation. Thanks for helping test this!

@UEMxMDE

UEMxMDE commented Oct 14, 2026 •

Copy link
Copy Markdown

I tried the new build and I'm still getting the same error: halo.log

@AttilaTheFun

Copy link
Copy Markdown
Author

@UEMxMDE Thanks for the log. It contains the old fixed-address diagnostic (Guest arena reservation at 0x7000000000) and “The running process needs Extended Virtual Addressing” instructions. I checked the release IPA: those strings are absent from build 18, whose startup error explicitly says it does not require that entitlement.

This suggests an older installed copy is still launching, or an older log was exported. It does not yet establish whether the updated runtime works in your LiveContainer setup.

Please use the direct build 18 IPA download, confirm the imported app is 0.2.0, build 18, then fully close/reopen LiveContainer and launch the updated entry. Preserve your game data and saves; there is no need to delete them or re-import the ISO.

The unsigned download's SHA-256 is 52efc8c3d73637e577da597ebe90385835d5a99fa32df07bd636ea539a24b932 (before re-signing/container modifications).

If it still fails, please attach a freshly exported log from that entry after the failed launch, the error-screen screenshot, and the installed build number if available. Please also confirm whether this attempt uses LiveContainer or a standalone installation. Your iOS 26/LiveContainer combination remains unverified.

@UEMxMDE

UEMxMDE commented Oct 15, 2026

Copy link
Copy Markdown

I just tried that direct download and it worked! Thank you for that, when I saw the log again it was my mistake. The app successfully imported the game. I will do some more testing when I can.

@UEMxMDE

UEMxMDE commented Oct 18, 2026

Copy link
Copy Markdown

I just did more testing on the latest version:

  • I am struggling to figure out what you mean by "shake settings" so that I can have touch controls and physical controller as separate players. Because of this I also can't test split screen. Pressing "Add player" on the lobby does nothing, regardless of whether I am pressing it using touch controls or a physical controller.
  • I also get stuttering in this build in the same way that I get stuttering on my PC for the Windows build, but I have found stuttering on this build to be less intense than on my Windows copy of OpenCE. For both platforms I noticed that stuttering usually happens when I load a map for the first time, and it goes away the more I explore the same map and the more times I load into the same map. On an unrelated note, when testing stuttering on "Coldsnap 20th Xl Rc5", I eventually got rid of most of the stuttering by doing what I said above (exploring the map for the first time, loading into the map multiple times) I got lots of graphics popping issues when flying in the main large area.
  • This is a tiny thing and not an issue/problem at all, but it's something I noticed anyways: On the Multiplayer menu, there are 4 options under Create Game (internet, LAN, CO-OP campaign, and Edit Gametypes). On the Windows build, the horizontal line is above the Edit Gametypes button while on this build the horizontal line is below the Edit Gametypes button.

I also have some suggestions:

  • The upstream OpenCE now has mod support, so my suggestion is to pull that from upstream to this iOS build.
  • I talked about this in the OpenCE PR that was closed by cybersecurity: An on-screen button to hide or show the touch screen controls. NicholasDominici's iOS build already has this button.
  • The Windows build has the ability to open and use the terminal. I don't know if this is possible in this iOS build and I would like to see it implemented if it isn't already.

@AttilaTheFun
AttilaTheFun marked this pull request as draft October 21, 2026 20:57
@AttilaTheFun AttilaTheFun changed the title Complete iPhone/iPad distribution and port Apple controls and graphics diagnostics Complete Apple dynamic memory, private ISO imports and controller settings Oct 25, 2026
@AttilaTheFun
AttilaTheFun marked this pull request as ready for review October 25, 2026 21:55
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