Introducing AltStore

I honestly can’t believe I’m finally writing about all of this. Everything in this blog post is something I’ve been working on in some form or another for the past several years. In order to make sure I didn’t shoot myself in the foot by revealing too much, however, I didn’t allow myself to talk about anything other than Delta during the whole process 😅 But now, finally, it’s time to reveal the other big project I’ve been working on: AltStore.

So, what is AltStore? AltStore is an alternative app store for non-jailbroken devices. Unlike other unofficial app stores today, AltStore does not rely on enterprise certificates, which Apple has been cracking down on more and more recently. Instead, it relies on a lesser known developer feature that allows you to use your Apple ID to install apps you’ve developed yourself with Xcode, Apple’s development toolkit. This is intended for people who might otherwise be unable to purchase a $99/yr developer account themselves (such as students) — but as it turns out there’s no technical reason why it’s limited to just apps installed from Xcode.

AltStore is a fully native, sandboxed iOS application that allows you to sideload apps by essentially “tricking” your phone into thinking it’s installing apps that you made yourself, when really they can be any apps whatsoever. Since this is an actually supported installation method by Apple, it’s far less fragile than other distribution methods in the past (such as our old friend the Date Trick to install GBA4iOS 💜). Similarly, since there’s no single enterprise certificate to revoke (because technically every user now has their own developer certificate using this process), Apple can’t simply shut it down with the press of a button like they have with some 3rd party app stores (until they receive a new certificate in a week or so, of course).

For this distribution method, AltStore requires your Apple ID and password to communicate on your behalf with Apple’s developer servers. I’ve done everything I can to ensure these credentials are handled properly (i.e. it’s never sent to any 3rd party server, only sent directly to Apple for authentication, and then stored securely in the device’s keychain so nothing else can retrieve it), but since it doesn’t matter what Apple ID is provided, you are more than welcome to create throwaway accounts if desired. Once AltStore has configured your account for you, AltStore then “resigns” (or as I call it in AltStore, “refreshes”) the application with your Apple ID to ensure all normal iOS security checks pass and treat the app as if it’s an app you’ve built yourself.

However, this method was certainly not without its challenges; Apple has put several restrictions in place for this distribution method to prevent exactly this use case, which (they hoped) would severely limit what people could do with it. As it turns out, these restrictions are exactly what I’ve been trying to work around for the past few years, and I’m very happy with the results 😄

AltServer

Unlike apps distributed with a paid Apple Developer account, you can’t install apps distributed with a free Apple ID over-the-air. This means that while we can prepare apps for installation from the AltStore app, unfortunately there is no way to actually install apps directly from the iOS device. However, as it turns out this restriction does not apply to installing apps via iTunes WiFi sync, which is where AltServer comes in.

AltServer is a desktop companion app for macOS/Windows that does nothing but just silently run in the background listening for incoming AltStore connections. When a connection is formed, AltStore sends a resigned/refreshed app to AltServer over WiFi, which then uses the same underlying iTunes WiFi sync infrastructure as Apple to wirelessly install the app back to your device.

Since (obviously) there is no AltStore on device to install AltStore in the first place, AltServer is also responsible for initially installing AltStore onto your device. Once AltStore has been installed, however, you can do everything else from the app itself (as long as you are on the same WiFi network as AltServer and iTunes WiFi sync is enabled).

Refreshing Apps

All apps signed with a free Apple ID are only valid for 7 days, at which point they expire and can no longer be launched. To compensate for this, AltStore will periodically refresh all your installed apps in the background, or alternatively you can manually refresh the apps yourself from within AltStore. Once they’ve been refreshed, they won’t expire for another week.

Right now, this is using the existing iOS Background Fetch API, which allows an app to run in short bursts in the background at the system’s discretion. Unfortunately there’s not much more control beyond this, and it’s random whether the system chooses a time where the device is connected to the same WiFi as AltServer. However, the more you use AltStore, the more often iOS will let it try to refresh apps in the background, so as long as you open the app every once in a while, AltStore and AltServer should be able to find each other at least once over the course of the week. Even better, iOS 13 introduced new backgrounding APIs that are much better for this use case, and I plan to use them as soon as I can. Imagine a Shortcut to refresh your apps that automatically runs in the background whenever you connect to your home WiFi… 🙂

Installing More than 3 Apps

The last major restriction is that an iOS device may only ever have at most 3 apps installed using this method, even if they come from different Apple IDs. This was by far the most frustrating one to deal with, but thankfully I was able to find a workaround in time. Whenever an app is installed using this method, its “provisioning profile” is also stored on-device alongside other provisioning profiles from other apps in a separate location. As it turns out, iOS doesn’t actually check the presence of apps to see if you’ve exceeded your limit, but instead checks the presence of these provisioning profiles.

While there’s nothing I could do about this from the iOS device itself, as it turns out the same underlying iTunes (WiFi) sync infrastructure I’m using allows you to also install and remove provisioning profiles from devices (since Xcode also requires this ability to manage profiles for developers). Before installing an app, I remove all the existing profiles on the device to make it look to the system like there are no other apps installed, and then once the app is installed I reinstall all the profiles. It’s very simple, but it works.

What apps are available?

From the beginning, AltStore was intended to serve as a way for developers to distribute entirely new apps that push the boundaries of iOS in ways not possible with Apple’s app review system. AltStore will initially launch with two of my own apps included: Delta, my all-in-one emulator I’ve been working on for the past 4+ years, as well as Clip, a simple clipboard manager app.

