---
title: "Framework size"
canonical_url: "https://www.nutrient.io/guides/ios/faq/framework-size/"
md_url: "https://www.nutrient.io/guides/ios/faq/framework-size.md"
last_updated: "2026-05-25T12:14:42.920Z"
description: "Discover why `PSPDFKit.xcframework` appears large and learn how app thinning optimizes its size for user devices, ensuring a lightweight SDK experience."
---

You might be wondering why `PSPDFKit.xcframework` is more than a few hundred MB in size. This can be irritating at first, especially considering that Apple only allows downloading apps over cellular data if they’re smaller than 100&nbsp;MB. However, this isn’t the size your users will get.

The Nutrient iOS SDK covers most of the PDF specification, which contains thousands of pages and is therefore quite complex. Nutrient includes a complete PDF renderer, cryptography features, and many UI components. This results in a lot of code and a sizable binary, although there are certain factors that make it appear larger than it actually is. We’re working hard to ensure the framework size stays as small as possible.

## Architectures

The SDK binary includes slices for x86_64 and 64-bit ARM for iOS devices, Simulator, and Mac Catalyst. Each slice is a full and complete copy of the SDK, and only one slice is required for your users.

## App thinning

Apple also actively works on reducing app binary size and added [app thinning](https://developer.apple.com/library/tvos/documentation/IDEs/Conceptual/AppDistributionGuide/AppThinning/AppThinning.html) in iOS&nbsp;9. This creates optimized versions of your app, and the user only downloads the architecture required for the current device, resulting in a total SDK footprint of about 20–30&nbsp;MB.

If you click on App Store File Sizes in the Compressed File Size column, iTunes Connect shows size estimations for each device in the detail view of your uploaded binary.

## Adobe character maps

The PDF specification requires us to embed a sizeable list of character maps that add a few megabytes per architecture to ensure that text in PDF form can be converted to Unicode to make search and text selection work as expected. This is required for many documents, and it is especially important for decoding documents with [CJK characters](https://en.wikipedia.org/wiki/CJK_characters). We already optimize these character maps into a more efficient binary format to save both CPU time and size compared to the raw text version. ([See this repository](https://github.com/adobe-type-tools/cmap-resources) to get an idea of how a subset of character maps looks unprocessed.)

## Rendering PDFs

Rendering PDF documents is a complex task, so [we have a separate guide explaining some of the challenges](https://www.nutrient.io/../../troubleshooting/complexities-of-rendering-pdfs).

## Resources

Nutrient needs various images, [localization files](https://www.nutrient.io/../../features/localization), and other resources. The images are highly optimized to take up as little space as possible.

## dSYM

We also ship the `.dSYM` files as part of our distribution. These folders are optional, but they help with crash symbolication. They're solely intended for your company and Apple or a third-party crash reporting framework such as [Crashlytics](https://crashlytics.com). These files are quite big, and if you follow our integration guide, they won't be part of your application. If you do Enterprise installs, you don’t have the App Store thinning/stripping logic that would strip out unneeded parts — in that case, manually deleting `dSYM` files will save some space. There’s also no damage if you leave it in — its removal is purely a size optimization.

## Static framework

In versions of Nutrient iOS SDK prior to 5, we primarily offered a static library that looked like a framework. This was the only way to distribute binaries at the time. With iOS 8, Apple added support for dynamic frameworks, and in Nutrient iOS SDK 4, we offered both variants. Dynamic SDKs are slightly more complex in their setup (mainly due to a bug/design flaw in Xcode that does not automatically strip Simulator slices). However, they do offer significant advantages: Link time is reduced since the linker doesn’t have to merge your application binary with our SDK binary; stack trace symbolification works better since the `.dSYM` does not change for Nutrient itself; and [two-level namespacing](https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/CreationGuidelines.html) ensures there are no symbol conflicts with your code. The main reason we offered both variants in Nutrient iOS SDK 4 was iOS 7 compatibility. With version 5, we dropped that, and with it, the static SDK version.

## Delta updates

Since iOS&nbsp;7, Apple has been using [delta updates on the App Store](https://developer.apple.com/library/ios/qa/qa1779/_index.html) so that updates don’t download files in the application bundle that have not changed. With Nutrient iOS SDK 5, we switched to a dynamic framework, which means our framework will not be downloaded again if your app update does not update Nutrient itself.

## GitHub

GitHub has a hard limit of 100&nbsp;MB per file, which prevents the framework from being checked in. We [offer a few different solutions](https://www.nutrient.io/sdk/ios/getting-started.md) if you’re running into this issue.
---

## Related pages

- [Advanced Carthage integration](/guides/ios/miscellaneous/advanced-carthage-integration.md)
- [Advanced CocoaPods integration](/guides/ios/miscellaneous/advanced-cocoapods-integration.md)
- [Airdrop](/guides/ios/features/airdrop.md)
- [App Transport Security](/guides/ios/pspdfkit-instant/app-transport-security.md)
- [Bitcode](/guides/ios/faq/bitcode.md)
- [Customizing The Page Number](/guides/ios/customizing-pdf-pages/customizing-the-page-number.md)
- [Carthage integration](/guides/ios/best-practices/carthage-integration.md)
- [Nightly Builds](/guides/ios/best-practices/nightly-builds.md)
- [About Memory Usage](/guides/ios/memory-and-storage/about-memory-usage.md)
- [Customizing the log level on iOS](/guides/ios/features/logging.md)
- [Optimize PDF documents for mobile rendering on iOS](/guides/ios/miscellaneous/optimize-pdf-documents-for-mobile-rendering.md)
- [Modifying permissions in your iOS app](/guides/ios/getting-started/permissions.md)
- [Powered By Nutrient](/guides/ios/miscellaneous/powered-by-nutrient.md)
- [iOS PDF SDK security](/guides/ios/faq/sdk-security.md)
- [Reduce App Size](/guides/ios/best-practices/reduce-app-size.md)
- [Saving Data Externally](/guides/ios/memory-and-storage/saving-data-externally.md)
- [Strategies For Multiple Bundle Ids](/guides/ios/faq/strategies-for-multiple-bundle-ids.md)
- [Third Party Compatibility](/guides/ios/miscellaneous/third-party-compatibility.md)
- [Using Automatic Saving Safely](/guides/ios/best-practices/using-automatic-saving-safely.md)
- [Transferring File Edits To A Server](/guides/ios/best-practices/transferring-file-edits-to-a-server.md)
- [Youtube Links](/guides/ios/miscellaneous/youtube-links.md)
- [Using Document Efficiently](/guides/ios/getting-started/using-document-efficiently.md)
- [Version Numbering](/guides/ios/best-practices/version-numbering.md)
- [Manage your iOS status bar with view controllers](/guides/ios/faq/view-controller-based-status-bar-appearance.md)

