Xcode 12 Apple M1 arm64 - Возможная ошибка: «неправильная архитектура»
Мой текущий проект выдает ошибки IBDesignable при использовании Interface Builder на машине на базе Apple Silicon. Я попытался исключить архитектуру arm64 для отладки, а также некоторые другие подсказки, которые я нашел в Интернете, но безуспешно.
проект отлично работает на симуляторах и на реальных устройствах, но построитель интерфейсов, похоже, не может правильно нарисовать эти IB Designables на системах на базе arm64 ... странно.
надеюсь, кто-то знает, какой флаг установить, чтобы исправить эту ошибку ..bc это сводит меня с ума: /
Ошибка:
"dlopen(MYAPP.app, 1): no suitable image found. Did find MYAPP.app: mach-o, but wrong architecture"
Надеюсь, вы, ребята, можете мне помочь, я знаю, что это часть проблем ранних последователей, но это должно быть каким-то образом решено !?
5 ответов
То же самое. Xcode 12.4, macOS 11.2 на M1 MacBook Air.
Обычно InterfaceBuilder пытается найти двоичные файлы из:
~/Library/Developer/Xcode/DerivedData/[...]/Build/Products/${Configuration}-iphonesimulator
но на M1 Mac InterfaceBuilder можно найти здесь:
~/Library/Developer/Xcode/DerivedData/[...]/Build/Products/${Configuration}-iphoneos
Я думаю, это ошибка Xcode ...
Как Вам известно,
${Configuration}-iphoneos
для устройств iOS. не для симулятора. а InterfaceBuilder действительно нужны артефакты для iOS Simulator.
Вот простые и не очень хорошие решения:
- Сборка для симулятора iOS
-
cd ~/Library/Developer/Xcode/DerivedData/[...]/Build/Products/
-
cp -r ${Configuration}-iphonesimulator ${Configuration}-iphoneos
- перезапустить Xcode
наконец-то я смог исправить
@IBDesignable
превью. но я не мог очень рекомендовать это решение ...
(Дополнительное ниже)
Я написал обходной сценарий оболочки: https://gist.github.com/dnpp73/4f9c12ad96909355a39b99e22e42eb14
Вот как я исправил это в своем проекте.
Все мои представления IBDesignable находятся в своей собственной структуре, которая не имеет других зависимостей (у меня уже была эта настройка)
В настройках сборки измените «Только сборка активной архитектуры» на «Нет» для отладочных сборок.
В настройках сборки измените «Поддерживаемые платформы», чтобы включить «macxos», а также значения по умолчанию для iOS для отладочных сборок.
К сожалению, хотя у меня нет никаких зависимостей от фреймворка с моими представлениями IBDesignable, я получал некоторые ошибки, связанные с зависимостями моего приложения, которые я исправил с помощью этого ответа: /questions/27662593/obyavit-arhitekturu-v-podfile/27662602#27662602 который отключил "ONLY_ACTIVE_ARCH" для моих зависимостей от cocoapod.
В раскадровке вам нужно будет запустить перестройку, выбрав Редактор-> Обновить все представления.
Та же проблема в XCode 14.3
Вот как я решил id:
- Установите целевую архитектуру
arm64
- Установите целевую архитектуру исключения
x86_64
- Очистить папку сборки (Продукт -> Очистить папку сборки)
- Перезапустить XCode
Обновлять
XCode 13 решил проблему на M1. Нет необходимости в дополнительной настройке в настройках сборки.
Это решение было очень хакерским и могло также мешать работоспособности проекта. Я предлагаю всем, кто пробовал это решение, как можно скорее отменить эти изменения, прежде чем они будут забыты.
У меня была эта проблема на Xcode 14.0 с моим M1 Mac. В моем коде были некоторые IBDesignables для UIView, чтобы выставить CornerRadius, borderWidth и borderColor как расширение UIView. Xcode выдавал предупреждения, описанные в этом потоке, а также предупреждение о нестабильности для рендеринга раскадровки.
Развертывание моего приложения было равно 15.0, но после прочтения вышеприведенного комментария о том, что для решения проблемы должно быть значение deployTarget не ниже 13.0, я обнаружил, что это мои кокоаподы могут иметь более низкое значение deployTarget!
Таким образом, добавив нижеприведенное в Podfile, чтобы заставить все мои Cocoapod иметь цель развертывания как минимум iOS 13, все эти предупреждения раскадровки об IBDesignables и общей нестабильности рендеринга и несоответствии архитектуры исчезли! (Я также показываю принудительное ONLY_ACTIVE_ARCH на NO, но у меня уже есть это - так что, хотя это не было исправлением, само по себе, я думаю, вам оно тоже понадобится).
Не забудьте затем удалить каталог Pods (и DerivedData) и выполнить установку модуля.
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
end
end
end