Bitcode

Bitcode is an intermediate representation of a compiled binary. Including bitcode will allow Apple to reoptimize your app binary in the future without the need for you to submit a new version of your app to the store. PSPDFKit for iOS has been built with bitcode since version 5. Bitcode is also one of the largest factors in the size of our SDK.

Bitcode is just another form of LLVM IR, which is architecture dependent. PSPDFKit ships with bitcode slices for arm64.

Bitcode is relevant for crash symbolication as well — be sure to read our articles about crash report symbolication and third-party services.

Checking for Bitcode

If you inspect the XCFramework’s contents, you’ll see several directories that contain framework builds for different architectures. The presence of a BCSymbolMaps directory inside the framework for a particular architecture indicates that that architecture supports bitcode. For example, the presence of BCSymbolMaps at PSPDFKit.xcframework/ios-arm64/PSPDFKit.framework/BCSymbolMaps signifies that the arm64 architecture of PSPDFKit supports bitcode.

Stripping Bitcode

Xcode 7.2 added a new tool called bitcode_strip to remove bitcode chunks from binaries:

1
$ xcrun bitcode_strip -r PSPDFKit -o PSPDFKit

Removing bitcode will disallow Apple from running binary optimizations on your behalf. You can verify that the removal worked by checking the file size — which should be significantly smaller than the original file — or by using otool as shown above.

BCSymbolMaps

A BCSymbolMap is a lot like a dSYM for bitcode. Xcode builds it both as part of creating the app binary and for every dynamic framework. It’s required for resymbolicating function/method names to understand crashers. Symbol maps are per architecture, so there are currently two (armv7 and arm64) in PSPDFKit. You can learn more in the Framework Size guide.

Learn More