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


168

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

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

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

Настройки сборки цели XCode

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


4
Я видел довольно много похожих вопросов после последнего обновления iOS 7.1, и решением было исключить arm64. Правда, это не решает вашу конкретную проблему, но есть основания полагать, что Apple что-то испортила.
dandan78

Спасибо, это имеет смысл, я думаю, я не буду использовать 64-битную версию, пока Apple не выпустит обновление для этого.
Эби


Та же проблема на Xcode 6.1, перепробовал все решения, приведенные ниже, они не работают. У меня есть CocoaPods в моем проекте. Любое решение о том, как это исправить на Xcode 6.1
Vinayaka Karjigi

Ответы:


102

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

  1. Удалите проект «Pods» из рабочей области в левой панели Xcode и закройте Xcode.
  2. Запустите «pod install» из командной строки, чтобы воссоздать проект «Pods».
  3. Снова откройте Xcode и убедитесь, что «Build Active Architecture Only» имеет значение «No» в настройках сборки проекта «Pods» и вашего собственного проекта.
  4. Очистить и построить.

1
Исправлено путем удаления arm64 из архитектуры Pods.
ebi

Решил ту же проблему в проекте Cordova / PhoneGap для меня тоже. Спасибо
Рокко

182

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


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

Насколько я знаю ( пожалуйста , укажите это, если есть что - то не так, спасибо ), если вы установите ONLY_ACTIVE_ARCHна YES, это означает , что Xcode будет строить только для активной архитектуры (которая относится к устройству , которое входит в Xcode в настоящее время). Кажется, для Xcode по умолчанию установлено значение Debug 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» работает? Поскольку устройство все еще может запускать двоичный файл, созданный для всех архитектур, которые вы добавили (пропустите сборку), но он потеряет некоторую производительность. Это просто быстрое решение, но не лучшее.


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


@EmilMarashliev просто цель сборки. Вы увидите его при выборе корневого проекта (с синим значком).
Кюли

@Praveen не уверен, кажется, эта опция изменилась в Xcode 5.1.
Кюли

Это правильный ответ, вы спасли мне всю жизнь здесь, спасибо :)
Бикрамджит Сингх

2
Это самый понятный и полный ответ. Должен определенно быть одобренным !!! Спасибо
МэВ

1
это было очень полезно. Ответ будет полным, если вы можете добавить, как загрузить необходимую архитектуру.
Калпеш Попат

29

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


27

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

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

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


12

У меня была похожая проблема. Получил решение путем изменения «Архитектура» на « $ (ARCHS_STANDARD_32_BIT) » в настройках сборки для проекта.

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


@JayprakashDubey, что по этому поводу? $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang

Я должен использовать $(ARCHS_STANDARD_32_BIT)или $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang

@hagile: идти с $ (ARCHS_STANDARD_INCLUDING_64_BIT)
Джайпракаш Дубей

10

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

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


Хм, вы пытались сбросить все, содержимое симулятора, симулятор, очистить проект, перезапустить xCode и Mac, потому что у меня есть xCode5.1, и мой симулятор работает хорошо
AntonijoDev

Вы используете приложение / симулятор, используя iPhone 4-дюймовый 64-битный?
Эби

5

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


+1 Да, это тот! После проверки и повторной проверки и тройной проверки, что все по-прежнему в порядке, это была проблема!
JOM

1
Вот это да. Мне нужно подключить устройство, для которого я хочу построить, чтобы скомпилировать нужный целевой код? Я просто немного рванул рот. Ваш пост решил эту проблему для меня, спасибо.

5

Чтобы избежать "pod install" сбрасывать 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

3

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


3

Моя проблема заключалась в том, что проект 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

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


2

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


2

Я пришел к этому вопросу из-за проблемы со сборкой командной строки для симулятора в 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 масштабируется до платформы. Лучше обходной путь , который содержит все графики для всех платформ , чтобы указать параметр PLATFORM_NAME=iphonesimulator, например:

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

0

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


0

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

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


0

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

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

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

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

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

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

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

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


0

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

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

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.