Xcode 5.1 - Нет архитектур для компиляции для (ONLY_ACTIVE_ARCH = YES, active arch = x86_64, VALID_ARCHS = i386)

После обновления до Xcode 5.1 я больше не могу строить свой проект для 64-битного симулятора, получив эту ошибку:

 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).

Это настройки моей целевой сборки:

Xcode target build settings

Я попытался изменить "Build Active Architecture" на No, а также добавить "i386" в "Valid Architectures", к сожалению, не работал. Спасибо за любые предложения!

Ответ 1

У меня было такое же сообщение об ошибке после обновления до XCode 5.1. Вы используете CocoaPods? Если это так, это должно устранить проблему:

  • Удалите проект "Pods" из рабочей области в левой панели Xcode и закройте Xcode.
  • Запустите "pod install" из командной строки, чтобы воссоздать проект "Pods" .
  • Повторно откройте Xcode и убедитесь, что в настройках сборки как проекта "Pods" , так и вашего собственного проекта установлено значение "Build Active Architecture Only" "Нет".
  • Очистить и построить.

Ответ 2

Что вам нужно сделать, просто установите ONLY_ACTIVE_ARCH на NO (по крайней мере, работает для меня). Ниже приведен снимок экрана:

e918pG7.png


EDIT:

Насколько я знаю (укажите, если что-то не так, спасибо), если вы установите ONLY_ACTIVE_ARCH в YES, это означает, что Xcode будет только строить для активной архитектуры (что относится к устройству, которое активен в Xcode в настоящее время). Похоже, что по умолчанию для Xcode установлено значение Отладка до YES, поэтому он не будет создавать двоичные файлы для других архитектур, если вы хотите создать только специальное устройство, подключенное к вашему Mac.

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

  • ARMv8/ARM64: iPhone 6, iPhone 5s, iPad Air, Retina iPad Mini
  • ARMv7s: iPhone 5, iPhone 5c, iPad 4
  • ARMv7: iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3, iPad Mini
  • ARMv6: iPhone, iPhone 3G, iPod 1G/2G

Итак, почему "установить ONLY_ACTIVE_ARCH в NO"? Поскольку устройство все еще может запускать двоичный файл, который был создан для всех добавленных вами архитектур (передайте сборку), но потеряет некоторую производительность. Это просто быстрое решение, но не лучшее.


Примечание. Чем больше добавленных вами архитектур добавлено, тем больше будет генерироваться двоичный файл. Поэтому хорошо выбрать правильные архитектуры для вашего проекта.;)

Ответ 3

Добавьте arm64 к цели valid architectures. Похоже, он добавляет архитектуру x86-64 к симуляторам, допустимым архитектурам.

Ответ 4

Если вы используете CocoaPods, наиболее вероятная проблема связана с тем, что для параметра "Настройка сборки" для "Подстроки" для Только для создания активной архитектуры установлено значение Да для отладки.

Решение прост. Измените его на Нет.

Аналогично, измените на Нет для вашего проекта приложения.

Ответ 5

У меня была аналогичная проблема. Чтобы решить эту проблему, изменив "Архитектура" на $(ARCHS_STANDARD_32_BIT) "в настройках сборки для проекта.

Теперь вам нужно выбрать Стандартные архитектуры (armv7, arm64) - $(ARCHS_STANDARD), поскольку Apple рекомендует создавать приложения на 64-битной архитектуре. Нажмите: документ Apple

Ответ 6

Добавить: Архитектуры: $(ARCHS_STANDARD_INCLUDING_64_BIT)

Допустимые архитектуры: arm64 armv7 armv7s

Ответ 7

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

Ответ 8

Чтобы избежать установки "pod install" reset only_active_arch для отладки при каждом запуске, вы можете добавить в свой файл pod файл

# Append to your Podfile
post_install do |installer_representation|
    installer_representation.project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
        end
    end
end

Ответ 9

Просто добавьте arm64 в действительную архитектуру. Надеемся, что это сработает для вас.

