Always-On iOS

The iPad is a perfectly capable computer, but one thing you can’t use the iPad for are jobs that take a long time.

If you’re on a desktop or laptop PC and you need to kick off a job that’s going to take a half hour, such as rendering a 3D video, you just do it. The machine sits there and does the job until it’s done. The computer may go to sleep, which will pause the job, but you can control if and when this happens. The laptop may run out of power, but plug it in and the job continues.

On iOS, you can kick off a long-running job, but you have to keep that app in the foreground until it completes. You can’t hit the Home button and go surf the web until it’s done, because iOS will kill the backgrounded app after 10 minutes, whether it’s done or not. Need to upload a large file to an FTP server? Better hope you can get it done in 10 minutes, or make sure you switch back to the FTP tool before the 10 minutes is up, or the app is killed.


This also means you can’t use an iOS device as a server. The hardware is more than capable of acting in a server role, listening for connections and responding to them, but because hitting the Home button would wind up eventually killing your server, you can’t reliably use an iOS device this way.

iOS has the ability to run background jobs. Photos, for example, downloads and processes your photos in the background. iCloud does this for documents. But no third party applications are allowed to do this.

Suppose I wanted to build an app that would monitor photos from a webcam over wifi, do image detection with the vision API, and take some action depending on what objects are detected. Totally possible and totally reasonable app to build, but the app would have to be launched interactively by the user and kept in the foreground. If the device were to lose power, a user would have to tap on the app to re-launch it.

iOS does seem like an odd platform for this sort of server application, but it’s the platform where all the innovation is happening. Some Apple technologies, like CoreML and HomeKit, are only supported on iOS.

I don’t mind that iOS is so aggressive with background processes when the device is running on battery power. That seems like the right tradeoff. But when plugged in, apps should be able to request, and be granted, the ability to run in the background as long as they need to.