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.

Вот простые и не очень хорошие решения:

  1. Сборка для симулятора iOS
  2. cd ~/Library/Developer/Xcode/DerivedData/[...]/Build/Products/
  3. cp -r ${Configuration}-iphonesimulator ${Configuration}-iphoneos
  4. перезапустить 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:

  1. Установите целевую архитектуруarm64
  2. Установите целевую архитектуру исключенияx86_64
  3. Очистить папку сборки (Продукт -> Очистить папку сборки)
  4. Перезапустить 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
Другие вопросы по тегам