Xcode выдает «atomic_notify_one‹unsigned long›» недоступен

Я установил Xcode 12 на свой Mac, попытался создать собственное приложение для реагирования, которое отлично работает на Android, и получил 'atomic_notify_one<unsigned long>' is unavailable. Это самая большая информация, которую я получаю от ошибки.


person Marvelous Ikechi    schedule 13.02.2021    source источник


Ответы (12)


Вместо того, чтобы комментировать флиппер, вот решение, которое сработало для меня.

Обновите флиппер в вашем подфайле, чтобы он выглядел так

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

Запустите pod repo update внутри папки ios

И, наконец, обновите модули вашего проекта, используя

pod install

person kabangi julius    schedule 29.04.2021
comment
Абсолютно это сработало для меня, не жертвуя флиппером. Чем ты. - person Víctor Ramírez; 01.05.2021
comment
Это сработало, спасибо. По крайней мере, разработка iOS не полна ненужной сложности или чего-то подобного. - person karfus; 11.06.2021
comment
и... почему это работает? - person Hadi KAR; 30.07.2021

Эта проблема повторилась сегодня после обновления симуляторов iOS до iOS 14.5. Ответ, опубликованный Shared S Katre, кажется хорошим решением.

Поскольку React-Native — это открытый исходный код, я думаю, что любые большие обновления iOS определенно могут привести к критическим изменениям. Я думаю, что они будут исправлены позже.

