98 votes

Xcode lance 'atomic_notify_one<unsigned long>' est indisponible.

J'ai installé Xcode 12 sur mon Mac, j'ai essayé de construire mon application react native qui fonctionne parfaitement sur Android, et j'obtiens 'atomic_notify_one<unsigned long>' is unavailable . C'est le maximum d'informations que j'obtiens de l'erreur.

158voto

kabangi julius Points 495

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

Mettez à jour le flipper dans votre fichier Podfile pour qu'il ressemble à ceci

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

Exécuter pod repo update dans le dossier ios

Et enfin, mettez à jour les pods de votre projet en utilisant

pod install

1 votes

Absolument, cela a fonctionné pour moi sans sacrifier la nageoire. Merci.

2 votes

Ça a marché à merveille, merci. Au moins, le développement d'iOS n'est pas rempli de complexité inutile ou autre.

2 votes

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' })

40voto

cy-c Points 132

Ce problème s'est reproduit aujourd'hui après la mise à jour des simulateurs iOS vers iOS 14.5. La réponse postée par "Shared S Katre" semble être une bonne solution de contournement.

React-Native étant un code source ouvert, je pense que toute mise à jour importante d'iOS peut entraîner des modifications importantes. J'imagine que ceux-ci seront corrigés plus tard.

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

Si vous avez juste besoin de faire construire votre projet, vous pouvez simplement commenter flipper dans votre podfile, et réinstaller vos pods comme ceci.

Podfile

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

Ensuite, réinstallez vos pods. Je me suis connecté à la racine du projet et j'ai utilisé npx.

$ npx pod-install

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

$ npx react-native run-ios

Mise à jour :

D'après les commentaires, il semble que cela ait été corrigé maintenant. Si vous voulez flipper, vous devriez pouvoir revenir sur votre Podfile et mettre à jour flipper.

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

Merci aux empileurs !

22voto

shicheng王事成 Points 139
  1. Fixez le Podfile comme indiqué dans l'image ci-dessous enter image description here
  2. cd ios
  3. supprimer le dossier Pods et Podfile.lock
  4. installation des pods
  5. mise à jour du pod
  6. cd && npx react-native run-ios

2 votes

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

16voto

opensw Points 367

Si quelqu'un a encore cette erreur (je viens de mettre à jour Mac, Xcode, etc), vous pouvez corriger la construction sans désactiver Flipper et Hermes ; dans votre fichier Pod sous post_install ajoutez simplement (je l'ai trouvé quelque part sur le web et l'ai modifié pour corriger les nouvelles erreurs des dernières mises à jour) :

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

Avant votre target , ajouter

# 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

7 votes

Si l'opération ci-dessus entraîne une erreur Permission denied @ rb_sysopen - Pods/Flipper-Folly/folly/synchronization/DistributedMutex-in‌​l.h puis en enlevant Pods le dossier le corrige

1 votes

Seul celui-ci a fonctionné pour moi ! Merci ! Supprimer le fichier Pods avant d'exécuter pod-install

1 votes

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

13voto

Je dois commenter tous les #ifdef FB_SONARKIT_ENABLED dans AppDelegate.m, mettez hermes à false et commentez Flipper dans Podfile.

Après tout, supprimez Pods et Podfile.lock, puis installez pods

6 votes

Votre suggestion pour désactiver les hermès :hermes_enabled => false était ce qui me manquait pour pouvoir travailler. J'espère qu'une mise à jour sortira bientôt. Merci !

0 votes

J'avais :hermes_enabled => true et il fallait aussi le changer en :hermes_enabled => false . J'ai fait pod install --update-repo après et il l'a fait dix. Merci

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X