[Expo 44] [Expo FaceDetector] App built by EAS build can't be distributed through App Store
See original GitHub issueSummary
An app using expo-face-detector
built by EAS build can’t be distributed through App Store (TestFlight). I tested following builds:
- 1.0.1 - Blank project.
- 1.0.2 - Add expo-camera only.
- 1.0.3 - Add expo-camera and expo-face-detector.
- 1.0.4 - Same as 1.0.3 but built by classic build
expo build:ios
The version 1.0.3
(including expo-face-detector / built by EAS build) has something problem. I was able to upload the archive .ipa
through Transporter.app (so it must be verified and validated fine). But the App Store Connect status screen shows “In processing” forever (see screen shot).

I also contacted to the support center, but they couldn’t figure out the root cause, but told me that they have confirmed that there is a problem with the delivery of the build. Also, I was able to work around the problem by using the classic build, so I did not pursue it further.
I know the classic build service will be ended. However, I cannot distribute the app without continuing to use the classic build. Please let me know if you need any other information.
Managed or bare workflow? If you have ios/
or android/
directories in your project, the answer is bare!
managed
What platform(s) does this occur on?
iOS
SDK Version (managed workflow only)
44.0.0
Environment
$ npx expo-env-info
Need to install the following packages:
expo-env-info
Ok to proceed? (y)
expo-env-info 1.0.2 environment info:
System:
OS: macOS 11.5.2
Shell: 5.8 - /bin/zsh
Binaries:
Node: 16.13.1 - /usr/local/bin/node
Yarn: 1.22.10 - /usr/local/bin/yarn
npm: 8.5.3 - /usr/local/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
SDKs:
iOS SDK:
Platforms: iOS 14.5, DriverKit 20.4, macOS 11.3, tvOS 14.5, watchOS 7.4
Android SDK:
API Levels: 30
Build Tools: 30.0.3
System Images: android-25 | Google APIs ARM 64 v8a
IDEs:
Xcode: 12.5.1/12E507 - /usr/bin/xcodebuild
npmPackages:
expo: ~44.0.0 => 44.0.6
react: 17.0.1 => 17.0.1
react-dom: 17.0.1 => 17.0.1
react-native: 0.64.3 => 0.64.3
react-native-web: 0.17.1 => 0.17.1
npmGlobalPackages:
eas-cli: 0.48.2
expo-cli: 5.3.0
Expo Workflow: managed
Reproducible demo
Create a new project.
$ expo -V
5.3.0
$ expo init expo-face-detector-playground
❯ blank (TypeScript) same as blank but with TypeScript configuration
Install dependencies.
expo install expo-camera expo-face-detector
Edit App.tsx
. This app simply shows front camera preview and track faces with green bounding box.
import { useState, useEffect } from "react";
import { StyleSheet, View } from "react-native";
import { Camera, FaceDetectionResult } from "expo-camera";
import * as FaceDetector from "expo-face-detector";
export default function App() {
const [faceDetected, setFaceDetected] = useState<FaceDetectionResult | null>(
null
);
useEffect(() => {
(async () => {
const { status } = await Camera.requestCameraPermissionsAsync();
if (status !== "granted") {
alert("No camera access");
}
})();
}, []);
const handleFacesDetected = (result: FaceDetectionResult) => {
setFaceDetected(result);
};
return (
<View style={styles.container}>
<Camera
style={styles.camera}
type={Camera.Constants.Type.front}
onFacesDetected={handleFacesDetected}
faceDetectorSettings={{
mode: FaceDetector.FaceDetectorMode.fast,
detectLandmarks: FaceDetector.FaceDetectorLandmarks.none,
runClassifications: FaceDetector.FaceDetectorClassifications.none,
minDetectionInterval: 100,
tracking: true,
}}
>
{faceDetected?.faces.map((face, i) => (
<View
key={i}
style={{
position: "absolute",
borderWidth: 2,
borderColor: "green",
width: face.bounds.size.width,
height: face.bounds.size.height,
top: face.bounds.origin.y,
left: face.bounds.origin.x,
}}
/>
))}
</Camera>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
},
camera: {
flex: 1,
},
});
EAS build configuration eas.json
{
"cli": {
"version": ">= 0.48.2"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal"
},
"production": {}
}
}
Build an archive and upload it through Transporter.app.
$ eas build --platform ios --profile production
Issue Analytics
- State:
- Created a year ago
- Comments:7 (3 by maintainers)
I’ve successfully distributed the new version by setting
"bitcode": "Debug"
. Many thanks for your help!Hi @ishikawa! Thanks for writing in and providing the necessary reproduction information! I can confirm this is indeed an issue, but only when bitcode is enabled. It seems to be an issue on Apple’s side, starting from this incident, where some apps aren’t getting processed.
You should be able to get the EAS build processed by disabling bitcode for now. You can do that by adding this config property to your
app.json
manifest.By setting the
expo.ios.bitcode
toDebug
, you’ll only enable bitcode for debug builds and excluding release or production builds. It’s unfortunate that Apple deployed a change like this, without providing feedback or information about what’s wrong. So I’m afraid a fix for this might take some time.Hope this gets you at least unblocked for now!