После обновления до 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» на «Нет», а также добавить «i386» в «Valid Architectures», но, к сожалению, ничего не вышло. Спасибо за любые предложения!

169
ebi 11 Мар 2014 в 18:35

18 ответов

Лучший ответ

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

  1. Удалите проект «Pods» из рабочей области на левой панели Xcode и закройте Xcode.
  2. Запустите «pod install» из командной строки, чтобы воссоздать проект «Pods».
  3. Повторно откройте Xcode и убедитесь, что для параметра «Только сборка активной архитектуры» установлено значение «Нет» в настройках сборки как для проекта «Модули», так и для вашего собственного проекта.
  4. Очистить и построить.
102
Mike Onorato 11 Мар 2014 в 20:42

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


РЕДАКТИРОВАТЬ:

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

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

  • ARMv8 / ARM64: iPhone 6, iPhone 5s, iPad Air, Retina iPad Mini
  • ARMv7: 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" работает? Поскольку устройство все еще может запускать двоичный файл, созданный для всех добавленных вами архитектур (передать сборку), но потеряет некоторую производительность. Это просто быстрое решение, но не лучшее.


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

184
Kjuly 6 Апр 2015 в 12:12

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

29
xardas 15 Мар 2014 в 20:18

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

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

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

27
samwize 11 Апр 2014 в 03:17

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

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

12
Jayprakash Dubey 14 Янв 2015 в 11:23

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

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

10
AntonijoDev 11 Мар 2014 в 14:41

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

5
irs8925 10 Июл 2014 в 08:35

Чтобы избежать сброса only_active_arch "pod install" для отладки при каждом запуске, вы можете добавить следующее в свой файл 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
5
Jake Hall 29 Авг 2014 в 16:49

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

3
Shauket Sheikh 29 Окт 2014 в 17:49

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

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

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

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

post_install do | installer |
    installer.project.build_configurations.each do |config|
        config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end
end
3
Jano 12 Ноя 2014 в 14:28

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

3
timgcarlson 10 Дек 2015 в 00:07

Я столкнулся с той же проблемой при запуске своего приложения на iPad с использованием xcode 5.1. Это было решено путем удаления armv7s из «допустимых архитектур» и установки значения «строить только активные архитектуры» на «Нет». Оба эти поля можно найти в вашем приложении-> цели-> настройки сборки-> архитектуры.

2
Anubha 28 Мар 2014 в 10:06

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

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

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

Обновить

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

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -arch i386 PLATFORM_NAME=iphonesimulator build
2
JRV 17 Фев 2016 в 17:50

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

0
halifix 19 Мар 2014 в 23:02

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

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

0
Ankish Jain 2 Июн 2014 в 05:51

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

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

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

enter image description here

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

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

enter image description here

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

0
simon_smiley 18 Май 2015 в 13:53

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

enter image description here

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

0
matt 12 Ноя 2016 в 02:39

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

0
Khaled Annajar 22 Дек 2016 в 13:53