Я пытаюсь создать проект 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.
Нет. Я думаю, что это не связано с Open SSL, просто это первая библиотека, которая вызывается. Это проблема более высокого уровня.
Проблема с открытым SSL решена при исключении arm64
Большой! Любая идея, как это решилось, поскольку в открытом двоичном файле SSL уже есть срез arm64. Так что мне действительно любопытно.
Я исключил arm64 как в стручках, так и в проекте, но у меня все та же проблема. @ Xiiryo ты как-то решил это? У меня тоже MacBook с Apple Silicon.
Привет, еще не решено, пока я запускаю на устройстве. Но было бы неплохо иметь тренажеры для изучения аспекта на разных размерах.
У меня была такая же проблема, и, наконец, я ее исправил. Есть 2 основные причины ошибок:
arm64
поддержка архитектуры и версия, совместимая с Xcode 12, еще не была предоставлена многими популярными сторонними библиотеками (такими как Firebase, AFNetworking и т. д.). Раньше Xcode 11 автоматически переводил сборку для arm64 для симулятора в сборку для x86_64
, но теперь, когда arm64
является допустимой архитектурой симулятора (это архитектура Apple Silicon), такого перевода больше не происходит.
Поскольку параметр сборки 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.
Очистите проект (⇧ + ⌘ + k), затем запустите.
Спасибо за подробное объяснение и ссылку на дальнейшее чтение. Тщательно, я понимаю не только исправление, но и то, почему исправление работает.
У меня это не работает, но я клянусь, что раньше это работало в другом проекте. Кроме того, по какой-то причине исключенные архитектуры в моем проекте Pods продолжают сбрасываться. Единственное, что работает, это запустить его с терминала rosetta.
XCode 12.5 нарушил большинство приведенных выше ответов. Для тех, кто использует XCode 12.5 и react-native 0.64.2, я написал небольшое руководство, чтобы все заработало:
https://github.com/aiba/react-native-m1/blob/main/README.md
вы спасли мне жизнь в будущем Xcode должен это исправить?
Для меня открытие 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.
ты спас мой день братан
Прежде чем пытаться что-либо еще, выберите опцию «Открыть с помощью Rosetta». Так как он наименее инвазивен и работает в 99% случаев.
Это следует рассматривать как принятый ответ в 2022 году. Вам также необходимо включить режим Rosetta в Simulator.app.
удаление DerivedData сработало для меня!!
У меня была такая же проблема на моем M1 Mac, и вот что я сделал, чтобы исправить это:
brew install watchman
brew install node
sudo arch -x86_64 gem install ffi
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
cd ios/ && arch -x86_64 pod install
.
запустите Xcode с Rosetta.
.
Вы можете установить Rosetta, запустив: softwareupdate --install-rosetta
исключить архитектуру arm64.
чистая сборка - откройте xcode, затем нажмите Command + Shift + K
nvm
, попробуйте заменить NODE_BINARY=node
фактическим результатом команды which node
, который в моем случае выглядит примерно так: Привет этим ответам: один два три
пробовали запускать без rosetta? Я могу, но пустой проект (create-react-native-app). Но основной проект можно запустить только с rosetta. Хочу запустить без, потому что россетта медленнее. Что вы думаете?
Я получал эту ошибку при использовании команды 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, включая установку варки.
Используете ли вы какую-либо конкретную версию модуля
OpenSSL-Universal
? Похоже, что все слайсы «i386 armv7 armv7s x86_64 arm64» уже включены в версию 1.0.2.20 модуля против библиотеки libcrypto. Так что это может быть конфликт версий.