Articles · GuidesUpdated October 2026

App thinning ships a smaller app than the one you uploaded, and two different numbers get capped.

App thinning is Apple's name for the work the App Store and the operating system do after you upload a build: they create a variant of your app for each device and operating system version, holding only the code and resources that variant needs. You keep uploading one full build. Two separate figures then get measured, and they are the ones people confuse. The installed app is capped at 4 GB on iOS and iPadOS. The compressed download gets a warning at 200 MB. Both figures come from App Store Connect Help, read on 21 October 2026. Most people meet this while publishing to the App Store.

What follows is what Apple documents about thinning, the full table of published caps by platform, which figure applies to the download and which to the installed app, and where in App Store Connect each one is printed. Then the section of Apple's own thinning page that is now wrong, and the reason your final size cannot be known in advance.

Start here

The short version

4 GB installed, and a warning at 200 MB over the air.

Apple publishes two hard caps for an iOS or iPadOS app whose minimum deployment target is iOS 9.0 or later. The maximum uncompressed app size is 4 GB. The maximum executable file size is 500 MB, which Apple footnotes as the total of all __TEXT sections in the binary. Uncompressed means installed, so the 4 GB figure is about disk space on the phone and the 500 MB figure is about your compiled code rather than your assets.

The 200 MB number that everybody repeats is a different measurement, and Apple does publish it. App Store Connect Help calls it the over the air download limit, and applies it to the compressed download of a single device variant. Go over it and you get a yellow warning icon in App Store Connect and an email from Apple. Nothing is rejected. Your customer is the one who has to find Wi-Fi.

What does Apple document about app thinning?

Apple's Xcode Help page, titled What is app thinning? for iOS, tvOS and watchOS, read on 21 October 2026, defines it as the App Store and the operating system optimizing installation by tailoring app delivery to the capabilities of the user's particular device and operating system versions, with minimal footprint. The page splits it into three parts: slicing, bitcode and on-demand resources. One of those three is no longer true, and there is a section below about that.

Slicing is the part that changes what a customer downloads. Apple describes it as creating and delivering variants of the app bundle for different target devices and operating system versions, where a variant contains only the executable architecture and resources needed for that target. You continue to develop and upload full versions of your app, and the App Store creates and delivers the variants. Apple is specific about how you help it: use asset catalogs, so the App Store can select the images, GPU resources and other data appropriate for each variant. Assets that sit loose in the bundle cannot be sliced away.

There is a floor under slicing. Apple notes that sliced apps are supported on devices running iOS and tvOS 9.0 and later, and that otherwise the App Store delivers universal variants. Universal variants also go out through Mobile Device Management, through apps purchased in volume via Apple School Manager or Apple Business Manager, and to anyone downloading through iTunes 12.6 or earlier. That is why App Store Connect shows you a row called Universal next to the per device rows. It is the fallback build, carrying everything.

Two practical points follow. App Store Connect Help states that after you upload a build it goes through app thinning, a process that creates variants of your app for different devices and operating system versions, so this is not something you switch on for store releases. Apple's advanced optimization article is blunter: apps available on the App Store, and apps you distribute to testers using TestFlight, already leverage app thinning. You only have to enable it by hand in two cases, an in-house enterprise app or builds handed to testers outside TestFlight, by exporting for all compatible device variants.

App Store Connect Help, view builds and metadata, read 21 October 2026

Work out which one

Which size number are you looking at?

Several different numbers get called the app size. Pick the one in front of you and it says which measurement Apple means and where the figure comes from.

A yellow warning icon on my build

A device variant went over the 200 MB over the air download limit. That is the compressed download, not the installed app. Apple sends you an email with the same information.

Read it in: App Store Connect, Builds table and App File Sizes table

Figures read from Apple on 21 October 2026. Check the page again before you plan a release around one.

What are the current published size limits for an iOS app?

They are in one table, on the App Store Connect Help page called Maximum build file sizes, read on 21 October 2026. Apple asks you to verify that your app, and each Mach-O executable file inside it, does not exceed the maximum file size limits on the supported operating systems. For an iOS or iPadOS app with a minimum deployment target of iOS 9.0 or later, that is 4 GB uncompressed and 500 MB for the executable. The 500 MB carries a footnote: it is for the total of all __TEXT sections in the binary.

Older deployment targets get smaller executable caps, and they are measured differently. An app targeting iOS 7.X through iOS 8.X is held to 60 MB, footnoted as the __TEXT sections in each architecture slice rather than the whole binary. Anything earlier than iOS 7.0 gets 80 MB. Nobody ships those targets now, but the footnotes explain why two numbers that look comparable are not. tvOS 9.0 and later and visionOS 1.0 and later use the same pair as modern iOS, 4 GB and 500 MB. watchOS is capped at 75 MB and macOS at 200 GB, and Apple publishes no separate executable figure for either.

This is the rare case where the figures the internet repeats and the figures on the vendor page agree. The 4 GB and 500 MB caps are the current published ones, worded exactly that way, with the footnotes intact. The place a reader gets caught is not the number, it is which thing the number is measuring.

