Xcode 5.1 - Nenhuma arquitetura para compilar (ONLY_ACTIVE_ARCH = YES, arco ativo = x86_64, VALID_ARCHS = i386)


168

Após a atualização para o Xcode 5.1, não consigo mais criar meu projeto para o simulador de 64 bits, recebendo este erro:

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

Estas são minhas configurações de criação de destino:

Configurações de criação de destino do Xcode

Tentei mudar "Build Active Architecture" para No, além de adicionar "i386" às "Valid Architectures", mas infelizmente não funcionaram. Obrigado por todas as sugestões!


4
Eu já vi algumas perguntas semelhantes após a atualização mais recente do iOS 7.1 e a solução foi deixar de fora o arm64. É certo que isso não resolve seu problema específico, mas há razões para acreditar que a Apple estragou algo.
— dandan78

Obrigado, isso faz sentido, acho que não vou usar 64 bits até a Apple lançar uma atualização para isso.
— ebi


Mesmo problema no Xcode 6.1, tentei todas as soluções fornecidas abaixo, elas não estão funcionando. Eu tenho CocoaPods no meu projeto. Qualquer solução sobre como corrigi-lo no Xcode 6.1
— Vinayaka Karjigi

Respostas:


102

Recebi a mesma mensagem de erro após a atualização para o XCode 5.1. Você está usando CocoaPods? Nesse caso, isso deve resolver o problema:

  1. Exclua o projeto "Pods" da área de trabalho no painel esquerdo do Xcode e feche o Xcode.
  2. Execute "pod install" na linha de comando para recriar o projeto "Pods".
  3. Abra novamente o Xcode e verifique se "Build Active Architecture Only" está definido como "No" nas configurações de compilação do projeto "Pods" e do seu próprio projeto.
  4. Limpe e construa.

1
Corrigido removendo arm64 das arquiteturas dos Pods.
— ebi

Resolvi o mesmo problema em um projeto Cordova / PhoneGap para mim também. Graças
— Rocco

182

O que você precisa fazer é apenas definir ONLY_ACTIVE_ARCHcomo NO(pelo menos funciona para mim). Abaixo está uma captura de tela:


EDITAR:

Tanto quanto eu sei ( por favor, indique se há algo errado, obrigado ), se você definir ONLY_ACTIVE_ARCHcomo YES, significa que o Xcode construirá apenas para a arquitetura ativa (que se refere ao dispositivo que está ativo no Xcode atualmente). Parece que a configuração padrão do Xcode está definida como Debug YES, para que ele não crie binários para outras arquiteturas quando você desejar criar apenas um dispositivo especial conectado ao seu Mac.

O motivo da falha na criação pode ser que, o projeto não suporta a arquitetura do dispositivo que você conectou. Portanto, a melhor solução é adicionar a arquitetura certa para o seu dispositivo. Abaixo está uma lista de arquiteturas e os dispositivos que suportam:

  • 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

Então, por que "definir o ONLY_ACTIVE_ARCHcomo NO" funciona? Como o dispositivo ainda pode executar o binário que foi criado para todas as arquiteturas que você adicionou (passe na compilação), mas perderá algum desempenho. Esta é apenas uma solução rápida, mas não é a melhor.


Nota : Quanto mais arquiteturas você adicionar, maior será o binário. Portanto, é bom escolher as arquiteturas certas para o seu projeto. ;)


@EmilMarashliev apenas o destino da compilação. Você o verá quando selecionar seu projeto raiz (com ícone azul).
— 22414 Kjuly

@Praveen não tenho certeza, parece que esta opção foi alterada no Xcode 5.1.
— Kjuly

Esta é a resposta correta, você me salvou a vida inteira aqui, obrigado :)
— Bikramjit Singh

2
Esta é a resposta mais clara e completa. Definitivamente deve ser o aprovado !!! Obrigado
— MeV

1
isso foi muito útil. a resposta seria completa, se você puder adicionar como baixar a arquitetura necessária.
— Kalpesh Popat 6/03/2017

29

Adicione arm64ao alvo valid architectures. Parece que também adiciona x86-64arquitetura às arquiteturas válidas do simulador.


27

Se você estiver usando o CocoaPods, o problema mais provável é que o seu projeto de Pods, Configurações de Compilação para Construir Somente Arquitetura Ativa, esteja definido como Sim para Depuração.

A solução é simples. Altere para Não .

Da mesma forma, mude para Não para o seu projeto de aplicativo.


12

Eu tive um problema semelhante. Resolva isso alterando "Arquitetura" para " $ (ARCHS_STANDARD_32_BIT) " em Configurações de compilação para o projeto.

Agora, você deve selecionar as arquiteturas padrão (armv7, arm64) - $ (ARCHS_STANDARD), pois a Apple recomenda que os aplicativos sejam construídos na arquitetura de 64 bits. Clique em: documento Apple


@JayprakashDubey, e quanto a isso? $(ARCHS_STANDARD_INCLUDING_64_BIT)?
— Hemang

Devo usar $(ARCHS_STANDARD_32_BIT)ou $(ARCHS_STANDARD_INCLUDING_64_BIT)?
— Hemang

@hagile: Vá com $ (ARCHS_STANDARD_INCLUDING_64_BIT)
— Jayprakash Dubey 4/15

10

Adicionar: arquiteturas: $ (ARCHS_STANDARD_INCLUDING_64_BIT)

