Setting Up App Thinning (Slicing, Bitcode, On-Demand Resources) for iOS

NOVASOLUTIONS.TECHNOLOGY is engaged in the development, support and maintenance of iOS, Android, PWA mobile applications. We have extensive experience and expertise in publishing mobile applications in popular markets like Google Play, App Store, Amazon, AppGallery and others.
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 1 servicesAll 1735 services
Setting Up App Thinning (Slicing, Bitcode, On-Demand Resources) for iOS
Medium
from 1 business day to 3 business days
FAQ
Our competencies:
Development stages
Latest works
  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1052
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    445

Setting Up App Thinning (Slicing, Bitcode, On-Demand Resources) for iOS

Application weighs 180 MB when downloading on iPhone 13 mini. On iPad Pro — same binary file with same resources. Though iPad doesn't need @2x assets for 390pt screen — it gets them together with everything. App Thinning solves exactly this: App Store itself builds app variant for specific device and delivers only what's needed.

Three Components of App Thinning

Slicing

App Store creates separate IPA variants for each device/OS combination. iPhone 8 gets only @2x resources and ARMv8 slice of binary. iPad Pro — @3x resources and ARM64e.

Requirement for developer: Asset Catalog. Resources outside .xcassets (lying in folder) don't participate in slicing — they go into all variants. Check: all images must be in Asset Catalog with correct size slots (@1x/@2x/@3x) and trait variations (iPhone/iPad/Mac).

Check result: Xcode → Product → Archive → Distribute → Ad Hoc/Development → Export → App Thinning: All compatible device variants. After export look at App Thinning Size Report.txt — table with sizes for each device.

On-Demand Resources (ODR)

Content not always needed — game levels, tutorials, rarely used filters — marked with tags and loaded on demand. Stored on Apple servers, not in IPA itself.

Setup: in Xcode Target → Build Phases → Copy Bundle Resources → for resource in Asset Catalog set On Demand Resource Tags. In code:

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
        }
    }
}

Limits: 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, this fundamentally changes install file size.

Bitcode

Bitcode — LLVM intermediate representation, which Apple can recompile for new architectures without developer republishing. For iOS apps with Xcode 14+ Bitcode is not needed and not supported — Apple removed requirement. For watchOS and tvOS — before Xcode 14 was mandatory.

If application builds on old Xcode (< 14) or supports watchOS/tvOS extension — Bitcode enabled in Build Settings → ENABLE_BITCODE = YES. All third-party libraries and .framework files must contain Bitcode. If even one dependency without Bitcode — entire application loses Bitcode capability.

Typical Configuration Mistakes

  • Resources added through File → Add Files instead of Asset Catalog — don't participate in slicing
  • ODR-tags assigned to files, but NSBundleResourceRequest doesn't call endAccessingResources() — resource not released from local storage
  • ODR testing not done in offline-mode — users discover content loading doesn't handle network absence error

Timeframe

Setting up App Thinning for ready project — 1–3 days. If resources not in Asset Catalog — additionally 2–5 days for migration depending on volume.