App Clips are the exception worth knowing, because the cap is an order of magnitude tighter and it is applied after thinning. Apple asks you to verify that the uncompressed main bundle of any App Clip variant, after app thinning, stays under the limit for its minimum deployment target. That is 100 MB with a minimum target of iOS 17 and later, and the 100 MB comes with three conditions: digital invocations only, such as your website or Spotlight search, and not App Clip Codes, QR codes or NFC tags; use in situations where a reliable internet connection is likely; and no support for iOS versions before iOS 17. Miss one of those and you are back to 15 MB for iOS 16 and later, or 10 MB before it.

One escape hatch is on the same page. For iOS, iPadOS, macOS, tvOS and visionOS apps, Apple says you can use Background Assets to host larger assets that are managed separately from your build. watchOS is absent from that list. If you use Apple-hosted Background Assets, Apple also changes what your product page prints: it shows an Up to size that includes any non-localized essential asset packs plus the localized essential packs for the single language with the largest total size.

App Store Connect Help, maximum build file sizes, read 21 October 2026

Every cap Apple publishes, by platform

PlatformMinimum deployment targetMax uncompressed appMax executable fileIn Apple's Background Assets list
iOS and iPadOSiOS 9.0 and later4 GB500 MBYes
iOS and iPadOSiOS 7.X through iOS 8.X4 GB60 MB, per architecture sliceYes
iOS and iPadOSEarlier than iOS 7.04 GB80 MBYes
tvOStvOS 9.0 and later4 GB500 MBYes
visionOSvisionOS 1.0 and later4 GB500 MBYes
watchOSAll watchOS versions75 MBNo separate figure publishedNo
macOSAll macOS versions200 GBNo separate figure publishedYes

Read from App Store Connect Help on 21 October 2026. The page itself carries no last-updated date, only a 2026 copyright line, so treat the reading date as the only date you have.

Which limit applies to the download, and which to the installed app?

The 4 GB cap is on the uncompressed app, which is the installed one. The 200 MB figure is on the compressed download. Apple defines both words in App Store Connect Help, on the page about viewing builds and metadata. The install size is the amount of disk space the app consumes on the customer's device. The download size is the compressed size of the app that is downloaded over the air, using cellular bandwidth or Wi-Fi. Apple's Reducing your app's size article states the same mapping from the other end: in the app size report, the uncompressed size is equivalent to the size of the installed app on the device, and the compressed size is the download size of your app.

The 200 MB is where the consequence sits. App Store Connect Help says that if any of the device variant sizes exceed the 200 MB over the air download limit, a yellow warning icon appears next to the build string in the Builds table and next to the variant size in the App File Sizes table, and that Apple also sends you an email with the same information. Nothing is blocked and nothing is rejected. What changes is the customer's experience: Apple's Reducing your app's size article says that when an app exceeds the limit, users need to connect to a Wi-Fi network to install it. The behaviour on the customer's phone is its own topic, covered in the ios app size limit cellular guide.

To read your own figures: open Apps and select the app, click the TestFlight tab to view all builds, select the platform in the sidebar, then select the app icon or build string in the expanded table under the version number in the Build column. Click the Build Metadata tab and, under General Information, click App File Sizes. A table appears with the different variant sizes, one row per device type plus the Universal row. The Build Metadata page itself shows the compressed file size, essential content size and additional in-app content size. Every figure there belongs to one build, which is why a tidy version vs build number habit saves you from comparing the wrong two rows next month.

The install size also leaves App Store Connect and lands on your product page, in the Information section. Apple adds a detail that explains why two people see different numbers for the same app: the size shown on your product page varies depending on the device viewing the page. On macOS the page shows the universal installation size. On every other platform it shows the installation size for that specific device model. So the figure a customer reads is their own variant, not your worst one.

One warning before you plan a release around a target size. Apple says that when your app is approved for distribution it is encrypted with Digital Rights Management and recompressed, that the file size may therefore be larger than the binary you uploaded, and that the exact final size for your app cannot be determined in advance. A variant that lands just under the limit has not safely cleared it. Leave headroom.

App Store Connect Help, view builds and metadata, read 21 October 2026

How do you get a variant back under the line?

Measure first, and not from the file you think. Apple is explicit that none of the binaries you create for debugging, or upload to the App Store from inside Xcode, are suitable for measuring your app's size. That rules out the APP bundle, the XCARCHIVE and the IPA you upload, because all three carry files customers never download, such as dSYM files for crash reporting. The supported measurement during development is an app size report generated on your Mac: archive the app, export it as an Ad Hoc, Development or Enterprise build, choose all compatible device variants for app thinning in the distribution options, and sign and export. The output folder contains a file named App Thinning Size Report.txt with the compressed and uncompressed size of every variant, plus a universal IPA for older devices and a thinned IPA per variant.