Arquiteturas válidas: arm64 armv7 armv7s


Hmm, você trie para redefinir tudo, conteúdo do simulador, simulador, projeto limpo, restart xCode e Mac, porque eu tenho xCode5.1 e meu simulador está funcionando bem
— AntonijoDev

Você está executando seu aplicativo / simulador usando o iPhone de 4 polegadas e 64 bits?
— ebi

5

Caso alguém ainda encontre o problema, apesar de seguir o acima, verifique se o simulador que você está executando também é o suportado. Eu tinha o meu especificado para arm7 e arm7s, mas estava tentando executar o aplicativo em um simulador de 64 bits.


+1 Sim, este é o único! Depois de checar, checar novamente e checar triplamente se tudo ainda está ok, esse era o problema!
— JOM

1
Uau. Preciso realmente conectar o dispositivo para o qual quero criar, a fim de obter o código de destino adequado compilado? Eu apenas vomitei um pouco na minha boca. Sua postagem resolveu esse problema para mim, obrigado.

5

Para evitar que o "pod install" redefina only_active_arch para depuração sempre que for executado, você pode adicionar o seguinte ao seu arquivo 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

Basta adicionar arm64 na arquitetura válida. Espero que funcione para você.


3

Meu problema era que o projeto Pods estava direcionado para o OS X, apesar do meu Podfile platform :ios. Estou usando cocoapods 0.35.0.rc2.

Para corrigi-lo, selecione o projeto Pods no navegador do projeto e verifique se o nó Pods PROJECT (lembre-se, não o destino Pods) está direcionado para iOS. Ou seja, as configurações de construção das arquiteturas devem ser:

  • Arquiteturas: $(ARCHS_STANDARD)
  • SDK base: iOS 8.1
  • Plataformas suportadas: iOS
  • Arquiteturas válidas: $(ARCHS_STANDARD)

Também queria criar todas as arquiteturas, então adicionei o seguinte ao Podfile:

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

3

Eu tive que adicionar o seguinte i386e x86_64para Valid Architectures. Estou executando o Xcode 7.2 e segmentando o iOS 8 ou superior. Eu já tinha armv7, armv7se arm64lá dentro, e isso estava funcionando no Xcode 6.4.


2

Eu enfrentei o mesmo problema ao executar meu aplicativo no iPad usando o xcode 5.1. Foi resolvido removendo armv7s de 'arquiteturas válidas' e definindo o valor 'construir somente arquiteturas ativas' como Não. Ambos os campos podem ser encontrados em seu aplicativo-> destinos-> configurações de construção-> arquiteturas.


2

Cheguei a essa pergunta devido a um problema com a construção da linha de comando para o simulador no Xcode 7.2. Caso alguém chegue aqui com o mesmo problema, compartilharei a solução que encontrei:

Aparentemente, existe um bug no Xcode 7.2 que causa xcodebuildfalha ao tentar criar para o simulador. A solução é especificar a opção "-destination", por exemplo:

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

Atualizar

O comando de exemplo acima criará um binário, incluindo os gráficos apenas para o iPhone 6. Se o binário for executado em outros simuladores, os gráficos do iPhone 6 serão redimensionados para a plataforma. Uma solução melhor que contém todos os gráficos para todas as plataformas é especificar o parâmetro PLATFORM_NAME=iphonesimulator, por exemplo:

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

0

Tente remover todas as arquiteturas anteriores (por exemplo, remova a configuração ARCHS_STANDARD) ao mesmo tempo em que adiciona o i386 às arquiteturas. Isso deve alterar a arquitetura ativa para i386. Encontrei um problema semelhante ao tentar criar para o armv7 por padrão, mas ele continuou tentando criar para o arm64. Alterei ARCHS_STANDARD para ARCHS_STANDARD_32_BIT e isso alterou a arquitetura ativa escolhida.


0

Na acrhiecture - às vezes para suportar 6.0 e 7.0, excluímos arm64

Em arquiteturas -> acrchitecture - selecione a arquitetura padrão arm64 armv7 armv7s. Logo abaixo em Acrchitecture Valid, o usuário arm64 armv7 armv7s está incluído. Isso funcionou para mim.


0

Resolvi esse problema usando a resposta de @ Kjuly e a linha específica:

"O motivo da falha na criação pode ser que, o projeto não suporta a arquitetura do dispositivo que você conectou."

Com o Xcode carregado, ele define automaticamente meu aplicativo para iPad como iPad Air

insira a descrição da imagem aqui

Isso causou o erro de análise de dependência.

A alteração do tipo de dispositivo resolveu imediatamente o problema:

insira a descrição da imagem aqui

Não sei por que isso funciona, mas essa é uma resposta muito rápida, que me salvou de muitas brincadeiras em segundo plano e instantaneamente colocou o aplicativo trabalhando para testar. Eu nunca teria pensado que isso poderia ser uma coisa e algo tão simples o consertaria, mas, neste caso, o fez.


0

Eu achei que era necessário digitar os nomes da arquitetura manualmente:

insira a descrição da imagem aqui

Não sei por que isso foi necessário, ou seja, por que esses valores não foram herdados do próprio Xcode. Mas assim que fiz isso, o problema desapareceu.


0

Em Arquiteturas válidas: selecione cada entrada (liberação, depuração) e crie e pressione backspace. Deveria funcionar

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.