|May 23rd, 2011|
Apple gets a lot of flack over its curated app distribution model. No matter what your opinion on the subject is there is no doubt that for Apple’s model to have any sort of success it needs to be the only commercially realistic distribution avenue on the platform. This leads many people to jailbreak their devices for a variety of different reasons. Lets examine just the motivation of wanting to personally use non-App Store approved apps. The argument is then almost always framed as a dichotomy. I can jailbreak and get access to apps that Apple cannot or will not approve but risk damaging the device, violating warranty/support expectation, losing the ability to directly update to the latest OS version and introducing instability. Or I could keep my device in a stock configuration that will ensure stability and a clean upgrade path but miss out on some truly awesome and useful jailbroken apps out there. People don’t often remember that there is actually a third way to load apps onto your iOS device that has its own set of unique pros and cons. Apple fully supports loading apps on stock devices outside of the App Store through its developer program.
Batteries Not Included, Some Assembly Required
Apple’s developer program allows you to create code that will execute on stock iOS devices by enrolling in their program, obtaining a signing certificate and building the app from source. The obvious upside to this method of loading apps is that you maintain the security and stability of your OS as a whole and still get to experience a subset of the jailbroken apps out there. The downsides are:
- You need to pay $99 a year to generate signing certificates
- You need to build the apps yourself from source (if it is even available)
- The apps you build have to be OK with being sandboxed (although you still get to use private API)
- You need to re-build/load every time your provisioning profile expires.
Obviously not a great solution for app producers but it is a decent one for technically inclined app consumers.
About a year ago a story about a SNES emulator on the iPad made the rounds on a lot of sites and caused a lot of excitement. I was pretty excited too until I found out that it required a jailbroken iPad. I forgot about it until the other day when I randomly ran into a page linking to the SNES-HD- source code. I grabbed the source and started poking around. Unfortunately it clearly stated in the documentation that the source would only build for jailbroken devices. However, I wondered just how much of the source was really jailbroken specific and how much work it would be to make changes so that it would build and run as if I were going to submit it to Apple’s App Store. It turns out that it’s not that much.
How To Get It Working Yourself
I have created a patch and script that will create everything for you automatically and set you up so that you can just build, run and go. You are going to need a current copy of Apple’s Developer Tools (tested with Xcode 3.2.6) and a copy of the iOS SDK (my changes assume the 4.3 SDK). You will need to be a paid iOS developer with Apple and have correctly configured your development machine and iOS device so that you can sign code and run said code on your device. You will also need a copy of git installed on your machine.
- Download nonjailbrokensnes.zip
- Place all your awesome homebrew roms into the “SNES–HD-/ROMs” directory
- Open “SNES4iPad.xcodeproj“, build for “Device” and run
You now have a working (has some crashes and other bugs, but is serviceable) SNES emulator on your non-jailbroken iPad. Don’t forget to also build and run the ControlPad app on an iPhone/iPod Touch so that you can actually play your games. Note that the patch applied here will change the project to build through the standard Apple Developer Tools process and it will no longer build as it did for jailbroken devices. It is really just a quick and dirty hack and so it isn’t perfect but it gets the job done.
UPDATE: I should also clarify that there aren’t any significant modifications needed for the ControlPad app to get it to run on non-jailbroken devices. Thankfully getting that up and running is pretty easy 🙂
UPDATE: Riley Testut has forked the original SNES-HD- project into a new project called SNES4iOS which integrates the changes from my patch to enable it to build for non-jailbroken devices (even on Xcode 4) and also integrates some additional features.