Skip to content

Rigs of Rods for iOS - unsigned IPA (rolling)

Choose a tag to compare

@github-actions github-actions released this 19 Oct 10:02
· 23 commits to main since this release

Unsigned, ad-hoc-signed RoR IPA for arm64 iPhone/iPad, built from ccce37f.

Files (release-dependent):

  • RoR-ios.ipa - the full game, ~112 MB. Ships its data in
    RoR.app/rorres/ (not resources/ - see below).
  • RoR-ios-lite.ipa - the same app with the content-only archives
    dropped (meshes/textures/sounds/caelum/SkyX/
    hydrax), ~40 MB. Every archive the startup path
    loads is kept, so it launches exactly like the
    full build - this is what makes it a usable
    launch diagnostic.
  • RoR-ios-tiny.ipa - NOT the game. Shares Info.plist/signature/packaging
    with the game. Installs and launches (green screen).
  • RoR-ios-bin.ipa - diagnostic (only on 'diag' tag). Real RoR binary,
    no data directory at all. The known-good baseline.
  • RoR-ios-res0.ipa - diagnostic (only on 'diag' tag). bin plus a single
    file in resources/ . The known-BAD reference.
  • RoR-ios-res0r.ipa - diagnostic (only on 'diag' tag). bin plus the same
    single file, in rorres/ instead. What the fix does.

Why the directory is called rorres:

An .app whose bundle contains a top-level directory named resources
(or Resources - the check is case-insensitive) is refused by the iOS
installer with the generic "Unable to Install", while the very same
directory under any other name (zzz/, Base.lproj/, rorres/) installs
and runs. Measured on device: bin - no directory -> installs
zzz/rotest.txt -> installs
Base.lproj/rotest.txt -> installs
resources/rotest.txt -> refused
Resources/rotest.txt -> refused

codesign is what flips. With a resources/ (or Resources/) directory
present it switches its resource rules to the macOS "resource
envelope" set - rules=^Resources/, plus a '^[^/]+$ -> nested' rule in
rules2 - and iOS will not install a bundle sealed that way. With any
other directory name it keeps the plain ^.* rules that iOS accepts.
The ad-hoc signature was never the problem: an unsigned variant with
resources/ is refused just the same.

If the game installs but crashes right after launching:

It now writes Documents/ror-trace.log - one line per startup phase,
plus every OGRE log line and, if it dies, the reason (SIGSEGV, or the
uncaught exception's message). That file is flushed line by line with
write(2), so it is complete even when the process is killed mid-line.
Open it on the phone: Files app -> On My iPhone -> Rigs of Rods ->
ror-trace.log. The last lines are the interesting ones. The same
folder holds RigsOfRods/logs/RoR.log, which OGRE writes - but that one
is buffered and loses its tail on a crash, so prefer ror-trace.log.

Hand the file itself to ESIGN / Sideloadly / SideStore - it is served
as a plain file, nothing to unpack. An .ipa is a zip whose root
contains Payload/.

CHECK THE DOWNLOAD BEFORE INSTALLING

A truncated download makes every installer fail, and the error looks
like a build problem ("Truncated input file", "Unable to Install").
Compare the byte size of the file you downloaded with the list below;
if it differs by even one byte, download the file again.

RoR-ios.ipa 114899322 sha256:b75e650c6f7dbfbb350f5bfe31006ab8bfd78b1866db68261c3f7b3f847572ff
RoR-ios-lite.ipa 43259277 sha256:934608ad8d7c7b6589fcdeb751f5a4ccf609153ac635c5b785c0223ed04c9d08
RoR-ios-tiny.ipa 37864 sha256:f4bef12b5afb124ffa4185a729230b0a19a6021ee3bcb5af9bc037ea33b914ff
RoR-ios-bin.ipa 6767972 sha256:42a3db151e2f16b6b3e16c12234b2b7d7f93e0799172d38fc9da080909720896
RoR-ios-res0.ipa 6768434 sha256:b950039769c5b66a02fbd72e358a6f361ea6a71a18f410265c7f79b45d6f950e
RoR-ios-res0r.ipa 6768430 sha256:b075153d3966daca6b4e7d2929f3668cce5a1518ed13b31eb7b0f8a4d3a62bf2