App Thinning: Slicing, Bitcode, and On-Demand Resources

The app weighs 180 MB when downloaded on an iPhone 13 mini, yet the same size on an iPad Pro, even though the tablet doesn't need @2x assets. This scenario is typical for projects where resources are gathered into one universal bundle without considering resolutions and architectures. As a result, u

Development and support of all types of mobile applications:

Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1All 1734 services
App Thinning: Slicing, Bitcode, and On-Demand Resources
Medium
from 1 day to 3 days

Our competencies:

Frequently Asked Questions

Latest works

  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    597

The app weighs 180 MB when downloaded on an iPhone 13 mini, yet the same size on an iPad Pro, even though the tablet doesn't need @2x assets. This scenario is typical for projects where resources are gathered into one universal bundle without considering resolutions and architectures. As a result, users with smaller devices waste traffic on unnecessary data, and installation slows down.

App Thinning solves this problem: the App Store automatically assembles a variant tailored to the specific device, delivering only the necessary resources. We configure the full App Thinning cycle — Slicing, Bitcode, and On-Demand Resources — to achieve the smallest possible download package. The combined savings can be up to 50%, which for 100,000 installations saves about $5,000 in mobile traffic. The app delivery cost decreases by roughly $0.02 per download.

Apple Developer Documentation recommends using Asset Catalog for all resources so that Slicing works correctly.

How App Thinning Reduces IPA Size

Device Size without Thinning Size with Thinning Savings
iPhone SE (gen2) 180 MB 110 MB ~39%
iPhone 14 Pro 180 MB 130 MB ~28%
iPad Pro 12.9" 180 MB 95 MB ~47%

Data for an app with @2x and @3x layouts, ODR tags, and Bitcode removal.

Slicing

The App Store creates separate IPAs for each device. iPhone 8 gets only @2x resources and an ARMv8 slice, iPad Pro gets @3x and ARM64e. The key requirement: Asset Catalog. Resources outside .xcassets are not sliced — they end up in all variants. We ensure all images are in the catalog with correct size slots (@1x/@2x/@3x) and trait variations (iPhone/iPad/Mac).

We verify the result via Xcode → Product → Archive → Distribute → Ad Hoc/Development → Export → App Thinning: All compatible device variants. After export, we examine App Thinning Size Report.txt — the table shows sizes for each device.

On-Demand Resources (ODR)

Content that isn't needed immediately (game levels, tutorials, filters) is tagged and loaded on request. It is stored on Apple's servers, not increasing the IPA.

Configuration:

  1. In Xcode: Target → Build Phases → Copy Bundle Resources → set On Demand Resource Tags for the resource in Asset Catalog.
  2. In code, use NSBundleResourceRequest:
let request = NSBundleResourceRequest(tags: ["level_5"]) request.conditionallyBeginAccessingResources { available in if available { // resource already loaded } else { request.beginAccessingResources { error in guard error == nil else { return } // resource loaded, can use } } } 

ODR limits:

Parameter Limit
Initial install bundle up to 200 MB
On-demand resources up to 20 GB
Simultaneously loaded ODR up to 2 GB

For games with large content, ODR fundamentally changes the installer size — we guarantee optimization without losing user experience.

Bitcode

Bitcode is an intermediate LLVM representation that Apple can recompile for new architectures. In modern Xcode versions, Bitcode is not required for iOS apps — the requirement has been removed. For watchOS and tvOS, Bitcode may still be needed if using an older Xcode or libraries. If you support old libraries that require Bitcode, we set ENABLE_BITCODE = YES in Build Settings. All frameworks must contain Bitcode, otherwise the whole build loses this capability.

Bitcode became optional for iOS with an Xcode update. However, for watchOS and tvOS it may still be required with older Xcode or libraries. If you support old libraries, check compatibility.

Why ODR Matters for Games and Large Apps

ODR allows deferring the loading of content that is not needed at startup. Without ODR, the user downloads everything at once, increasing time to first launch and reducing conversion. With ODR configured, the app loads faster, and content is fetched as needed. Comparison: without ODR, a game can weigh 2 GB at install; with ODR, only 200 MB plus level loading.

Common App Thinning Configuration Mistakes

  • Resources added via File → Add Files instead of Asset Catalog → no slicing.
  • ODR tags assigned but NSBundleResourceRequest does not call endAccessingResources() → resource never released.
  • ODR testing not performed in offline mode → on real users, the download does not handle network errors.

How We Do It: Work Process

  1. Analytics: audit current Asset Catalog, identify resources outside catalog, estimate ODR content volume.
  2. Design: distribute resources into @1x/@2x/@3x slots, assign ODR tags, decide on Bitcode.
  3. Implementation: migrate to Asset Catalog, implement NSBundleResourceRequest in code, enable Bitcode if needed.
  4. Testing: build with App Thinning on All compatible device variants, check Size Report, test ODR in offline mode.
  5. Deployment: upload to App Store Connect, verify sizes in TestFlight.

What's Included

  • Audit of current resources and Asset Catalog
  • Migration of images into .xcassets (if required)
  • Slicing configuration and Size Report verification
  • On-Demand Resources setup with tags and code
  • Testing on real devices under various network conditions
  • Documentation of settings and recommendations

Timeline and Cost

Configuring App Thinning for an existing project takes 1 to 3 days. If resource migration from folders to Asset Catalog is needed, add 2–5 days depending on volume. Pricing is calculated individually. Our 7+ years of iOS development experience guarantees IPA size reduction of 30–50% without loss of functionality. To assess the potential of App Thinning for your project, get in touch with us. We'll conduct an audit and propose the optimal configuration. Order the setup and receive an optimized app.