В любом случае проблема, похоже, связана с Flipper, который служит инструментом отладки для RN ​​(https://reactnative.dev/blog/2020/03/26/version-0.62).

Если вам просто нужно, чтобы ваш проект был собран, вы можете просто закомментировать flipper в своем подфайле и переустановить свои поды вот так.

Подфайл

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

Затем переустановите свои модули. Я зашел в корень проекта и использовал npx.

$ npx pod-install

Наконец, попробуйте создать и запустить свой проект:

$ npx react-native run-ios

Обновлять:

Судя по комментариям, теперь это исправлено. Если вам нужен флиппер, вы сможете вернуть свой подфайл и обновить флиппер.

См.: https://stackoverflow.com/a/67314652/9906042

Спасибо штабелерам!

person cy-c    schedule 27.04.2021
comment
Вот соответствующая проблема GitHub от Flipper — похоже, они работают над тем, чтобы найти решение как можно скорее. github.com/facebook/flipper/issues/2215 - person chrisheninger; 28.04.2021
comment
Для этого теперь доступен патч с flipper -folly 2.5.3 github.com/ facebook/flipper/issues/2215#issuecomment-828815200 - person lonecruisader; 29.04.2021

  1. Исправьте подфайл, как показано на изображении ниже введите здесь описание изображения
  2. компакт-диск ios
  3. удалить папку Pods и Podfile.lock
  4. установка модуля
  5. обновление модуля
  6. cd .. && npx реагировать на собственный run-ios
person shicheng王事成    schedule 30.03.2021
comment
Я не думаю, что это лучшее решение, так как другие люди могут использовать инструменты разработчика Flipper. Это решение лучше, так как оно обновляет библиотеку, чтобы включить исправление основной ветки: stackoverflow.com/a/66876338/4160784 - person Jules; 07.05.2021

Я должен прокомментировать все #ifdef FB_SONARKIT_ENABLED в AppDelegate.m, установить для Hermes значение false и прокомментировать Flipper в Podfile.

В конце концов, удалите Pods и Podfile.lock, затем установите pod.

person Alan Oliveira de Quadros    schedule 27.04.2021
comment
Ваше предложение отключить Hermes :hermes_enabled => false было тем, чего мне не хватало, чтобы приступить к работе. Надеюсь скоро выйдет обновление. Спасибо! - person Allen; 27.04.2021
comment
У меня был :hermes_enabled => true, и мне также нужно было изменить его на :hermes_enabled => false. Я сделал pod install --update-repo после этого, и это не помогло. Спасибо - person Dror Bar; 09.05.2021

Если у кого-то все еще есть эта ошибка (я только что обновил Mac, Xcode и т. д.), вы можете исправить сборку, не отключая Flipper и Hermes; в вашем файле пода под post_install просто добавьте (я нашел его где-то в Интернете и изменил, чтобы исправить новые ошибки с последними обновлениями):

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

Перед target добавьте

# 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
person opensw    schedule 28.04.2021
comment
если приведенное выше выдает ошибку Permission denied @ rb_sysopen - Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h, то удаление папки Pods исправляет ее - person Stathis Ntonas; 29.04.2021
comment
Мне помог только этот! Спасибо! Удалите файл Pods перед запуском pod-install - person Fatih Taşdemir; 05.05.2021
comment
19 мая нижние 3 замены больше не нужны, оставьте только первые 2 вызова find_and_replace перед комментарием ## Fix for Flipper-Folly в iOS 14.5. - person f4z3k4s; 19.05.2021

Эта ошибка была ошибкой флиппера. Flipper выдал еще несколько менее описательных ошибок, которые мне пришлось прокомментировать в моем подфайле. После комментирования эта ошибка прекратилась.

person Marvelous Ikechi    schedule 16.02.2021
comment
Да, он работает без флиппера, и я могу его отлаживать, тогда зачем использовать флиппер в React Native? - person Khurshid Ansari; 05.05.2021
comment
@KhurshidAnsari В этом нет необходимости. По сути, это набор инструментов отладки, таких как средство просмотра журнала, средство поиска трассировки стека. - person Rahul Purohit; 09.08.2021

просто прокомментировал эту строку и решил эту проблему -

  # use_flipper!
  # post_install do |installer|
  #   flipper_post_install(installer)
  # end
person jyotishman saikia    schedule 03.05.2021

У меня была такая же проблема при сборке в XCode 12.5. Если временное отключение Flipper вам не подходит, вы можете перейти на XCode 12.4. Это исправило это для меня. Вы можете скачать XCode 12.4 здесь: https://developer.apple.com/download/more

person benoit    schedule 28.04.2021
comment
Привет @benoit, твое решение - единственное, что сработало без внесения каких-либо изменений в какой-либо код или зависимость. Xcode 12.5 показывал n ошибок одну за другой даже после их исправления, но переход на Xcode 12.4 смог запустить приложение без каких-либо изменений. Большое спасибо за это замечательное предложение. - person Mohit Kale; 20.05.2021

Вам нужно прокомментировать ниже код Flipper в Podfile:

use_flipper!
post_install do |installer|
    flipper_post_install(installer)
  end
person Sharad S Katre    schedule 30.03.2021

Я думаю, что ответ, предоставленный @opensw, будет работать, но я нашел нечто более усовершенствованное решение, чтобы оно работало с установкой модуля каждый раз без удаления папки Pods. Прежде всего, измените добавить/заменить эту строку в вашем подфайле.

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

Теперь в последних версиях, упомянутых в приведенных выше строках, исправлена ​​проблема с Flipper-folly. Но нам также нужно позаботиться о безумии RCT, и для этого мы будем использовать функцию find_and_replace. Вот новая функция, которую я получил из здесь

# 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

Теперь вызовите эту функцию после установки, поэтому нам нужно будет добавить следующие 2 вызова функций внутри post_install do |installer|

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

Вот мой ответ на Github

person Umang Loriya    schedule 30.04.2021

Замените весь текущий код флиппера в вашем подфайле на эту базу в вашей версии React Native:

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

or

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

Затем обновите проект Pods, используя это:

cd ios && pod install && cd ..
person Nguyễn Thượng Thông    schedule 04.05.2021

Чтобы немного расширить ответы Umang и opensw.

Я обновил find_and_replace следующим образом. Обратите внимание, я добавил system("chmod +w " + name), который исправляет ошибку Permission denied @ rb_sysopen.

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
          system("chmod +w " + name)
          File.open(name, "w") { |file| file.puts replace }
          STDOUT.flush
      end
  end
  Dir[dir + '*/'].each(&method(:find_and_replace))
end

Вот моя конфигурация флиппера

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

А что касается исправления файлов, то в моем случае на самых последних версиях от 30 апр достаточно обновить DistributedMutex-inl.h только в одном месте.

Также обратите внимание, как я добавил два дополнительных пробела перед именем функции. Это необходимо, чтобы модуль установки не сломал код при последующих вызовах.

  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

person Vlad Miller    schedule 30.04.2021