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!

ebi
fonte
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
1
possível duplicado de EXC_BAD_ACCESS, um código, iOS 7.0.x 64bit dispositivos
ignotusverum
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.
Mike Onorato
fonte
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. ;)

Kjuly
fonte
@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.

xardas
fonte
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.

samwize
fonte
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

Jayprakash Dubey
fonte
@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

AntonijoDev
fonte
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.

irs8925
fonte
+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
Jake Hall
fonte
3

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

Shauket Sheikh
fonte
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
Jano
fonte
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.

timgcarlson
fonte
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.

Anubha
fonte
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
JRV
fonte
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.

halifixo
fonte
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.

Ankish Jain
fonte
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.

simon_smiley
fonte
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.

mate
fonte
0

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

Khaled Annajar
fonte