That report is an estimate. Apple says App Store Connect gives the most accurate size information once the app is on the store or in TestFlight, and that it warns you if a variant exceeds the limit for downloading over a mobile internet connection. If you want the report in continuous integration instead of by hand, Apple documents an xcodebuild export with the thinning key set to thin for all variants in the export options property list.

Then the levers, in Apple's own order of effort. Check that your Release configuration still uses the default optimization level, Fastest, Smallest [-Os], because a changed project setting is a common cause of a build that is bigger than expected. Unzip a thinned IPA and look for files that should not be shipping, such as a README added to a target. Move assets into asset catalogs and tag each one with the devices it is for, which is what lets thinning drop it. Keep data in asset files rather than in source code, because that shrinks the binary and lets App Store Connect compress the app more efficiently. After that, formats: Apple names HEIF for images and HEVC for video, and points out that an 8-bit PNG can be a quarter of the size of a 32-bit one.

Two structural moves take content out of the download entirely. On-demand resources group infrequently used files into asset packs that Apple hosts, and Apple states those packs do not become part of your app's initial download or of app updates. Background Assets is the route the size limits page itself points at for larger assets managed separately from the build. Either way the content stays in the app, it just stops arriving in the first download. Note one condition: Apple says that if you distribute outside the App Store, you host on-demand resources yourself.

Updates are a separate size problem with a separate fix. Instead of re-downloading the whole app, the App Store compares prior versions against the new one and builds an update package holding only changed content, comparing everything in the application bundle including the executable, storyboards, nibs and localizations. So avoid touching files you did not mean to change, and keep volatile content in different files from stable content. Apple also warns not to rely on creation and modification dates, because the system updates files only when their content changes, not when metadata does. None of this work costs money, which makes it the cheapest line on any honest reckoning of the cost to publish an app.

App Store Connect Help, maximum build file sizes, read 21 October 2026

Apple's own thinning page is out of date on bitcode

Apple's Xcode Help page on app thinning, read on 21 October 2026, still presents bitcode as one of the three parts of thinning. Its bitcode section says that apps you upload containing bitcode will be compiled and linked on the App Store, that including bitcode lets Apple re-optimize your binary later without a new submission, that bitcode is the default but optional for iOS apps, and that it is required for watchOS and tvOS apps.

None of that describes the App Store now. Apple's own Xcode 14 release notes, under Deprecations, say that starting with Xcode 14 bitcode is no longer required for watchOS and tvOS applications and the App Store no longer accepts bitcode submissions from Xcode 14. The same note adds that Xcode no longer builds bitcode by default, warns if a project explicitly enables it, and that IPAs containing bitcode have the bitcode stripped before being submitted. Debug symbols for bitcode submissions are only available for submissions that predate Xcode 14.

So read that page for slicing and on-demand resources, which are still how thinning works, and skip the middle third. This is the only contradiction worth flagging on this topic, and it is a useful one, because every roundup that lists the three pillars of app thinning copied them from a page Apple has not updated. The two caps, 4 GB and 500 MB, and the 200 MB download warning all survive the check unchanged.

Where this lands if a builder generated your app

Thinning is not something you adopt, so a generated app gets it for free. Apple says App Store builds and TestFlight builds already leverage app thinning, and that a build goes through thinning after upload. The caps still apply to you, though, and so does the warning email, because Apple requires the content owner to submit the app. Review guideline 4.2.6 is the reason a builder cannot press submit on your behalf.

Newly is an AI app builder. You describe an app in plain English and it writes a real React Native and Expo project that you own. It uploads iOS builds to TestFlight, publishes to Google Play internal testing, and builds a standalone Android APK. It is priced from $25 a month, with no free plan. Two parts of that matter here. The TestFlight upload means your first real size reading arrives in the App File Sizes table without you configuring thinning, and Apple's note about TestFlight builds carrying extra data explains why that first number looks high. The Android output is a separate measurement system entirely, because app thinning is an Apple mechanism and none of the figures above govern an APK.

Two-way GitHub sync is what makes the levers reachable. Every item Apple names lives in the project: the Release optimization level, the asset catalog and its per device tags, the image and video formats, and which files change between versions. You can open the repository, fix those, and push. The honest limit is the one Apple states itself. No tool can tell you your final store size, because the App Store encrypts and recompresses the binary after approval and Apple says the exact figure cannot be determined in advance.

Questions people ask about app thinning and size limits

It is the work the App Store and the operating system do to tailor app delivery to the device and operating system version a customer is actually on. Apple's Xcode Help page on app thinning breaks it into slicing, bitcode and on-demand resources. Slicing is the part that changes your download size: the App Store creates variants of your bundle, each holding only the executable architecture and the resources that one device and operating system version needs. You keep uploading one full build and Apple does the splitting. App Store Connect Help adds that a build goes through app thinning after you upload it.

Upload one build, then read the variant table

Get a build into TestFlight, open App File Sizes, and find your largest variant. That one number tells you whether you have a size problem or a story you repeated from a stale page. Most apps do not have a size problem.

Start building