expo: expo@45 expo-av@11.2.3 and expo-camera@12.1.2 not work on iOS

Summary

just use Video sample code, but initWithEXAV didn’t called.

downgrade to 44 or use Android, it works fine.

Managed or bare workflow? If you have ios/ or android/ directories in your project, the answer is bare!

bare

What platform(s) does this occur on?

iOS

SDK Version (managed workflow only)

No response

Environment

  expo-env-info 1.0.3 environment info:
    System:
      OS: macOS 12.0.1
      Shell: 5.8 - /bin/zsh
    Binaries:
      Node: 16.10.0 - /usr/local/bin/node
      Yarn: 1.22.11 - ~/.nvm/versions/node/v16.10.0/bin/yarn
      npm: 7.24.0 - ~/.nvm/versions/node/v16.10.0/bin/npm
      Watchman: 4.9.0 - /opt/homebrew/bin/watchman
    Managers:
      CocoaPods: 1.11.2 - /usr/local/bin/pod
    SDKs:
      iOS SDK:
        Platforms: DriverKit 21.4, iOS 15.4, macOS 12.3, tvOS 15.4, watchOS 8.5
    IDEs:
      Android Studio: 2020.3 AI-203.7717.56.2031.7678000
      Xcode: 13.3.1/13E500a - /usr/bin/xcodebuild
    npmPackages:
      expo: ^45.0.0 => 45.0.1
      react: 17.0.2 => 17.0.2
      react-native: 0.68.1 => 0.68.1
    npmGlobalPackages:
      expo-cli: 5.4.3
    Expo Workflow: bare

Reproducible demo

https://github.com/zhiqingchen/expo-reproduce

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Reactions: 3
  • Comments: 29 (18 by maintainers)

Most upvoted comments

this is resolved with expo@45.0.2 - thank you for the report!

I’m experiencing the exact same issue. It’s like the component don’t get mounted at all, since the the video doesn’t even start loading. It’s even more confusing as I know that @hirbod makes really extensive use of expo-av and it seems to work perfectly for him.

Android works perfectly.

I found that all props of video component are not working, not just source prop, it should be a generic problem.

@mephisto83 - sdk 45.0.0 uses expo@^45.0.0. the expo package version != sdk version. open your package.json and change the “expo” version to ^45.0.2

Okay, I managed to reproduce it. Repro here:

https://github.com/fobos531/expoav-repro

What I did is: take @hirbod’s we.tl/t-wiy7HZrdbG repro. Execute:

expo install expo-dev-client

Add import 'expo-dev-client' to App.js. No other changes have been made to the code. Created a developmentClient build using EAS. Tried running the code in the dev client. Same issue as described here in this thread.

I don’t know if it’s device specific or something else - the phone I’m testing on is a physical iPhone 12.

Looks like that I totally forgot that I was also fighting with a regression, lol https://github.com/expo/expo/pull/17036#issuecomment-1113206489

See my comment 10 days ago. My findings have been that I could not load a video without calling loadAsync. @bbarthec @Pickleboyonline @barthap did we messed up something?

The reason why this slipped through for me was, that I am loading my videos imperatively and not declaratively (only one spot used to load it via source prop, which did indeed trigger a regression for me, but I did not investigate this further)

So a workaround for all of you folks right now is to use loadAsync until loading via prop is fixed.

Ok, some more findings

  useEffect(() => {
    video.current.loadAsync({
      uri: "https://d23dyxeqlo5psv.cloudfront.net/big_buck_bunny.mp4",
    });
  }, []);

Does load the video. So we have an issue with the initial via source prop. It does not matter if the app is using JSC/Hermes. Both fail

I can reproduce this in bare React Native app as well (RN 0.68.2).

Had the exactly the same issues as well on iOS with expo-av@11.2.3 /w SDK 45 and Hermes, android works fine.

Edit: I am using expo-dev-client, bare workflow as well

I think SDK45 support for snack is coming soon.