React Native на Apple Silicon M1 — в связанной библиотеке «libPods-ProjectName.a» отсутствует одна или несколько архитектур, необходимых для этой цели: x86_64

Я пытаюсь создать проект React Native на MacBook Pro с архитектурой M1 для симулятора iOS.

Проект прекрасно построен на архитектуре Intel.

Он также строится на устройстве и хорошо архивируется на M1. Но не на симуляторе.

У меня была эта классическая ошибка при переходе на чипсет М1.

в /project-folder/ios/Pods/OpenSSL-Universal/ios/lib/libcrypto.a(cryptlib.o), сборка для симулятора iOS, но ссылка в объектном файле, созданном для iOS, файл '/project-folder/ios/ Pods/OpenSSL-Universal/ios/lib/libcrypto.a' для архитектуры arm64

Я добавил arm64 в исключенные архитектуры.

Я также добавил следующий фрагмент, но он также реагирует без него.

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
  end
end

Теперь у меня есть:

/project-folder/ios/ProjectName.xcodeproj В связанной библиотеке libPods-ProjectName.a отсутствует одна или несколько архитектур, необходимых для этой цели: x86_64.

Я пытался добавить x86_64 в список архитектур проекта, но безрезультатно.

Я строю из Xcode IDE. Это сообщение об ошибке появляется для всех iPhone, которые я пробовал: 8, 11, 12 и всех целей, которые я пробовал: iOS 9, 10 и 13.

Используете ли вы какую-либо конкретную версию модуля OpenSSL-Universal? Похоже, что все слайсы «i386 armv7 armv7s x86_64 arm64» уже включены в версию 1.0.2.20 модуля против библиотеки libcrypto. Так что это может быть конфликт версий.

Ayan Sengupta 19.12.2020 20:35

Нет. Я думаю, что это не связано с Open SSL, просто это первая библиотека, которая вызывается. Это проблема более высокого уровня.

Xiiryo 20.12.2020 21:52

Проблема с открытым SSL решена при исключении arm64

Xiiryo 20.12.2020 23:49

Большой! Любая идея, как это решилось, поскольку в открытом двоичном файле SSL уже есть срез arm64. Так что мне действительно любопытно.

Ayan Sengupta 21.12.2020 14:59

Я исключил arm64 как в стручках, так и в проекте, но у меня все та же проблема. @ Xiiryo ты как-то решил это? У меня тоже MacBook с Apple Silicon.

DxW 31.12.2020 12:29

Привет, еще не решено, пока я запускаю на устройстве. Но было бы неплохо иметь тренажеры для изучения аспекта на разных размерах.

Xiiryo 01.01.2021 15:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
73
6
63 829
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

У меня была такая же проблема, и, наконец, я ее исправил. Есть 2 основные причины ошибок:

  1. arm64 поддержка архитектуры и версия, совместимая с Xcode 12, еще не была предоставлена ​​многими популярными сторонними библиотеками (такими как Firebase, AFNetworking и т. д.). Раньше Xcode 11 автоматически переводил сборку для arm64 для симулятора в сборку для x86_64, но теперь, когда arm64 является допустимой архитектурой симулятора (это архитектура Apple Silicon), такого перевода больше не происходит.

  2. Поскольку параметр сборки Valid Architectures был удален из Xcode 12, файл проекта, открытый в Xcode 12, автоматически сгенерирует макрос VALID_ARCHS в User-Define, и этот макрос приведет к сбою сборки.

Я следую всем шагам, описанным в этом посте: https://medium.com/@khushwanttanwar/xcode-12-compilation-errors-while-running-with-ios-14-simulators-5731c91326e9

Последним шагом было обновление всех модулей, выполнив следующую команду в папке проекта:

pod deintegrate
pod update

Затем я исключаю arm64 для архитектуры Simulator как из основного проекта, так и из проекта Pod.

Xcode build settings

