I run RetroArch non-jailbroken on my iPhone 6 Plus, and found that after upgrading to iOS 9, none of the emulator cores would work.
It turns out that the way dynamic libraries get loaded changed in iOS 9 - if you’re trying to run a 32-bit core on a 64-bit device, it’s expecting the library to be in a specific format - a format that you’d get if you compiled with iOS 8 as the minimum version.
I recompiled the iOS cores with iOS 8 as the minimum version using Xcode 6.4, and they seem to work now.
I zipped up the ones that compiled successfully and I uploaded them here: https://mega.nz/#!eEQ2FAYQ!MFMjYRkkgn7K-SrOcYwo_OGR78uBFWyg17VNG8D-WbM
To install the cores:
- Unzip the archive
- Codesign the dylib files with your dev signing key
- Copy the files to your RetroArch cores folder (Documents/modules or Documents/cores or wherever)
I tested nestopia, snes9x_next_libretro, genesis_gx_plus and pcsx_rearmed_interpreter and they seem to work ok now. Gigabtyes of retro games have been revived for me I tested on an iPhone 6 Plus running iOS 9.0 with RetroArch 1.1, and on an iPhone 4 running iOS 7.1.2 with RetroArch 1.2 (compiled in xcode 6).
If you want to compile the cores yourself, change the following lines in libretro-super/libretro-config.sh:
FROM:
-
CC="cc -arch armv7 -marm -miphoneos-version-min=5.0 -isysroot $IOSSDK"
-
CXX="c++ -arch armv7 -marm -miphoneos-version-min=5.0 -isysroot $IOSSDK"
-
CXX11="clang++ -std=c++11 -stdlib=libc++ -arch armv7 -marm -miphoneos-version-min=5.0 -isysroot $IOSSDK"
TO:
-
CC="cc -arch armv7 -marm -miphoneos-version-min=8.0 -isysroot $IOSSDK"
-
CXX="c++ -arch armv7 -marm -miphoneos-version-min=8.0 -isysroot $IOSSDK"
-
CXX11="clang++ -std=c++11 -stdlib=libc++ -arch armv7 -marm -miphoneos-version-min=8.0 -isysroot $IOSSDK"
and run ./libretro-build-ios.sh
Hope this helps anyone out.
Thanks to twinaphex and frogor on IRC for the help and discussion