On-Demand Resources: Keep Your App Bundle Slim

On-Demand Resources (ODR) host app assets on the App Store, not in your bundle, shrinking your initial download. Use it for game levels or tutorials not needed at first launch. The OS downloads assets by "tag" when requested, but can also purge them to save.
Why it exists
Large app bundles lead to slow downloads, high user abandonment, and take up precious device storage. On-Demand Resources (ODR) were created to solve this by decoupling non-essential assets from the initial app install, allowing for a much smaller and faster first-time user experience.
The mental model
Think of ODR as a remote storage locker for your app's assets, managed by iOS. Instead of shipping a huge moving truck (your app bundle) with everything you might ever need, you ship a small car and call for specific boxes (tagged resources) from the locker only when you need them.
How it works
During development, you group assets like images, data files, or scenes under string identifiers called tags. At runtime, your app requests resources by providing one or more tags. The OS then handles downloading the assets from the App Store. Once downloaded, the resources are cached on the device for faster access, but the OS retains control and can purge them to free up space. Your app must release the request when it's done with the assets.
When to use it
Use ODR for any content not required at first launch. Three common patterns are: first, lazy loading for state-specific resources like game levels; second, remote storage for rarely used content like tutorials; and third, delivering assets for in-app purchases after the user buys them.
When not to use it
Do not use ODR for your app's core, launch-critical assets. The app must be able to function at a baseline level without any ODR content. You also cannot include executable code (like compiled Swift, Objective-C, or C++). If an asset is needed immediately at launch, it belongs in the app bundle.
One canonical example
A game has 50 levels. Instead of bundling all 50 levels' assets (textures, models, sounds), the developer puts each level's assets into a separate ODR tag (e.g., "level-1", "level-2"). When the player is on level 4, the app requests the tags "level-4" and "level-5". The OS downloads them. When the player finishes level 4, the app releases the request for the "level-4" tag but keeps "level-5" and pre-fetches "level-6".
Interview question
For which scenario would On-Demand Resources be the most appropriate solution?
- a.Hosting user-generated content that needs to be shared across multiple devices.
- b.Including all core assets necessary for the app's immediate startup.
- c.Delivering assets for a game's later levels only when a player progresses to them.Correct
- d.Storing executable code modules that are downloaded after the app launches.
Why? this is the answer
The card explicitly states ODR is for "lazy loading for state-specific resources like game levels" and content not required at first launch. Options A and B are listed under "When NOT to use it," and D describes a different type of remote storage not managed by ODR.
Just read this? Test yourself on what you have been reading.
Read the original → developer.apple.com
- #ios
- #app architecture
- #performance
- #asset management
You just looked this up. Could you explain it out loud?
That is the part interviews actually test. Tezvyn takes questions like this one and gives you what the interviewer is really checking, the answer that lands, and the mistake that ends the conversation, in the four minutes before your next meeting.
The iPhone app is on the way
We are building it. Until it lands, nothing here is held back from you: every interview card, your saved cards, streaks and the job board all work in Safari, plus hundreds of free practice quizzes of thirty questions each. Sign in and it all carries over to the app the day it arrives.
Want it as an icon? Tap Share at the bottom of Safari, then Add to Home Screen. It opens full screen and the cards you have read stay available offline.
We are hiring for this. Open roles that interview on ios — each one lists the topics its interview covers.
See open roles