Skip to content

Missing Compliance: the export encryption question, answered once

Your build finished processing, you went to submit, and App Store Connect shows this next to it:

Missing Compliance — Manage

The build can't be attached to a version or submitted until you answer. Every new upload asks again. Here's what the question is, how to answer it, and how to stop being asked.

What the question is

This isn't an Apple policy — it's US export law. Software that contains encryption is a regulated export, and Apple distributes your binary worldwide, so Apple has to know which category yours falls into before it ships.

The answer lives on the build as usesNonExemptEncryption. Until it's set, the build sits in Missing Compliance and cannot be submitted.

Answering it

The question is whether your app uses non-exempt encryption. Most apps don't, but "most" is not "all", and the distinction matters.

You are exempt — answer No — if the only encryption in your app is:

  • HTTPS / TLS for network calls
  • Apple's own frameworks: Keychain, CryptoKit, Data Protection, URLSession
  • Encryption already built into iOS that you're merely calling

That covers the large majority of apps, including anything that just talks to an API over HTTPS.

You are not exempt — answer Yes — if your app:

  • Implements its own proprietary encryption algorithm
  • Ships a third-party crypto library beyond standard TLS
  • Provides encryption as a feature to the user (an encrypted messenger, a password vault with its own crypto, a VPN client)

Answering Yes isn't a dead end, but it carries real obligations: depending on the case you may need a CCATS classification from the US Bureau of Industry and Security, an ERN, or an annual self-classification report. If you land here, read Apple's export compliance overview and get it right — this is a legal declaration, not a form field.

WARNING

Don't answer No because it's the faster path. You are certifying something to a US regulator. If your app ships its own crypto, answer honestly.

Stop being asked on every build

If you answer through the App Store Connect UI, the question returns on the next upload, and the one after. Two ways to make it permanent.

Add the key to your target's Info.plist:

xml
<key>ITSAppUsesNonExemptEncryption</key>
<false/>

Every build carrying this key skips the question entirely — it uploads and goes straight to ready. Set <true/> instead if you're in the non-exempt case above.

This is the fix worth doing once. It costs one line and removes a recurring 30-second interruption from every release you'll ever ship.

File a reusable declaration

In App Store Connect, an App Encryption Declaration can be created once and reused across builds. It works, but it's per-app and lives server-side — the Info.plist key travels with your project and works for every app you build from it.

You can do both. The Info.plist key wins.

If you're already stuck

For a build sitting in Missing Compliance right now:

  1. App Store Connect → your app → TestFlight or the version's Build section
  2. Click Manage next to the build
  3. Answer the encryption question
  4. The build becomes selectable

Then add the Info.plist key so the next build doesn't repeat it.

Catching it before you upload

Two separate things can bite you here, and they're checked in different places:

  • The local side — is ITSAppUsesNonExemptEncryption in your Info.plist? If not, this upload will ask again.
  • The server side — is usesNonExemptEncryption set on the build that's already up? If it's null, the build is blocked.

AuditStore checks both: encryption-key reads your Info.plist locally, and export-compliance reads the live build state from the App Store Connect API and reports a null answer as Blocking.

AuditStore is a macOS app by NativLab. Runs entirely on your Mac — your API private key never leaves your device.