Очистите проект ( + + k), затем запустите.

Спасибо за подробное объяснение и ссылку на дальнейшее чтение. Тщательно, я понимаю не только исправление, но и то, почему исправление работает.

zkwentz 08.04.2021 16:41

У меня это не работает, но я клянусь, что раньше это работало в другом проекте. Кроме того, по какой-то причине исключенные архитектуры в моем проекте Pods продолжают сбрасываться. Единственное, что работает, это запустить его с терминала rosetta.

SeanMC 20.01.2022 06:13

XCode 12.5 нарушил большинство приведенных выше ответов. Для тех, кто использует XCode 12.5 и react-native 0.64.2, я написал небольшое руководство, чтобы все заработало:

https://github.com/aiba/react-native-m1/blob/main/README.md

вы спасли мне жизнь в будущем Xcode должен это исправить?

K. Kachalov 27.07.2021 17:47

Для меня открытие Xcode в режиме Rosetta решило проблему. Возможно, вам придется удалить DerivedData также по адресу: /Users/<username>/Library/Developer/Xcode/DerivedData

Вы можете установить Rosetta, запустив: softwareupdate --install-rosetta

Также кажется, что ОС предлагает вам установить, если вы пытаетесь открыть приложение, для которого требуется Rosetta: https://support.apple.com/en-us/HT211861

Это работает и для меня по состоянию на ноябрь 2021 года с Xcode 13.1 и React Native 0.66.

ffritz 23.11.2021 10:35

ты спас мой день братан

mychar 03.01.2022 11:46

Прежде чем пытаться что-либо еще, выберите опцию «Открыть с помощью Rosetta». Так как он наименее инвазивен и работает в 99% случаев.

yeralin 06.05.2022 17:41

Это следует рассматривать как принятый ответ в 2022 году. Вам также необходимо включить режим Rosetta в Simulator.app.

Wayne Mao 19.07.2022 08:16

удаление DerivedData сработало для меня!!

Jamie S 19.07.2022 23:02

У меня была такая же проблема на моем M1 Mac, и вот что я сделал, чтобы исправить это:

  1. brew install watchman
    если у вас нет узла => brew install node
  2. sudo arch -x86_64 gem install ffi
  3. добавьте этот код в конец файла pod, который находится внутри папки ios:
post_install do |installer|
    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        config.build_settings["ONLY_ACTIVE_ARCH"] = "NO"
      end
    end
  end
  1. cd ios/ && arch -x86_64 pod install.

  2. запустите Xcode с Rosetta.
    .
    Вы можете установить Rosetta, запустив: softwareupdate --install-rosetta

  3. исключить архитектуру arm64.

  4. чистая сборка - откройте xcode, затем нажмите Command + Shift + K


  1. Если вы используете nvm, попробуйте заменить NODE_BINARY=node фактическим результатом команды which node, который в моем случае выглядит примерно так:

Привет этим ответам: один два три

пробовали запускать без rosetta? Я могу, но пустой проект (create-react-native-app). Но основной проект можно запустить только с rosetta. Хочу запустить без, потому что россетта медленнее. Что вы думаете?

arkan4ik92 13.04.2022 01:01

Я получал эту ошибку при использовании команды run-ios для симулятора. Я только что добавил приведенный ниже сценарий в область после установки Podfile, установил ли модуль, и сборка прошла успешно, когда я запустил тот же симулятор таргетинга команды run-ios. Использование Xcode 13.2.1 для справки.

installer.pods_project.build_configurations.each do |config|
    config.build_settings["ONLY_ACTIVE_ARCH"] = "NO"
end

Надеюсь, что кто-то получит помощь от этого.

Редактировать: я нахожусь на машине M1 и использовал терминал rosetta для создания проекта, но все остальные установки pod выполняются с терминала, отличного от rosetta. мои кокаоподы и установки ffi также были с терминала rosetta, включая установку варки.

Другие вопросы по теме