Delta of course is not allowed in the App Store due to Apple’s stance on emulation, but why make a clipboard manager when so many already exist in the App Store? Simple: there is no App Store-approved way for apps to run continuously in the background, which means you need to remember to manually open up these apps for them to save your history. However, since I don’t need to adhere to app review, I can be a little more…creative. Technically, media apps are allowed to run indefinitely in the background so that the user can continue listening to music while performing other tasks. Clip takes advantage of this by playing silent audio on loop while in the background, but in a way that won’t affect whatever else you might be listening to on your phone at the same time. This allows Clip to constantly monitor the device’s clipboard, while also having a negligible effect on battery life (it takes very little energy to “play” the silent audio file I’m using), and I’ve been using it non-stop for the past few weeks or so without noticeable effects.

Post-launch, and once I’ve verified I’ll be able to keep up with demand, I’ll begin working on the ability for anyone to list their own apps inside AltStore, similar to Cydia (but in a more user-friendly way!). This is when the real power of AltStore will come in, and is what I’m definitely most excited for 🎉

When can I start using AltStore‽

Delta, Clip, and AltStore are all officially launching this Saturday, September 28. However, because I want to make sure launch goes as smoothly as possible, I’m releasing an AltStore preview that you can download right now so I can iron out any remaining issues. If you’d like to help out, just head to the official AltStore website and follow the instructions.

To give you all something to download and test everything out, I’ve revived Delta Lite, my Swift Playground as a native iOS app. So please, download Delta Lite and help me battle-test everything by reliving some fun NES games! With your help, I can better prepare myself for the big day in just over 72 hours 🙏

Great, Delta is finally here!! What comes next?

Well, I have lots of ideas I want to do for AltStore, Delta, and Clip, and now that I’ve built this foundation it will be much easier to rapidly build on top of it. However, there is just one problem: I’ve been trying to figure out how I can actually support myself working on AltStore, Delta, Clip, as well as any other apps I may make. For almost the entire development of Delta, I’ve supported myself by working various freelance jobs, and then spending whatever free time on top of that on my own apps. This works, but it does mean I’m not able to invest as much time as I’d like into my apps, which in turn means it takes much longer to finish them (see: almost 5 year development period for Delta).

I’ve had enough people ask me over the years if there was an official way to support my work that I finally decided to try out Patreon. I’m still planning on freelancing to provide for myself, but the hope is a Patreon will subsidize the amount of money I need to earn by freelancing, thus freeing me up more to work on my own apps. In exchange for becoming a patron, you’ll be able to then download beta versions of my apps, which will be listed and installed through AltStore like their non-beta versions (but identified with a “Beta” badge). This way, AltStore, Delta, and Clip can remain free for everyone, but those who donate just get access to the newer features early.

Initially, AltStore will launch with these betas for patrons:

AltStore Beta - Sideloading Apps

This feature allows you to use AltStore to install any apps — not just those listed in AltStore — and have them be refreshed in the background just like an AltStore app. It currently works for most apps, but apps that are slightly more complex (such as those with certain app extensions) might fail. My priority post-launch is to make this sideloading feature work with as many apps as possible, before later adding support for 3rd party app listings directly in AltStore.

Delta Beta - Nintendo DS Support

Surprise, Nintendo DS support is coming to Delta after all 🎉 Initial support for DS games will be available at launch in the Delta beta, including support for game saves, save states, and Hold Button. Because it’s still in beta, I’ve yet to add support for the remaining features such as Fast Forward and cheats, but I hope to add those features sooner rather than later post launch (because I want them for me too!).

Delta Lite Beta - Gameboy Color Support

In addition to Delta Lite, there will also be a “beta” version that supports both NES games and GBC games. This is so people who donate on Patreon during the preview receive something special, instead of having to wait a few days to receive the Delta beta.

So yeah, if you’d like to support me working on these apps as my full-time job, I hope you’ll enjoy early access to whatever I’m working on 😊

One Big Wrap-Up

Okay, I know this was a lot, so here’s a condensed version with what you need to know:

Delta’s distribution method is AltStore, an alternative app store for non-jailbroken devices.

AltStore uses your own Apple ID to prepare apps for installation, not some (possibly stolen) enterprise certificate that can be revoked.

AltStore uses a desktop app AltServer to install apps back to the phone using iTunes WiFi Sync.

AltStore refreshes apps for you in the background so you don’t need to ever manually refresh them or worry about them expiring.

You can install more than 3 apps with AltStore.

AltStore, Delta, and Clip are simultaneously launching this Saturday, September 28 .

. AltStore preview available for download right now.

You can receive access to beta versions of AltStore, Delta, and more by supporting me on Patreon.

Beta version of AltStore includes ability to sideload any app (.ipa file).

Beta version of Delta includes support for playing Nintendo DS games.

And I think…..that’s everything I’ve been keeping secret for the past several years. Stay tuned as I continue to add features to AltStore, Delta, and Clip, and soon open up AltStore so anyone can be a part of it. iOS is a tremendous platform, but there are definitely missed opportunities to build some amazing apps. My dream is for AltStore to foster an entirely new iOS app ecosystem determined to push the platform to its limits, and I’m committed to making that a reality with all of your help 💜