Archiving a React Native iOS App for Release
Archiving creates a production-ready package for the App Store by bundling your JavaScript and disabling dev menus. This is the final step before submitting to TestFlight or for review.
WHY IT EXISTS Simulator and debug builds are for development convenience, often relying on a connection to your computer and including developer tools. To submit to the Apple App Store, you need a standalone, optimized, and secure version of your app that any user can download and run. Archiving is the official Xcode process to create this distributable package.
THE MENTAL MODEL Think of archiving as creating a master copy. During development, you work with rough drafts (debug builds) that have notes in the margins (the dev menu). Archiving is the process of typesetting, printing, and binding the final book that's ready for the bookstore shelf (the App Store). It's self-contained, optimized, and ready for public distribution.
HOW IT WORKS The process happens in Xcode. First, you must configure your project to use the "Release" build scheme. This is critical because the Release scheme automatically disables the developer menu and ensures your JavaScript bundle is included locally within the app. You set this via Product -> Scheme -> Edit Scheme. Next, you select "Any iOS Device (arm64)" as your build target, which is a generic target for creating a distributable binary, not a specific connected device. The main action is Product -> Archive. This compiles your native code and bundles the React Native JavaScript into a single package. After a successful archive, Xcode's Organizer window appears. From there, you click "Distribute App" to upload it to App Store Connect for TestFlight beta testing or App Store submission.
WHEN TO USE IT Use the archive process only when you are ready to distribute your app outside your development machine. This is the required workflow for submitting to TestFlight for internal or external beta testing, and for submitting your app to the App Store for review.
WHEN NOT TO USE IT Do not archive for regular development and debugging. For daily work, running the app on a simulator or a physical device in Debug mode is much faster. The Debug scheme uses a local server to provide the JavaScript bundle, allowing for fast refresh and hot reloading, which are disabled in a release archive. Archiving is a heavyweight process meant for final packaging, not iterative development.
ONE CANONICAL EXAMPLE A developer finishes a new feature. After local testing, they are ready for QA. They open the project's .xcworkspace file in Xcode, select Product -> Scheme -> Edit Scheme, and confirm the "Run" action uses the "Release" build configuration. They then select "Any iOS Device (arm64)" as the target and choose Product -> Archive. Once complete, they use the "Distribute App" button to upload the build to App Store Connect, making it available to their QA team via TestFlight.
Read the original → reactnative.dev
Get five bites like this every day.
Tezvyn delivers a daily feed of 60-second tech bites with quizzes to lock in what you learn.