Xcode 12, построенный для iOS Simulator, но связанный в объектном файле, созданном для iOS, для архитектуры arm64
Попытка создать большой (и работающий над Xcode 11!) Проект в Xcode 12 (бета 5) для подготовки к iOS 14. Codebase ранее была Obj-C, но теперь содержит как Obj-C, так и Swift, и использует модули, которые Obj-C и / или Swift.
Я вытащил новую бета-версию cocoapods с поддержкой Xcode 12 (в настоящее время 1.10.0.beta 2).
Установка модуля прошла успешно. Когда я выполняю сборку, я получаю следующую ошибку в структуре модуля:
"сборка для iOS Simulator, но ссылка в объектном файле, созданном для iOS, для архитектуры arm64"
Когда я запускаю lipo -info на фреймворке, у него есть: armv7s armv7 i386 x86_64 arm64.
Раньше в проекте были установлены допустимые архитектуры: armv7, armv7s и arm64.
В Xcode 12 этот параметр пропадает, как указано в документации Apple. Архитектура установлена в $(ARCHS_STANDARD). У меня ничего не установлено в исключенных архитектурах.
Кто-нибудь имеет представление о том, что здесь может происходить? Мне пока не удалось воспроизвести это с помощью более простого проекта.
69 ответов
В основном вам нужно исключить
arm64
для архитектуры симулятора как из вашего проекта, так и из проекта Pod,
Для этого перейдите в настройки сборки вашего проекта и добавьте
Any iOS Simulator SDK
со значениемarm64
внутриExcluded Architecture
.
ИЛИ ЖЕ
- Если вы используете индивидуальный
XCConfig
files, вы можете просто добавить эту строку для исключения архитектуры симулятора.
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
потом
Вы должны сделать то же самое для проекта Pod, пока все поставщики стручков какао не добавят следующее в свои Podspec.
s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
Вы можете вручную добавить
Excluded Architechure
в настройках сборки вашего проекта Pod, но он будет перезаписан при использовании
pod install
.
Вместо этого вы можете добавить этот фрагмент в свой
Podfile
. Он будет записывать необходимые настройки сборки каждый раз, когда вы запускаете
pod install
post_install do |installer|
installer.pods_project.build_configurations.each do |config|
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
end
end
TL;DR;
Установите "Создать только активную архитектуру" (ONLY_ACTIVE_ARCH
) "на Да для ваших библиотек / приложений, даже для режима выпуска.
Пытаясь определить основную причину проблемы, я понял несколько интересных фактов о Xcode 12.
Xcode 12 на самом деле является отправной точкой для Apple Silicon, который, к сожалению, еще не доступен. Но с этой платформой мы получим macOS на базе arm64, где симуляторы также будут работать на архитектуре arm64, в отличие от нынешней архитектуры x86_64 на базе Intel.
Xcode обычно зависит от "Назначения запуска" для создания своих библиотек / приложений. Поэтому, когда симулятор выбран в качестве "Назначения запуска", он создает приложение для доступных архитектур симуляторов, а когда устройство выбирается в качестве "Назначения запуска", оно строит для архитектуры, которую поддерживает устройство (
arm*
).xcodebuild
, в системе сборки Xcode 12+ считаетarm64
как действующая архитектура для симулятора. Поэтому, когда симулятор выбран в качестве места назначения запуска, он потенциально может попытаться скомпилировать / связать ваши библиотеки / приложения сarm64
также на симуляторах (пока недоступны). Итак, он отправляетclang(++)
какой-то -целевой флаг вродеarm64-apple-ios13.0-simulator
в формате- - - и clang пытается построить / связать с симулятором на основе arm64, который в конечном итоге не работает на Mac на базе Intel. Но
xcodebuild
пытается это только для сборок Release. Почему? Потому что "Создавайте только активную архитектуру (ONLY_ACTIVE_ARCH
) "в параметрах сборки обычно установлено значение" Нет "только для конфигурации" Выпуск ". Это означаетxcodebuild
попытается собрать все архитектурные варианты ваших библиотек / приложений для выбранного места запуска для сборок выпуска. А для места назначения запуска симулятора он будет включать обаx86_64
иarm64
сейчас, так какarm64
в Xcode 12+ также есть поддерживаемая архитектура для симуляторов для поддержки Apple Silicon.
Проще говоря, Xcode не сможет создать ваше приложение всякий раз, когда попытается запустить командную строку,
xcodebuild
, (по умолчанию это сборка выпуска, см. общую вкладку настроек вашего проекта) или в другом режиме в режиме выпуска. Таким образом, простой способ решения этой проблемы - установить "Только сборка активной архитектуры (ONLY_ACTIVE_ARCH
) "на Да в ваших библиотеках / приложениях, даже для режима выпуска.
Если библиотеки включены как модули и у вас есть доступ к
.podspec
вы можете просто установить:
spec.pod_target_xcconfig = {'ONLY_ACTIVE_ARCH' => 'ДА'}
spec.user_target_xcconfig = {'ONLY_ACTIVE_ARCH' => 'YES'} # не рекомендуется
Мне лично не нравится вторая строка, поскольку модули не должны загрязнять целевой проект, и это может быть переопределено в настройках цели. Таким образом, потребительский проект должен быть обязан каким-либо образом изменить настройку. Однако это может быть необходимо для успешного линтинга подспеков.
Однако, если у вас нет доступа к
.podspec
, вы всегда можете обновить настройки во время установки модулей:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
end
end
end
Одна вещь, которую я беспокоился о том, как это повлияет, когда мы фактически заархивируем библиотеки / приложения. Во время архивирования приложения обычно принимают конфигурацию "Release", и поскольку это будет создавать сборку выпуска, учитывающую только активную архитектуру текущего назначения запуска, при таком подходе мы можем потерять срезы для armv7, armv7s и т. Д. Из целевой сборки. Однако я заметил, что в документации говорится (выделено на прилагаемом рисунке), что этот параметр будет проигнорирован, когда мы выберем "Generic iOS Device/Any Device" в качестве места назначения запуска, поскольку он не определяет какую-либо конкретную архитектуру. Так что, я думаю, нам будет хорошо, если мы заархивируем наше приложение, выбрав его в качестве места назначения.
Нашел решение! https://developer.apple.com/forums/thread/657913
Если вы установите для симулятора исключенную архитектуру arm64, он будет компилироваться.
Я понимаю, что этот вопрос немного устарел, но предложенные ответы устарели / неверны.
Сначала вы должны попытаться обновить как CocoaPods, так и зависимости для вашей библиотеки / приложения , а затем, если это не сработает, свяжитесь с поставщиками любых зависимостей, которые вы используете, чтобы узнать, есть ли у них обновление, чтобы добавить поддержку arm64. Симулятор слайсов на M1 Mac.
Здесь есть много ответов, отмеченных как правильные, предполагающих, что вам следует исключить arm64 из списка поддерживаемых архитектур. В лучшем случае это временное решение, а в худшем - распространит эту проблему на других потребителей ваших библиотек. Если вы исключите сегмент arm64 Simulator, это повлияет на производительность приложений, которые вы разрабатываете в Simulator (что, в свою очередь, может привести к сокращению времени автономной работы вашего блестящего нового комплекта M1, пока вы разрабатываете свои потрясающие идеи).
Xcode 12, бета 6
Параметр сборки Valid Architectures был удален в Xcode 12. Если у вас были значения в этом параметре сборки, они вызывают проблему и должны быть удалены.
Мне удалось "очистить" параметр сборки VALID_ARCHS, добавив его обратно в качестве параметра сборки, определяемого пользователем (без значений), запустив проект (который завершился неудачно), а затем удалил параметр сборки VALID_ARCHS. После этого я смог бегать на тренажере.
Настройка сборки My Architectures - Стандартные архитектуры.
Легко исправить
- Щелкните правой кнопкой мыши xcode в папке приложений
- Получить информацию
- Выберите «Открыть с помощью Rosetta».
Запустить.
Предисловие
Когда вы создаете приложение, вы создаете его для определенной комбинации платформы и архитектуры ЦП .
Платформы iOS:
- iOS-устройство
"generic/platform=iOS"
- Симулятор
"generic/platform=iOS Simulator"
Архитектуры ЦП:
- Арм64
- X86_64
Будете ли вы всегда строить для одной комбинации?
Нет. Если вы используете
Вот почему сборка «Отладка» на ваших физических устройствах не приведет к сбою, но затем, когда конфигурация «Выпуск» используется во время процесса архивирования (часто в вашем CI / CD), тогда что-то не получится, потому что архитектуры симулятора также выбраны.
Настройки Xcode по умолчанию для этого:
У меня интел макбук. Если я не буду исключать никакую архитектуру и платформу, что произойдет?
Если вы создаете конфигурацию отладки , она будет создаваться только для архитектуры ЦП целевой платформы. Значение:
- Если вы встраиваете свой iPhone, вам просто нужно поддерживать ARM64.
- Если вы создаете симулятор, вам просто нужно поддерживать X86_64.
Если вы создаете конфигурацию выпуска , она будет:
- Сборка для обеих платформ и всех возможных архитектур.
У меня макбук М1. Если я не буду исключать никакую архитектуру и платформу, что произойдет?
Если вы создаете конфигурацию отладки , она будет создаваться только для архитектуры ЦП целевой платформы. Значение:
- Если вы встраиваете свой iPhone, вам просто нужно поддерживать ARM64.
- Если вы создаете симулятор, вам просто нужно поддерживать ARM64.
- В качестве альтернативы вы можете включить Rosetta для Xcode. В этом случае, если вы создаете симулятор, вам также необходимо поддерживать X86_64.
Если вы создаете конфиг релиза , он будет: - Сборка для обеих платформ и всех возможных архитектур.
Почему это разные сборки Release?
Во время активной разработки вы хотите создавать вещи быстро. Для вас нет смысла активно создавать архитектуры, которые вам не нужны. Это означает, что если вы встраиваете устройство, то вам нужно создавать только эту комбинацию платформы и архитектуры. Вы не хотите строить другие комбинации.
Но если выпускаешь — для других. Затем, поскольку вы не хотите ограничивать/диктовать, как они создают ваше приложение, вы должны создавать все возможные комбинации и убедиться, что ваша структура компилируется для всех из них.
Для приложения создание архива для платформы симулятора может иметь меньший смысл, однако для фреймворка вашим потребителем является другой разработчик. Этот разработчик превратит ваш фреймворк в симулятор и в реальное устройство. Следовательно, вам необходимо поддерживать как платформы, так и архитектуры.
Является ли CocoaPods источником проблемы?
Это зависит. Если модуль исключил определенную архитектуру, и вы пытаетесь выполнить сборку для этой архитектуры, вы должны попросить владельца модуля не исключать ее.
В противном случае, если все ваши модули поддерживают данную платформу/архитектуру, для которой вы пытаетесь создать, то это проблема внутри кода, который вы написали сами в своем хост-приложении.
Решение
Обновление предварительно скомпилированных библиотек с поддержкой Apple Silicon
Если библиотека, указанная в сообщении об ошибке, принадлежит поставщику, см. раздел Обновление предварительно скомпилированных библиотек от поставщиков . Если у вас есть исходный код библиотеки, перестройте библиотеку как XCFramework с поддержкой симулятора на кремнии Apple. Чтобы узнать, как создать XCFramework, см. раздел Создание многоплатформенного бинарного пакета фреймворка .
Обновление предварительно скомпилированных библиотек от поставщиков
Если библиотека, вызвавшая ошибку сборки, является предварительно скомпилированной библиотекой от поставщика и у вас нет исходного кода, обратитесь к поставщику за обновленной версией XCFramework, поддерживающей Apple Silicon. Если обновление недоступно у поставщика, временно используйте параметр сборки EXCLUDED_ARCHS, чтобы исключить arm64 для SDK симулятора, как показано на рисунке ниже. Не исключайте arm64 для любого другого SDK.
Из Документов
Дополнительные вопросы по результатам решения:
Что произойдет, если я исключаю ARM64 для платформы «Симулятор iOS»?
Вы не сможете напрямую встраиваться в симуляторы M1. Тогда вам придется использовать Xcode с Rosetta на M1. Это взлом и немного медленнее.
Что произойдет, если я исключаю X86 для платформы «Симулятор iOS»?
Вы не сможете встраиваться в симуляторы на базе Intel. Вы также не сможете встроить симулятор с помощью Rosetta.
Что произойдет, если исключить ARM64 для платформы iOS?
Вы не сможете встроить в физические устройства. Ни архива для них. Ужасная идея!
Так что я должен исключить архитектуры?
Стремитесь к тому, чтобы ваше приложение, включая все его предварительно скомпилированные библиотеки, всегда собиралось для полного набора архитектур, определяемых значением по умолчанию параметра сборки ARCHS. Используйте параметр сборки EXCLUDED_ARCHS только для целей, в которых окончательное выпущенное приложение не использует функции цели на определенной архитектуре, например приложение для Mac, которое поддерживает устаревшую функцию только на компьютерах Mac с процессором Intel. Не изменяйте настройку сборки ARCHS для достижения того же результата.
Кроме того, в больших командах некоторые разработчики могут использовать M1, а некоторые другие — более старые MacBook на базе Intel. Вы никогда не знаете, может быть, когда-нибудь появится Macbook M5 с отличной архитектурой. Так что хорошо быть внимательным к тому, как сделать ваш проект/продукт/фреймворк совместимым для ваших собственных разработчиков и его потребителей.
У нас есть устройство iOS с Intel X86_64?
Такая вещь не
Как проверить бинарный файл?
lipo -info <path-to-binary>
В каталоге arm64 внутри пакета xcframework я вижу:
Non-fat file: /Users/mfaani/Video.xcframework/ios-arm64/Video.framework/Video is architecture: arm64
Для симов я вижу:
Architectures in the fat file: /Users/mfaani/Video.xcframework/ios-arm64_x86_64-simulator/Video.framework/Video are: x86_64 arm64
Вы можете зайти в свой Mac/Applications, щелкнуть правой кнопкой мыши; «показать содержимое пакета» для любого приложения; найти связанный двоичный файл приложения. А затем проверьте его с помощью .
Чтобы было ясно, фреймворк или приложение могут быть проверены с помощью
В чем разница между XCFramework и двоичным файлом FAT?
- Двоичный файл FAT — это просто двоичный файл с двумя (или более) архитектурами, объединенными в один двоичный файл. Он просто назван FAT, потому что он жирный. Другие названия: «мультиархитектурный двоичный файл» или универсальный двоичный файл .
- XCFramework — это просто структурированная папка, оболочка. Больше ничего. Это имеет разные папки для каждой платформы. В каждой папке есть двоичный файл. Этот двоичный файл может быть двоичным файлом FAT или не-FAT (одинарная архитектура).
Также обратите внимание, что двоичный файл FAT может быть либо фреймворком, либо двоичным файлом приложения. XCFramework — это просто фреймворк. Это никогда не само приложение.
Не раздувается ли мое приложение всеми остальными комбинациями платформ и архитектур, которые мне не нужны?
Да нет.
Для двоичного файла FAT у вас нет возможности разрезать двоичный файл.
Для XCFramework вы извлекаете только тот двоичный файл, который нужен для вашей платформы.
Если вы встраиваете устройство, вы никогда не установите двоичный файл sim.
Если вы создаете симулятор, вы никогда не установите двоичный файл приложения.
Однако при сборке симулятора вы в конечном итоге получите двоичный файл FAT, включающий обе архитектуры одной и той же платформы.
Как выглядит структура папок xcframework?
ios-arm64
- binary
ios-arm64_x86_64-simulator
- (FAT) binary
Если XCFramework создан для работы с Mac Catalyst, структура папок будет выглядеть так:
ios-arm64
- binary
ios-arm64_x86_64-simulator
- (FAT) binary
ios-x86_64-maccatalyst
- binary
Для более полного списка возможных платформ. См. XCFrameworsk: демонстрация создания и интеграции xcframeworks и их совместной работы со статическими библиотеками и пакетами Swift.
Почему мой поставщик не поддерживает симулятор ios-arm64?
Это может быть по ряду причин.
- усилия по миграции: часто просто при компиляции у них не было M1, и прошло много времени с тех пор, как они компилировали, и если они компилируют, им приходится вносить некоторые изменения. Как будто вы должны понимать, что прошли годы, когда не было необходимости в новой комбинации архитектуры и платформы. Так что это ново и не все это понимают.
- ограничение: предварительно скомпилированная библиотека зависит от другой предварительно скомпилированной библиотеки, которая не скомпилирована для arm64-sim.
- У владельца фреймворка нет машины Intel. Или человек, который разбирается в этих вещах, ушел из компании.
Какие-нибудь последние слова?
Убедитесь, что вы просмотрели ВСЕ настройки Project и Target и Pod Project и Pod Target. Если один из них исключает определенную архитектуру, вы не сможете построить для этой архитектуры.
Если вы обратите внимание на полученное сообщение об ошибке, вам будет легко перейти к цели, которая не поддерживает.
После проб и поиска различных решений, я думаю, что самый безопасный способ - добавить следующий код в конец подфайла
post_install do |pi|
pi.pods_project.targets.each do |t|
t.build_configurations.each do |bc|
bc.build_settings['ARCHS[sdk=iphonesimulator*]'] = `uname -m`
end
end
end
Таким образом, вы переопределяете только архитектуру компилятора симулятора iOS в качестве архитектуры вашего текущего процессора. По сравнению с другими, это решение также будет работать на компьютерах с Apple Silicon.
Для меня сработала следующая настройка:
Настройки сборки >> Исключенные архитектуры
добавлен "arm64" как в режим выпуска, так и в режим отладки для параметра "Any iOS Simulator SDK".
По состоянию на 19 сентября 2022 года ни один из существующих ответов не помог мне. В большинстве ответов предлагается исключить arm64 из настроек сборки, после чего выдает фатальную ошибку: файл карты модуля не найден
Что сработало для меня, так это открыть Xcode с помощью Rosseta ,
- Щелкните правой кнопкой мыши Xcode в папке приложений.
- Получить данные
- Проверить открытие с помощью Rosetta
- Откройте Xcode
- Открытый проект
- Чистая папка сборки
- Запустить проект
При открытии Xcode с помощью Россеты никаких других настроек сборки или конфигураций не требуется.
Использованная литература:
Перейдите в раздел Цели, выберите каждую цель и выполните следующие действия:
- Установите для параметра Build Active Architecture значение YES
- Добавьте исключенные архитектуры и установите для него значение arm64 (см. Приложение)
- Установите Активную схему (на панели инструментов рядом с названием проекта) на любой симулятор iOS
- Очистите папку сборки из меню продукта и выполните сборку.
Xcode версии 13.2.1 и macOS Monterey 12.0.1
Почти все сталкиваются с одной и той же проблемой со старыми проектами и модулями после перехода на новую систему чипов M1.
"в /Users//Desktop/_iOS_app/Pods/iOS/framework/(CLSInternalReport.o), сборка для симулятора iOS, но ссылка на объектный файл, созданный для iOS, файл '/Users/y/Desktop/_iOS_app/Pods/iOS/.framework/для архитектуры arm64"
Я пришел к решению, которое отлично работает.
Во-первых, всем разработчикам, которые предлагают исключить arm64 для вашего проекта, он будет работать, да, он скомпилируется, но после установки, когда вы попытаетесь открыть его, появится всплывающее окно с сообщением: «Разработчик этого приложения должен быть обновите его для работы с этой версией iOS». Это связано с тем, что согласно Apple «В iOS 11 и более поздних версиях все приложения используют 64-битную архитектуру», и если вы исключите arm64 для своего проекта, оно не откроет приложение на iOS 11 и более поздних версиях.
Поэтому вместо того, чтобы выбирать весь проект, исключались только архитектуры симулятора для arm64.
Шаги: Поверх файлов проекта выберите цель > настройка сборки > архитектура > исключенная архитектура. теперь добавьте выберите «любой SDK симулятора iOS» и присвойте ему значение arm64.
См. изображение ниже для справки.
Если у вас проблемы в Xcode 12 с симуляторами, а не с реальным устройством, да, вам нужно удалить настройки VALID_ARCHS, потому что они больше не поддерживаются. Перейдите в "настройки сборки", найдите " VALID_ARCHS " и удалите определенные пользователем свойства. Делайте это с каждой целью, которая у вас есть.
Тем не менее, вам может потребоваться добавить сценарий внизу вашего подфайла, чтобы поды компилировались с правильной архитектурой и целью развертывания:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
end
end
end
Я решаю проблему, добавляя "arm64" в "Исключенные архитектуры" как для цели проекта, так и для цели модуля.
Xcode -> Целевой проект -> Настройка сборки -> Исключенные архитектуры> "arm64"
Xcode -> Pod Target -> Настройка сборки -> Исключенные архитектуры> "arm64"
я нашел это
- Использование Rosetta (Найдите Xcode в Finder> Получить информацию> Открыть с помощью Rosetta)
-
Build Active Architecture Only
установлен вYES
для всего, как в Project, так и в Target - И включив это в
podfile
:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
end
end
end
работал у меня.
У нас были и Pods, и SPM, и они не работали ни с одной комбинацией других ответов. Все мои коллеги используют Intel MacBook, но мы не тестировали эту конфигурацию на их компьютерах.
После обновления до Xcode 12 я все еще мог собирать для реального устройства, но не для симулятора. Сборка Podfile работала только на реальном устройстве.
Я удалил VALID_ARCHS в разделе "Настройки сборки"> "Пользовательские", и это сработало! Некоторое время ломал голову, пока не нашел это.
1. добавить
arm64
к
Build settings
->
Exclude Architecture
во всех целях.
2. закройте Xcode и выполните следующие действия, чтобы открыть
- Щелкните правой кнопкой мыши Xcode в Finder
- Получить данные
- Открыть с помощью Rosetta
У меня возникли проблемы со сборкой фреймворков из командной строки. Моя структура зависит от других платформ, в которых отсутствовала поддержка симуляторов на базе ARM. В итоге я исключил поддержку симуляторов на базе ARM, пока не обновлю свои зависимости.
Мне нужен был
EXCLUDED_ARCHS=arm64
флаг при сборке фреймворка для симуляторов из CLI.
xcodebuild archive -project [project] -scheme [scheme] -destination "generic/platform=iOS Simulator" -archivePath "archives/[scheme]-iOS-Simulator" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES EXCLUDED_ARCHS=arm64
Начиная с Xcode 14.3, просто сделайте это. Перейдите в «Продукт» -> «Назначение» -> «Назначенные архитектуры» и выберите «Показать оба». Так что теперь вы можете увидеть симуляторы Rosetta в пункте назначения.
В новой Mac OS для решения проблемы следует запустить Rosetta в Xcode.
идти к:
Xcode -> Product -> Destination -> Destination Architectures -> Show Both
Теперь у вас будет симулятор Rosetta для всех ваших тренажеров.
Запустите свой код с помощью одного из симуляторов Rosetta, и все готово.
Думаю, я нашел ответ. Согласно примечаниям к выпуску Xcode 12 beta 6:
"Редактор параметров сборки больше не включает параметр сборки Valid Architectures (VALID_ARCHS), и его использование не рекомендуется. Вместо этого есть новый параметр сборки Excluded Architectures (EXCLUDED_ARCHS). Если проект включает VALID_ARCHS, этот параметр отображается в User-Определен раздел редактора параметров сборки. (15145028)"
Мне удалось решить эту проблему, вручную отредактировав файл проекта (я не мог понять, как удалить элемент из файла проекта с помощью Xcode) и удалив все строки, относящиеся к VALID_ARCHS. После этого я могу нормально строить для симулятора.
Перейдите в Finder -> Приложения -> Xcode -> Щелкните правой кнопкой мыши Xcode -> Выберите «Открыть с помощью rosetta».
Обновления: октябрь 2020 г.
Вы можете просто установить
arm64
только для
Debug > Simulator - iOS 14.O SDK
под исключенной архитектурой.
В вашем файле xxx.framework podspec добавьте следующую конфигурацию, чтобы избежать пакета pod, содержащего арки симулятора arm64
s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
Попробовав почти все сообщения в этой теме и прочитав форумы разработчиков Apple, я обнаружил, что у меня работает только одно решение.
Я создаю универсальный фреймворк, который используется в быстром приложении. Я не смог построить симулятор без архитектурных ошибок.
В моем проекте Framework у меня есть задача Universal Framework на этапах сборки, если это так для вас
- Добавьте следующее в свой
xcodebuild
задача внутри фазы сборки:EXCLUDED_ARCHS="arm64"
Затем вам нужно изменить следующий проект
Build Settings
:
- Удалить
VALID_ARCHS
пользовательская настройка - Набор
ONLY_ACTIVE_ARCH
кYES
***
*** Если вы разрабатываете фреймворк и у вас есть демонстрационное приложение, этот параметр должен быть включен в обоих проектах.
Я столкнулся с той же проблемой и пытался запустить приложение React Native на Mac M1. Обратите внимание, что мой Intel Mac с тем же проектом работал без этой ошибки. Что решило проблему для меня, так это заставить Xcode открываться через Rosetta.
Для этого: щелкните правой кнопкой мыши Xcode в папке «Приложения»> «Получить информацию»> «Установите флажок« Открыть с помощью Rosetta »».
Пожалуйста, не забудьте очистить папку сборки после добавления arm64 в исключенную архитектуру.