Skip to content

Clear TestFlight export compliance and wait for processing - #75

Merged
arun279 merged 2 commits into
feat/expo-nativefrom
fix/testflight-compliance
Sep 27, 2026
Merged

arun279 merged 2 commits into
feat/expo-nativefrom
fix/testflight-compliance

Conversation

@arun279

@arun279 arun279 commented Sep 27, 2026 •

Copy link
Copy Markdown
Owner

Defect

Two iOS tester builds, 2.0.0 (1801) and 2.0.0 (2001), uploaded to App Store Connect and the release runs went green, but neither reached TestFlight internal testers. App Store Connect held both at Missing Compliance.

Evidence

  • The Capacitor app this one replaced declared ITSAppUsesNonExemptEncryption as false in ios/App/App/Info.plist (last present at 2383fbd^). packages/native/app.config.ts declares nothing equivalent, so the prebuilt Info.plist has no answer and App Store Connect waits for one.
  • The ios beta lane in fastlane/Fastfile called upload_to_testflight with skip_waiting_for_build_processing: true. With no changelog, pilot returns right after the upload, before processing, export compliance or distribution. The run could only ever report that the upload finished.

Change

  • app.config.ts sets ios.config.usesNonExemptEncryption: false for every build. Expo's default withUsesNonExemptEncryption plugin writes ITSAppUsesNonExemptEncryption into the generated Info.plist from that field, which is typed and sits outside ios.infoPlist. The mock-host ATS dictionary is left exactly as it was, with no merging needed. Cue encrypts only through the system's HTTPS (URLSession) and Keychain, and Apple treats that as exempt.
  • packages/native/__tests__/app-config.test.ts runs Expo's own setUsesNonExemptEncryption over the normal and the mock-host configs and requires the key to be false in both. Deleting the config line fails it.
  • The ios beta lane now uses skip_waiting_for_build_processing: false and keeps distribute_external: false. The run waits until App Store Connect finishes processing and fails if pilot hits an error. It then runs pilot's distribution step, which sets export compliance itself if the build still has none, so a build can no longer sit unnoticed at Missing Compliance behind a green run.
  • test/ci/release-paths.test.ts requires the lane to wait for processing and to stay internal only. Setting the flag back to true fails it.
  • The Android lane is untouched.

Job timeout

The ios job in mobile-release.yml sets no timeout-minutes on this branch, so it gets GitHub's 360 minute default. In run 36223052262 the job started at 06:13:41 UTC, the fastlane step started at 06:16:27, and the upload finished at 06:30:06. Build and upload took about 14 minutes, so the whole job ran about 17. Apple gives no typical processing time. Its guidance is that a build still Processing after 24 hours may have a problem (https://developer.apple.com/help/app-store-connect/manage-builds/view-builds-and-metadata). The 360 minute default leaves more than five hours for processing, and a build still unprocessed after that fails the run, which is the signal wanted. No timeout change is needed.

Sources

@github-actions

Copy link
Copy Markdown

Pull request footprint

measurement base to head
Product code lines in core/src, native/src, native/app, and native/modules +0
Test lines in test, tests, and e2e paths +11
Product comment lines identified by a comment prefix +0

User-delivered artifact sizes

measurement base head delta
Expo iOS JavaScript bundle, raw file 5.36 MB 5.36 MB 0 B
Expo Android JavaScript bundle, raw file 5.40 MB 5.40 MB 0 B
Firebase tester APK, arm64-v8a and all densities 41.96 MB 40.93 MB -1023.9 kB
Play download estimate, XXXHDPI arm64-v8a English Android 15 20.15 MB 19.74 MB -402.5 kB

@arun279
arun279 merged commit 0c05e8c into feat/expo-native Sep 27, 2026
35 of 37 checks passed
@arun279
arun279 deleted the fix/testflight-compliance branch September 27, 2026 04:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant