skip to Main Content

After upgrading Xcode to 12.5 and iOS to 14.5, I can’t run the iOS app on a real device nor in the simulator.

After running npm run ios, I get this message:

The following build commands failed:
        CompileC .../Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Flipper-Folly.build/Objects-normal/x86_64/DistributedMutex.o /Users/guilherme/Documents/Dood/ios/Pods/Flipper-Folly/folly/synchronization/DistributedMutex.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler

If I try to run the app on a real device using Xcode, this is the error I get (related to Flipper-Folly):

.../ios/Pods/Headers/Private/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h:1051:5: 'atomic_notify_one<unsigned long>' is unavailable

Ideas? Thanks!

UPDATE:

React native has been updated to 0.64.1. You can now just change your react-native dependency to this version within your package.json file, then run npm install

8

Answers


  1. Chosen as BEST ANSWER

    There's a solution I found here.

    Add this to your post_install in your Podfile:

    post_install do |installer|
      flipper_post_install(installer)
    
      ## Fix for Flipper-Folly on iOS 14.5
      find_and_replace("Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h",
        "atomic_notify_one(state)", "folly::atomic_notify_one(state)")
    
      find_and_replace("Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h",
        "atomic_wait_until(&state, previous | data, deadline)", "folly::atomic_wait_until(&state, previous | data, deadline)")
    end
    

    You'll also need to add the function def for this find_and_replace function (you can put this function anywhere in the podfile):

    def find_and_replace(dir, findstr, replacestr)
      Dir[dir].each do |name|
          text = File.read(name)
          replace = text.gsub(findstr,replacestr)
          if text != replace
              puts "Fix: " + name
              File.open(name, "w") { |file| file.puts replace }
              STDOUT.flush
          end
      end
      Dir[dir + '*/'].each(&method(:find_and_replace))
    end
    

    Run pod install again and it should work. If you get an error relating to permissions while accessing the DistributedMutex-inl.h file, delete your /pods folder and run pod install again

    You should see text print out that says Fix: Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h, etc. If you don't, double check the path in the find_and_replace call.


  2. There is an open RN issue here: https://github.com/facebook/react-native/issues/31179

    For me commenting out Flipper in the Podfile, pod install, and rebuild worked as a temp solution.

      # Enables Flipper.
      #
      # Note that if you have use_frameworks! enabled, Flipper will not work and
      # you should disable these next few lines.
      # use_flipper!
      # post_install do |installer|
      #   flipper_post_install(installer)
      # end
    
    Login or Signup to reply.
  3. just comment out the flipper line in a pod and in Xcode also if you are not using it, hope this will fix in future updates.

    # Note that if you have use_frameworks! enabled, Flipper will not work and
    # you should disable the next line.
    # use_flipper!({ 'Flipper' => '0.79.1'})
    #   post_install do |installer|
    #     react_native_post_install(installer)
    #   end
    

    IN Xcode comment all import and flipper variable

    Login or Signup to reply.
  4. Solution without losing Flipper functionality:

    Define the upgraded dependencies for Flipper in the Podfile

    React Native 62

    def add_flipper_pods!(versions = {})
      versions['Flipper'] ||= '~> 0.87.0' 👈
      versions['DoubleConversion'] ||= '1.1.7'
      versions['Flipper-Folly'] ||= '~> 2.5.3' 👈
      versions['Flipper-Glog'] ||= '0.3.6'
      versions['Flipper-PeerTalk'] ||= '~> 0.0.4'
      versions['Flipper-RSocket'] ||= '~> 1.3.1' 👈
    

    React Native 63

    # Enables Flipper.
      #
      # Note that if you have use_frameworks! enabled, Flipper will not work and
      # you should disable these next few lines.
      use_flipper!({'Flipper' => '0.87.0' 👈, 'Flipper-Folly' => '2.5.3' 👈, 'Flipper-RSocket' => '1.3.1' 👈})
      post_install do |installer|
        flipper_post_install(installer)
      end
    

    cd ios && pod install and you should be good to go

    React Native 64

    Bump the version to 0.64.1 in the package.json

    yarn install && pod install --repo-update && react-native run-ios

    https://github.com/facebook/react-native/releases/tag/v0.64.1

    Login or Signup to reply.
  5. React native 0.64.1 has been released and will solve this. Just update the version number in package.json.

    "react-native": "0.64.1",

    No need to modify the Podfile if you do this

    Login or Signup to reply.
  6. Upgrade to react native 0.64.1 (or higher)

    if you moved from 0.63.x to 0.64.x make sure that in your Podfile you’ve updated the use_flipper! section post install:

    Before:

    post_install do |installer|
      flipper_post_install(installer)
    end
    

    After:

    post_install do |installer|
      react_native_post_install(installer)
    end
    

    run ‘npx react-native-clean-project‘ from project root
    then from inside ‘./ios‘ folder run ‘pod install –repo-update‘ then maybe run ‘pod update’

    Login or Signup to reply.
  7. use_flipper!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })
    

    that works, 😉

    Login or Signup to reply.
  8. I know this is already answered, but for those who find this thread in the future there is an official link addressing this issue:

    Xcode 12.5 troubleshooting guide (RN 0.61/0.62/0.63/0.64)

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search