Ответ 10

Моя проблема заключалась в том, что проект Pods был нацелен на OS X, несмотря на то, что мой подфайл имел platform :ios. Я использую cocoapods 0.35.0.rc2.

Чтобы исправить это, выберите проект Pods в навигаторе проекта и убедитесь, что объект Pods PROJECT node (обратите внимание, а не цель Pods) предназначен для iOS. То есть, настройки построения архитектуры должны быть:

  • Архитектуры: $(ARCHS_STANDARD)
  • Базовый SDK: iOS 8.1
  • Поддерживаемые платформы: iOS
  • Допустимые архитектуры: $(ARCHS_STANDARD)

Я также хотел построить все архитектуры, поэтому добавил в подфайл следующее:

post_install do | installer |
    installer.project.build_configurations.each do |config|
        config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end
end

Ответ 11

Мне пришлось добавить следующие i386 и x86_64 в Valid Architectures. Я запускаю Xcode 7.2 и настраиваю iOS 8+. У меня уже были armv7, armv7s и arm64 там, и он работал в Xcode 6.4.

Ответ 12

Я пришел к этому вопросу из-за проблемы с построением командной строки для симулятора в Xcode 7.2. Если кто-то еще попадет сюда с той же проблемой, я поделюсь найденным решением:

По-видимому, есть ошибка в Xcode 7.2, которая приводит к сбою xcodebuild при попытке построить для симулятора. Решение состоит в том, чтобы указать опцию "-destination", например:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6' build

Обновление

В приведенной выше примерной команде будет создан бинарный файл, включающий только графику для iPhone 6. Если двоичный файл запускается на других симуляторах, графика iPhone 6 масштабируется до платформы. A лучшее обходное решение, которое содержит всю графику для всех платформ, - это указать параметр PLATFORM_NAME=iphonesimulator, например:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -arch i386 PLATFORM_NAME=iphonesimulator build

Ответ 13

У меня возникла такая же проблема при запуске моего приложения на iPad с помощью xcode 5.1. Он был устранен, удалив armv7 из "допустимых архитектур" и установив значение "строить только активные архитектуры". Оба эти поля можно найти в ваших конфигурациях app- > target- > build- > architecture.

Ответ 14

Попробуйте удалить все предыдущие архитектуры (т.е. удалить параметр ARCHS_STANDARD) одновременно с добавлением i386 в Архитектуры. Это должно изменить активную архитектуру на i386. Я столкнулся с аналогичной проблемой, когда пытался создать для armv7 по умолчанию, но продолжал пытаться построить для arm64. Я изменил ARCHS_STANDARD на ARCHS_STANDARD_32_BIT, и это изменило выбранную активную архитектуру.

Ответ 15

В acrhiecture - иногда для поддержки 6.0 и 7.0, мы исключаем arm64

В архитектуре → acrchitecture - выберите стандартную архитектуру arm64 armv7 armv7s.  Только ниже в Действительной acrchitecture включите пользователя arm64 armv7 armv7s. Это сработало для меня.

Ответ 16

Я решил эту проблему, используя ответ @Kjuly и конкретную строку:

"Причина, по которой не удалось построить, может заключаться в том, что проект не поддерживает архитектуру подключенного устройства".

При загрузке Xcode он автоматически устанавливает iPad-приложение для iPad Air

enter image description here

Это вызвало ошибку анализа зависимостей.

Изменение типа устройства сразу же решило проблему:

enter image description here

Я не знаю, почему это работает, но это очень быстрый ответ, который спас меня много в фоновом режиме и мгновенно получил приложение для тестирования. Я бы никогда не подумал, что это может быть что-то, и что-то настолько простое исправит, но в этом случае это произошло.

Ответ 17

Я обнаружил, что нужно вручную вводить имена архитектуры:

введите описание изображения здесь

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

Ответ 18

В допустимых архитектурах: выберите каждую запись (отпустите, отлаживайте) и создайте и нажмите backspace. Он должен работать