question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

[Expo 44] [Expo FaceDetector] App built by EAS build can't be distributed through App Store

See original GitHub issue

Summary

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).

スクリーンショット_2022-03-25_15_32_12

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:closed
  • Created a year ago
  • Comments:7 (3 by maintainers)

github_iconTop GitHub Comments

3reactions
ishikawacommented, Mar 28, 2022

I’ve successfully distributed the new version by setting "bitcode": "Debug". Many thanks for your help!

1reaction
byCedriccommented, Mar 25, 2022

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.

{
  "expo": {
    "ios": {
      "bitcode": "Debug"
    }
  }
}

By setting the expo.ios.bitcode to Debug, 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!

Read more comments on GitHub >

github_iconTop Results From Across the Web

EAS build works fine in Expo Go an… | Apple Developer Forums
I've been using a managed Expo workflow and recently ran EAS build to release it to the App Store, as it consistently works...
Read more >
Troubleshooting build errors and crashes - Expo Documentation
A reference for troubleshooting build errors and crashes when using EAS Build. This document is under active development; the topic it covers is...
Read more >
Impossible to update expo project inside Expo Go after ...
We are developing an app that require GPS and needs to be tested in open field. Before EAS became the standard to create...
Read more >
How to Develop a Face Recognition System Using FaceNet in ...
This tutorial is divided into five parts; they are: Face Recognition; FaceNet Model; How to Load a FaceNet Model in Keras; How to...
Read more >
432 startup failure post-mortems - CB Insights
It's hard to say goodbye. Find out how 432 startups have failed and why in the words of their investors and founders.
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found