You upload a build, Apple finishes processing it, and instead of reaching your testers it sits in the TestFlight tab with a yellow Missing Compliance status and a Manage link. Nothing is wrong with the binary. Apple is waiting for an answer to one question about encryption, and it asks again for every build until the app’s Info.plist answers it.
What the status means
Apple’s build status reference lists three export compliance statuses:
| Status | What Apple says it means |
|---|---|
| Missing Compliance | The build is missing export compliance documentation. Action is needed |
| Waiting for Export Compliance Review | Documentation has been submitted and is in review. No action needed |
| In Compliance Review | Documentation for export compliance is in review. No action needed |
The first one is the one you can fix in a minute. The other two only appear when the app uses encryption that needs documents, and they end when Apple has reviewed them.
Why it is asked at all: Apple’s encryption export regulations page explains that a build uploaded to TestFlight or the App Store goes to a server in the United States. If you distribute the app outside the U.S. or Canada, it is subject to U.S. export laws, and an app that uses encryption counts as an export of encryption software.
App Store Connect walks you through the questions for each build unless the app’s Info.plist answers them.
Decide your answer
The question is whether the app uses encryption beyond the exempt cases. According to Apple’s ITSAppUsesNonExemptEncryption reference:
- NO means the app, including any third-party libraries it links against, uses no encryption, or only encryption that is exempt from export compliance requirements.
- YES means the app uses non-exempt encryption.
Apple’s guidance is that encryption built into the operating system, such as HTTPS connections made through the system’s networking, is typically exempt. Proprietary encryption is not.
Whether your app’s use counts as exempt is your call to make under the export rules, not something a build tool can decide for you. If you’re not sure, read Apple’s export compliance overview before you answer. Apple also notes that an app using only exempt encryption may still need to file a year-end self-classification report with the U.S. government; its regulations page links to the details.
Fix one build in App Store Connect
Apple’s steps for a beta build, which need the Account Holder, Admin or App Manager role:
- In Apps, open the app and click the TestFlight tab.
- In the sidebar, under Builds, click the platform.
- Click the build that shows Missing Compliance (its icon or build string).
- Click Provide Export Compliance Information and answer the questions.
- If documentation isn’t required, click Save. If it is, click Go to App Encryption Page and upload your documents there.
This fixes that one build. The next upload asks again.
Fix every future build with Info.plist
Add the key to the app’s Info.plist and every build carries its own answer. App Store Connect then stops asking. For an app that uses no non-exempt encryption:
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
Where it goes depends on how the app is built:
-
Native Xcode project: the app target’s Info.plist (or the Info tab of the target’s settings).
-
React Native without Expo:
ios/<YourApp>/Info.plist. -
Flutter:
ios/Runner/Info.plist. -
Capacitor:
ios/App/App/Info.plist. -
Expo: set it in the app config instead of editing a generated file:
{ "expo": { "ios": { "config": { "usesNonExemptEncryption": false } } } }Expo’s app config reference says this sets
ITSAppUsesNonExemptEncryptionin the built app’s Info.plist to the value you give. It applies when Expo generates theiosfolder for you (npx expo prebuild, as in a typical cloud build command). If you commit your owniosfolder, edit its Info.plist instead.
For an Apple TV app, the same key goes in the tvOS target’s Info.plist.
If the app does use non-exempt encryption, set the value to <true/>. Apple then asks for documents. Once it has reviewed them, it gives you a code, which you add to the Info.plist as ITSEncryptionExportComplianceCode (per Apple’s key reference) so later builds don’t ask again.
Fix it with VibeView
When VibeView sends a build to TestFlight, export compliance is one of the steps it takes care of after Apple’s processing. It answers from the first of these that has an answer:
- Your Info.plist. When the app sets
ITSAppUsesNonExemptEncryption, Apple uses that value. The Submit dialog only notes Export compliance: answered by the app’s Info.plist. - The answer saved for the app. Answer once and it is saved for every later build of the app.
You can give that answer in any of these places:
- The Submit dialog. The first time for an app, it asks whether the app uses encryption beyond Apple’s exempt cases (HTTPS, standard OS crypto), with No and Yes. Answering there is optional.
- The command line.
vibeview submit --no-uses-encryption(or--uses-encryption) on any submission saves the answer for the app.vibeview testflight encryption --no-uses-encryptionsaves it without a submission, and without a flag shows the saved answer. Thesubmitflags need CLI 0.55.0 or later, andtestflight encryptionneeds 0.56.0 or later. - Builds → Stores → your app → Edit, to change a saved answer.
With no answer anywhere, distribution stops at Export compliance, and vibeview submit --wait-distribution exits 1 with the question. Then:
- The card’s buttons. The build’s Store submissions card asks the question with No and Yes. Answering there saves it for the app and continues that build at once.
- Edit or the CLI. Saving the answer in Builds → Stores → your app → Edit, or with
vibeview testflight encryption, continues every waiting build of the app at once. - App Store Connect. Answering on the build there works too. VibeView sees it at its next check, within 30 minutes.
When the answer is Yes
With Yes, Apple needs your export compliance documents before testers get the build. VibeView doesn’t upload documents for you. The card says Finish export compliance in App Store Connect: upload them there under TestFlight → the build → Manage, next to Missing Compliance. VibeView checks again every 30 minutes and continues once Apple has them, or choose Check again (vibeview submissions check <id>) to look at once.
In CI
A CI-only API token can give the export compliance answer, so a pipeline can pass --no-uses-encryption on vibeview submit. Setting the key in Info.plist is still the cleaner fix: the answer then travels with the code, and every tool that uploads the build sees it. GitHub Actions to TestFlight shows the whole pipeline.
The Export compliance section of the docs has the full rules.
Next: add ITSAppUsesNonExemptEncryption (or the Expo setting) to your project, then send builds from CI with GitHub Actions to TestFlight.
Frequently asked questions
Does Missing Compliance block internal testers too?
Yes. Until the build has an answer, no tester can install it, internal or external. Internal groups get the build as soon as Apple has processed it and export compliance is answered.
Does using HTTPS mean my app uses encryption?
It does use encryption, but Apple’s guidance is that encryption built into the operating system, such as HTTPS through the system’s networking, is typically exempt. Check the libraries you link as well: the answer covers them too.
Why does every build ask again?
Because the answer is per build unless the app answers it. Set ITSAppUsesNonExemptEncryption
in Info.plist (or ios.config.usesNonExemptEncryption in Expo), or save the answer for the app
in VibeView.
Which wins if Info.plist and my saved answer disagree?
Info.plist. Apple reads the value from the build, so a saved answer in VibeView is only used for builds that don’t set the key.
Can VibeView upload my export compliance documents?
No. Documents are uploaded in App Store Connect. VibeView continues the build’s distribution once Apple has them.
Apple’s and Expo’s pages referenced here were checked on 25 October 2026.
Related guides
In the documentation
Try it yourself
Open a live iOS simulator, Android emulator, Apple TV, Android TV or Roku in your browser.
Start free