105
votes

Xcode lance 'atomic_notify_one ' est indisponible

J'ai installé Xcode 12 sur mon Mac, essayé de construire mon application native React qui s'exécute parfaitement sur Android, et Get 'atomic_notify_one ' est indisponible . Ceci est le plus d'informations que j'obtiens de l'erreur.


0 commentaires

14 Réponses :


8
votes

Cette erreur était une erreur de Flipper. Flipper a lancé plusieurs erreurs descriptives plus que je devais la commenter sur mon podfile. Après avoir commenté, cette erreur s'est arrêtée.


2 commentaires

Oui, cela fonctionne sans flipper et je suis en mesure de le déboguer, alors qu'est-ce que l'utilisation de Flipper in React Native?


@Khurshidansari ce n'est pas nécessaire. Il s'agit essentiellement d'un ensemble d'outils de débogage comme Log Viewer, StackTrace Finder



22
votes
  • Correction de podfile comme indiqué dans l'image ci-dessous Entrez la description de l'image ici
  • CD iOS
  • Supprimer le dossier des pods et podfile.lock
  • Installation de pod
  • MISE À JOUR POD
  • cd .. && npx react-natif run-ios

  • 1 commentaires

    Je ne pense pas que ce soit la meilleure solution, car d'autres personnes pourraient utiliser les outils Flipper Dev. Cette solution est meilleure car elle met à jour la bibliothèque pour inclure le correctif en amont: stackoverflow.com/a/66876338/4160784



    4
    votes

    Vous devez commenter le code de flipper dans PodFile:

    use_flipper!
    post_install do |installer|
        flipper_post_install(installer)
      end
    


    0 commentaires

    40
    votes

    Ce problème s'est reproduit aujourd'hui après que les simulateurs iOS ont été mis à jour vers iOS 14.5. La réponse publiée par "Shared S Katre" semble être une bonne conduite.

    Parce que React-Native est le code open source, je pense que toutes les grandes mises à jour sur iOS peuvent certainement provoquer des changements de rupture. J'imagine que ceux-ci seront réparés plus tard.

    Quoi qu'il en soit - le problème semble être avec Flipper, qui sert d'outil de débogage pour RN ( https://rectnative.dev/blog/2020/03/26/version-0.62 ).

    Si vous Il suffit de faire construire votre projet, vous pouvez simplement commenter les flipper dans votre podfile et réinstaller vos pods comme ça.

    podfile

    $ npx react-native run-ios
    

    Ensuite, réinstallez vos pods. I Cd'd dans la racine du projet et utilisé NPX.

    $ npx pod-install
    

    Enfin, essayez de construire et d'exécuter votre projet:

    # Enables Flipper.
    #
    # Note that if you have use_frameworks! enabled, Flipper will not work and
    # you should disable the next line.
    # use_flipper!()
    

    Mise à jour:

    Selon les commentaires, il semble que cela ait été corrigé maintenant. Si vous voulez des flipper, vous devriez pouvoir revenir à votre podfile et mettre à jour le flipper.

    Voir: https: // stackoverflow.com/a/67314652/9906042

    Merci Stackers!


    2 commentaires

    Voici le problème GitHub pertinent de Flipper - on dirait qu'ils travaillent pour mettre en place une solution dès que possible. github.com/facebook/flipper/issues/2215


    Il y a un patch disponible pour cela maintenant avec Flipper -Folly 2.5.3 github.com/ Facebook / Flipper / Issues / 2215 # émetteur-8288152‌ 00



    13
    votes

    Je dois commenter tout #ifdef fb_sonarkit_enabled dans appdelegate.m, définissez Hermes sur false et commentaire flipper dans podfile.

    Après tout, supprimez les pods et podfile.lock, puis Pod Installer


    2 commentaires

    Votre suggestion de désactiver Hermes : hermes_enabled => false était ce qui me manquait pour me rendre au travail. Espérons qu'une mise à jour sortira bientôt. Merci!


    J'avais : hermes_enabled => true et j'avais également besoin de le changer en : hermes_enabled => false . J'ai fait pod install - update-repo après et il l'a dixérément dix. Merci



    7
    votes

    J'ai eu le même problème lors de la construction dans Xcode 12.5. Si la désactivation temporaire de flipper n'est pas une option pour vous, vous pouvez se rétablir à Xcode 12.4. Cela l'a corrigé pour moi. Vous pouvez télécharger xcode 12.4 ici: https://developer.apple.com/download/more < / p>


    1 commentaires

    Salut @Benoit Votre solution est la seule chose qui a fonctionné sans modifier aucun code ou dépendance. Xcode 12.5 affichait n nombre d'erreurs l'une après l'autre même après les avoir corrigées, mais la rétrogradation de Xcode 12.4 a pu exécuter l'application sans aucune modification. Merci beaucoup pour cette merveilleuse suggestion.



    16
    votes

    Si quelqu'un a toujours cette erreur (je viens de mettre à jour Mac, Xcode, etc.), vous pouvez réparer la construction sans désactiver Flipper et Hermès; Dans votre fichier pod sous post_install ajoutez simplement (je l'ai trouvé quelque part sur le Web et je l'ai changé pour corriger de nouvelles erreurs avec les dernières mises à jour):

    # fixes for last Mac updates
    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
    

    avant votre cible , ajouter

    post_install do |installer|
        flipper_post_install(installer)
        react_native_post_install(installer)
    
        # # to build for the simulator on Apple M1
        # installer.pods_project.targets.each do |target|
        #   target.build_configurations.each do |config|
        #     # disables arm64 builds for the simulator
        #     config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
        #   end
        # end
    
        ## Fix for XCode 12.5 & RN 0.62.2 - See https://github.com/facebook/react-native/issues/28405
        find_and_replace("../node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm",
          "_initializeModules:(NSArray<id<RCTBridgeModule>> *)modules", "_initializeModules:(NSArray<Class> *)modules")
    
        find_and_replace("../node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm",
          "RCTBridgeModuleNameForClass(strongModule))", "RCTBridgeModuleNameForClass(Class(strongModule)))")
    
        ## 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/Headers/Private/RCT-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
    


    4 commentaires

    Si l'erreur ci-dessus lance l'erreur l'autorisation refusée @ RB_SYSOPEN - pods / flipper-folly / folly / synchronisation / distributionmutex-in‌ l.h puis supprimer pods le dossier le corrige


    Seul celui-ci a fonctionné pour moi! Merci! Supprimer le fichier de pods avant d'exécuter un stalle de pod


    Le 19 mai, les 3 derniers remplacements ne sont plus nécessaires, ne laissez plus que les 2 premiers appels find_and_replace avant ## Correction pour Flipper-Folly sur iOS 14.5 commentaire.


    J'obtiens cette erreur: méthode non définie `flipper_post_install 'pour #



    167
    votes

    Au lieu de commenter Flipper, voici une solution qui a fonctionné pour moi.

    Mettez à jour le flipper dans votre podfile pour ressembler à ceci

    use_flipper!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })
    

    Exécuter repo pod Mise à jour à l'intérieur du dossier iOS

    Et enfin, mettez à jour vos pods de projet à l'aide de

    Pod Install


    6 commentaires

    Absolument, cela a fonctionné pour moi sans sacrifier Flipper. Que toi.


    Cela a fonctionné, merci. Au moins le développement iOS n'est pas plein de complexité inutile ou quoi que ce soit.


    Ce paramètre a fonctionné pour moi avec xcode 13.0: use_flipper! ({'Flipper' => '0,96.0', 'flipper-folly' => '~> 2.6', 'flipper-rsocket' => '~> 1.4 '})


    où ajouter cette ligne?


    @Faizulhassan après section permissions_path .


    Cela seul n'a pas résolu le problème pour moi. A pris quelques heures, mais finalement ce m'a aidé ( chaque étape)



    5
    votes

    Je pense que la réponse fournie par @opensensw fonctionnera, mais j'ai trouvé quelque chose de plus amélioré afin qu'il fonctionne avec Pod Installer à chaque fois sans supprimer le dossier pods . Tout d'abord, modifiez Ajouter / remplacer cette ligne dans votre podfile xxx

    Maintenant dans les dernières versions mentionnées dans les lignes ci-dessus résout un problème avec le flipper-folly Mais nous devons également prendre soin du RCT-FOLLY et pour cela, nous utiliserons la fonction find_and_replace . Voici la nouvelle fonction que j'ai obtenue de la ici / p>

     find_and_replace("Pods/RCT-Folly/folly/synchronization/DistributedMutex-inl.h",
                       "atomic_notify_one(state)", "folly::atomic_notify_one(state)")
    
      find_and_replace("Pods/RCT-Folly/folly/synchronization/DistributedMutex-inl.h",
      "atomic_wait_until(&state, previous | data, deadline)", "folly::atomic_wait_until(&state, previous | data, deadline)")
    

    Appelez maintenant cette fonction à partir du post-install, nous devrons donc ajouter les 2 appels de fonction suivants à l'intérieur post_install do | installateur |

    # Define find-and-replace function
      def find_and_replace(dir, findstr, replacestr)
        Dir[dir].each do |name|
            text = File.read(name)
            replace = text.gsub(findstr,replacestr)
            replaced = text.index(replacestr)
            if replaced == nil && 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
    

    Voici ma réponse dans


    0 commentaires

    4
    votes

    pour développer un peu les réponses Umang et OpenSW.

    J'ai mis à jour find_and_replace comme suivant. Remarque, j'ai ajouté System ("CHMOD + W" + Name) qui corrige l'autorisation refusée @ RB_SYSOPEN ERREUR.

      post_install do |installer|
        flipper_post_install(installer)
        react_native_post_install(installer)
    
        find_and_replace("Pods/RCT-Folly/folly/synchronization/DistributedMutex-inl.h",
              "  atomic_notify_one(state);", "  folly::atomic_notify_one(state);")
      end
    
    


    0 commentaires

    9
    votes

    vient de commenter cette ligne et a résolu ce problème-

      # use_flipper!
      # post_install do |installer|
      #   flipper_post_install(installer)
      # end
    


    0 commentaires

    5
    votes

    Remplacez tout le code de flipper actuel dans votre podfile par cette base sur votre version native React:

    cd ios && pod install && cd ..
    

    ou

    use_flipper!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })
    

    puis mettez à jour pour Project de pods en utilisant ceci:

    add_flipper_pods!({ 'Flipper-Folly' => '2.5.3', 'Flipper' => '0.87.0', 'Flipper-RSocket' => '1.3.1' })
    


    0 commentaires

    0
    votes

    J'ai eu ce même problème à mettre à niveau un projet de RN 0,63 à 0,64 (et en utilisant Xcode 12.5), mais la réponse le mieux votée n'a pas résolu le problème pour moi, et je tenais à éviter les scripts supplémentaires.

    J'ai remarqué dans le Mettez à niveau Helper Quelques modifications dans le podfile - en particulier le changement de flipper_post_install (installateur) à react_native_post_install (installateur) . J'ai fait ce changement et blitz mon répertoire PODS, puis j'ai exécuté pod install --repo-update et cela l'a corrigé pour moi :)

    J'ai également remarqué un correctif exécuté pour le fichier Distributedmutex (qui était le fichier en question) après l'installation des pods, il me semble donc que ce devrait être le correctif correct

    bonus : Cela m'a également permis de supprimer l'ancien script flipper_post_install que j'avais en haut de mon podfile à partir d'une mise à niveau précédente


    0 commentaires

    0
    votes

    Remplacez atomic_nofiy_one par folie :: atomic_notify_one, le podfile complet est un coup:

    platform :ios, '9.0'
    require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
    
    def add_flipper_pods!
      version = '~> 0.33.1'
      pod 'FlipperKit', version, :configuration => 'Debug'
      pod 'FlipperKit/FlipperKitLayoutPlugin', version, :configuration => 'Debug'
      pod 'FlipperKit/SKIOSNetworkPlugin', version, :configuration => 'Debug'
      pod 'FlipperKit/FlipperKitUserDefaultsPlugin', version, :configuration => 'Debug'
      pod 'FlipperKit/FlipperKitReactPlugin', version, :configuration => 'Debug'
    end
    
    # Post Install processing for Flipper
    def flipper_post_install(installer)
      installer.pods_project.targets.each do |target|
        if target.name == 'YogaKit'
          target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '4.1'
          end
        end
      end
    end
    
    target 'AwesomeProject' do
      # Pods for AwesomeProject
      pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector"
      pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec"
      pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired"
      pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety"
      pod 'React', :path => '../node_modules/react-native/'
      pod 'React-Core', :path => '../node_modules/react-native/'
      pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules'
      pod 'React-Core/DevSupport', :path => '../node_modules/react-native/'
      pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
      pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
      pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
      pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
      pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
      pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
      pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
      pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
      pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
      pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/'
    
      pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
      pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
      pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
      pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
      pod 'ReactCommon/callinvoker', :path => "../node_modules/react-native/ReactCommon"
      pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon"
      pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true
    
      pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
      pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
      pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
    
      target 'AwesomeProjectTests' do
        inherit! :complete
        # Pods for testing
      end
    
      use_native_modules!
    
      # Enables Flipper.
      #
      # Note that if you have use_frameworks! enabled, Flipper will not work and
      # you should disable these next few lines.
      add_flipper_pods!
      post_install do |installer|
        flipper_post_install(installer)
        ## Fix for XCode 12.5 beta
        find_and_replace("../node_modules/react-native/React/CxxBridge/RCTCxxBridge.mm",
            "_initializeModules:(NSArray<id<RCTBridgeModule>> *)modules", "_initializeModules:(NSArray<Class> *)modules")
        find_and_replace("../node_modules/react-native/ReactCommon/turbomodule/core/platform/ios/RCTTurboModuleManager.mm",
        "RCTBridgeModuleNameForClass(strongModule))", "RCTBridgeModuleNameForClass(Class(strongModule)))")
        find_and_replace("Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h",
                 "  atomic_notify_one(state);", "  folly::atomic_notify_one(state);")
      end
    end
    
    target 'AwesomeProject-tvOS' do
      # Pods for AwesomeProject-tvOS
    
      target 'AwesomeProject-tvOSTests' do
        inherit! :search_paths
        # Pods for testing
      end
    end
    
    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
    


    0 commentaires