Xcode 4: Falha na compilação, sem problemas

90

O aplicativo funciona bem no simulador, constrói e executa.

Quando eu conecto meu dispositivo (iPhone 3GS executando iOS 4.3) e viso o iPhone, o resultado é "Falha na construção" com "Sem problemas".

Olhando para a janela de resultados de construção, tudo está verde, tem uma marca de seleção, incluindo o aviso de falha de construção .

Expandir as transcrições não mostra erros.

Não posso excluir a possibilidade de um erro de assinatura ou provisionamento, mas eles me deram esses erros, eu os resolvi e agora não está me dando nenhum erro ou problema, apenas "Falha na compilação; sem problemas"

  • De que forma a construção pode falhar sem problemas?
  • Existe uma maneira de observar a saída da compilação para ver se encontro o motivo da falha sem problemas?
  • Existe saída de compilação produzida além da lista de problemas?
  • Não vejo na janela de compilação onde ele tenta carregar o aplicativo no meu dispositivo - essa saída está em outro lugar?
Adam Davis
fonte
Isso está acontecendo comigo agora! Tão frustrante!
tallen11
1
Acho que stackoverflow.com/a/28064945/1709587 geralmente mostrará algum tipo de mensagem de erro; é muito mais útil do que as várias suposições incluídas nas outras respostas e deve ser o ponto de partida para qualquer pessoa que esteja tentando depurar essa situação. Você aceitaria colocá-lo no topo da página?
Mark Amery

Respostas:

76

Recebo 'Build Failed' sem erros no navegador de problemas (apenas avisos). No entanto, o navegador de relatórios exibiu os erros corretamente.

Mercurial
fonte
4
Ótimo, isso mostrou meus erros. Agora posso parar de perder meu tempo e realmente resolver o erro :)
Daniel Ryan
Salvei meu dia !! Obrigado
DZenBot
Eu tive que limpar DerivedData + desativar BitCode (apenas no caso).
DevAndArtist 01 de
33

Você está usando "sublinhado" e "espaço", etc. para o identificador do pacote?

Você está usando .m em vez de .h em uma de suas importações? #import "Photo.h"

user674180
fonte
1
Não, não estou usando espaço ou sublinhado no meu ID de pacote.
Adam Davis
2
Obrigado! Para mim, foi sublinhado no identificador de pacote.
cocoapriest
Obrigado! Meu idetificador de pacote estava em branco por algum motivo.
tallen11
2
Obrigado. Depois de remover o sublinhado, meu projeto compilou muito bem. Estou sentindo uma estranha combinação de raiva cegante, alívio e gratidão. COMO PODERIA SER TÃO TOLO DE USAR UM UNDERSCORE NO NOME DO PROJETO?!?
Tina D.
1
UAU! Eu também tive esse problema. Um sublinhado. Alterado para traço e as coisas estão bem. Isso é absolutamente ABSURDO APPLE! Eu amo iOS. Eu desprezo o processo complicado que a Apple usa para colocar seu aplicativo em um dispositivo para teste. De qualquer forma, obrigado por essa correção!
DA.
21

A primeira coisa que tentarei é limpar tudo (menu Produto / Limpar) e compilar novamente. Você já deve ter tentado.

Você encontrará (e poderá observar durante a construção) a saída completa da construção no Log Navigator. Esse é o ícone mais à direita dos pequenos ícones logo abaixo dos botões Executar e Construir.

Os arquivos de log de construção (e depuração) são encontrados no diretório / Users / you / Library / Developer / XCode / DerviedData / YourProject-abcdefg / Logs / Build (e ../Debug respectivamente).

Não acho que haja saída para a instalação do seu aplicativo no dispositivo.

Codo
fonte
Sim, limpar não ajuda. Tenho usado e examinado a saída do build no navegador de log e o log de sessão relacionado. Os arquivos de log que você aponta parecem ser binários, então parece que o único acesso que tenho a eles é por meio do navegador de log e do log de sessão.
Adam Davis
Quanto ao Log Navigator, no meu caso tinha um log que estava no futuro (pois mudei a data no computador para 1 dia antes para fazer alguns testes). Parece que o xcode usa o registro mais recente (por data de construção). Para corrigir isso (no xcode 5), apaguei a data derivada do projeto e reiniciei o xcode, para que os logs futuros desapareçam e o Issue Navigator comece a mostrar os avisos e erros corretos.
alex-i
19

Existe um espaço no nome do produto de seu destino?

Eu sei que nas versões anteriores do Xcode isso não era problema, mas parece que eles quebraram algo no Xcode 4, então ele não funciona mais (eu suspeito que tenha algo a ver com o absurdo do caminho DerivedData). Você pode adicionar um espaço ao nome do seu aplicativo conforme ele aparece no Launchpad do seu iDevice configurando a CFBundleDisplayNamechave em Info.plistpara algo diferente de ${PRODUCT_NAME}.

damian
fonte
Não, o nome do aplicativo é uma palavra, sem caracteres especiais, espaços ou qualquer outra coisa.
Adam Davis
Isso fez tudo para mim. Cara, a apple encontra novas maneiras de tornar mais difícil para o desenvolvedor mudar para sua plataforma. Erro de sopro da mente. !!
CF_Maintainer
Você também não pode ter um sublinhado no nome do produto
afrederick
13

Em uma das listas de e-mail locais do Cocoa Heads, fui encorajado a tentar um pequeno projeto de amostra padrão - algo que deveria ter feito no início para garantir que meu provisionamento e assinatura funcionassem. Ele foi construído e executado no meu dispositivo sem problemas, então todos os sinais apontam para um problema com meu código ou projeto.

Vou jogar coisas do projeto existente no novo projeto de amostra e, se ele falhar de maneira semelhante, devo ser capaz de restringir o problema a uma região de interesse menor.


Eu adicionei a principal funcionalidade do aplicativo em um novo projeto e está funcionando bem. A única coisa que fiz de maneira diferente desta vez foi não configurar um binário universal (apenas iPhone agora) e desligar tudo, exceto a orientação retrato. Pelo que eu posso dizer, tudo o mais é o mesmo, embora se eu decidir examinar isso mais tarde, irei comparar os arquivos do projeto e ver o que mais pode ser diferente.

Então, a solução para mim foi começar um novo projeto, portar todas as funcionalidades do projeto antigo para o novo.

Pode ser que recriar o alvo, como Paul sugere em outra resposta, também consertaria, mas com um projeto tão simples, reiniciar do zero foi fácil para mim.

Adam Davis
fonte
Eu tive esse problema também. Eu tinha criado um novo projeto Xcode4 antes de configurar meu certificado / perfil de provisionamento e iria ocorrer um erro sem problemas. Depois que eles foram configurados e reiniciei o Xcode, fui capaz de iniciar um novo projeto e executar sem problemas. (Não ajuda muito com um projeto existente, eu sei.)
zekel
@zekel Interessante! Também coloquei o projeto em execução no simulador, antes de passar pelo processo de obtenção dos certificados e do provisionamento. Imagino que as pessoas que não deixaram sua provisão expirar durante a atualização não teriam esse problema então ...
Adam Davis
7

Eu tive o mesmo problema e, como alguém sugeriu, isso tinha a ver com o identificador do pacote. Eu tinha mudado recentemente, como um teste, e colocado um asterisco nele. Eu consertei isso e tive que limpar o alvo, e então funcionou.

Cortis
fonte
Eu também tinha um asterisco e removê-lo resolveu meu problema. Obrigado por mencionar isso.
SteveB
Usar o identificador curinga (ou seja, com.developername. *) Foi a causa do problema para mim também. Reverter para com.developername padrão. $ {PRODUCT_NAME: rfc1034identifier} resolveu o problema. Atualmente estou executando o Xcode 4.0.2
GnarlyDog
7

Isso aconteceu comigo depois de excluir um alvo não utilizado. Parece que o Xcode colocou um espaço no CFBundleIdentifier do meu destino restante (com.company.etc). Tive que editar Info.plist com um editor de texto externo para removê-lo e funcionou bem.

AbePralle
fonte
Isso também me aconteceu. em alvos, resumo, identificador, livrei-me de um espaço no início. Maçã Sheesh. Quantas pegadinhas você pode criar?
fregas
Identificador de pacote era meu problema. Isso está no arquivo Info.plist.
bentford
7

Eu estava apenas brincando com a adição de vários projetos dentro de um espaço de trabalho e tive esse problema. Eu tenho uma biblioteca simples em um dos projetos e estava construindo e adicionei um alvo baseado em janela iOS para testá-lo. Excluí o primeiro destino que fiz para renomeá-lo. Depois de ler isso, tentei remover o xcuserdata de dentro do pacote .xcodeproj e isso resolveu meu problema. Espero que isto ajude alguém. Rodando o Xcode 4.1 no OS X 10.7.1.

Andrew
fonte
7

Depois de passar por todas essas respostas, tive exatamente o mesmo problema, mas algo diferente resolveu para mim.

O problema:

A compilação falhou sem problemas após a refatoração. (Renomeou uma classe usando Editar -> Refatorar -> Renomear).

A solução mais idiota de todos os tempos :

Vá refatorar (renomear) outra coisa (-_- "). Depois de fazer isso, o erro foi que o Xcode falhou ao renomear todos os arquivos apropriados e não mostrou erros. Então, após outra refatoração, os erros do refatorador anterior apareceram .

Mazyod
fonte
é isso aí ! Eu renomei manualmente uma propriedade e isso causou o problema. obrigado
Laszlo
6

Eu tenho esse mesmo problema. Eu estava tentando consertar um xcode travou. Eu o reabri e funcionou muito bem. Talvez eu tenha tido sorte ou algo assim? Seja como for, eu realmente não me importo com o que havia de errado com ele, desde que funcione agora

Porteiro
fonte
6

Se você alterou o identificador do pacote e limpou o projeto, mas também não funcionou, tente esvaziar o diretório / Users / YOUR_USERNAME / Library / Developer / Xcode / DerivedData.

Funciona para mim.

Kenial
fonte
6

Para mim, o build falhou sem exibir nenhum erro no Issue Navigator. Porém, no Log Navigator, naquela sessão de build, pude ver o erro. No meu caso, o erro foi uma constante não declarada. Importei o arquivo de cabeçalho necessário e o problema foi resolvido. Não tenho certeza porque esse erro não apareceu no Issue Navigator.

Tentei reproduzir esse comportamento alterando deliberadamente o nome de outra variável. Desta vez, o erro foi exibido no Issue Navigator. Portanto, ainda não tenho certeza sobre por que o erro anterior não apareceria no Issue Navigator.

Espero que isto ajude.

Sreejit
fonte
6

As soluções acima não funcionam para mim.

Minha solução é mover o projeto para outra pasta.

Os erros de compilação aparecem como normalmente.

Alex
fonte
4

Você limpou sua pasta de construção? Vá para o menu Produto, mantenha pressionada a tecla Opção e selecione "Limpar pasta de compilação ..."

Jon Reid
fonte
Isso não mudou os resultados.
Adam Davis,
Sem alterações
Jayprakash Dubey
4

Eu sei qual é o problema: Em Info.plist -> Identificador de Pacote: você não pode usar '_'. Por exemplo, com.mycompany.My_app não é válido, mas com.mycompany.My-app OK.

Rubycon
fonte
3

Tive exatamente o mesmo problema ao tentar compilar um projeto existente no xcode 4 e quase passei pela dor de recriar o projeto.

No entanto, em uma última tentativa, substituí o arquivo info.plist por um recém-criado que incluía as tags adicionais para "tipos de documentos", "tipos de url", "UTIs de tipo exportado" e "UTIs de tipo importado"

Isso pareceu funcionar e foi uma solução surpreendentemente simples para meu projeto.

user696455
fonte
3

Isso aconteceu comigo com meu alvo UnitTest. Estava trabalhando e depois parou. Eu tinha esquecido que tinha acabado de deletar um .h / .m no sistema de arquivos e não removê-lo do arquivo de projeto, porém o XCode não relatou isso.

Eu descobri executando o projeto na linha de comando, que me mostrou o erro:

/usr/bin/xcodebuild -target "UnitTest"

Execute-o na pasta em que está seu arquivo de projeto e substitua UnitTest pelo seu destino - ou simplesmente não passe um destino para construir o destino padrão.

bandejapaisa
fonte
3

Eu também tive esse problema, mas a causa era outra:

Eu tenho um espaço de trabalho com um projeto nele. Neste projeto eu uso um framework que está incluído adicionando seu projeto Xcode ao meu projeto. Importei o arquivo de cabeçalho do framework no meu cabeçalho de prefixo (.pch). Isso foi estúpido.

A solução foi remover o #import do arquivo de cabeçalho da estrutura do meu arquivo de cabeçalho de prefixo e adicioná-lo apenas onde necessário.

CodeStage
fonte
3

O mesmo problema aqui ao construir para o dispositivo. A compilação falhou, mas meu log está todo marcado em verde. Limpar / excluir a pasta de compilação não corrige isso. Li em outro lugar que alguém resolveu esse problema excluindo e recriando o destino, mas ainda não descobri completamente como fazer isso no XCode 4.


Minha solução temporária foi baixar e instalar o XCode 3.2.6 c / iOS 4.3. Não percebi que a Apple também lançou uma versão do XCode 3 que inclui o iOS 4.3, permitindo que você adie a atualização para o XCode 4. Apresentei um relatório de bug à Apple sobre o problema Build Failed.


atualização da Apple:

Quando construímos este projeto - embora em uma versão pós-Xcode 4.0 - vemos o seguinte na etapa ProcessProductPackaging no log de construção:

(nulo): erro: CFBundleIdentifier 'com.yourcompany.Magic_Carpet' contém caractere ilegal '_' identificador de pacote inválido 'com.yourcompany.Magic_Carpet'

O código ProcessProductPackaging foi reformulado recentemente, então suspeitamos que ele simplesmente não estava emitindo erros corretamente no Xcode 4.0. Dê uma olhada na transcrição de sua própria construção e, em caso afirmativo, isso provavelmente será corrigido em uma versão futura do Xcode (não podemos comentar mais até que uma correção seja lançada).

Mudei de um sublinhado para um travessão e resolvi o problema.

Paul Slocum
fonte
2

A mesma coisa aconteceu comigo por uma causa diferente.

Removi get-task-allow do meu arquivo Entitlements.plist, deixando um plist vazio. As configurações de compilação ainda tinham o arquivo Entitlements.plist especificado como meu arquivo Entitlements. Optei por executar usando minhas configurações de compilação Ad-Hoc no dispositivo iOS com meu iPhone conectado e vi o comportamento descrito neste bug. Adicionar get-task-allow consertou.

Colin
fonte
2

parece que existem muitas causas possíveis para este problema. O meu acabou por ser aquele

Meu destino foi definido para usar um perfil de provisionamento inexistente.

Defini meu projeto para usar um novo perfil e excluí o antigo. Não percebi que o destino tinha sua própria configuração de perfil de provisionamento, que ainda estava definida para o perfil antigo (agora excluído).

CharlieMezak
fonte
2

Só para adicionar outra resposta depois de tentar TODAS as anteriores sem sucesso: Tive que reiniciar o MacBook, não apenas fechar o XCode, e funcionou para mim. Acabou com o XCode mostrando alguns erros no Localizable.strings que não mostrava antes.

espero que ajude

sonxurxo
fonte
Recebi algo semelhante, Xcode 5.0.2: houve um erro de sintaxe em um dos meus Localizable.strings que o Xcode não mostrou durante a construção.
Bart van Kuik
2

Limpo todos os espaços nos esquemas de projeto em xcschemes e isso resolve o problema. F *** ing Apple :( AppCode ROCKS!

Bimawa
fonte
1

consulte: http://developer.apple.com/library/ios/#DOCUMENTATION/FileManagement/Conceptual/understanding_utis/understand_utis_conc/understand_utis_conc.html

O conjunto de caracteres UTI Um identificador de tipo uniforme é uma string Unicode que geralmente contém caracteres no conjunto de caracteres ASCII. No entanto, apenas um subconjunto de caracteres ASCII é permitido. Você pode usar o alfabeto romano em maiúsculas e minúsculas (A – Z, a – z), os dígitos de 0 a 9, o ponto (“.”) E o hífen (“-”). Essa restrição é baseada em restrições de nome DNS, estabelecidas no RFC 1035.

Os identificadores de tipo uniforme também podem conter qualquer um dos caracteres Unicode maiores que U + 007F.

Importante: Qualquer caractere ilegal que apareça em uma string UTI - por exemplo, sublinhado ("_"), dois pontos (":") ou espaço ("") - fará com que a string seja rejeitada como um UTI inválido. Na camada API, nenhum erro é gerado para UTIs inválidos.

Sfjava
fonte
1

Não tive problemas com o nome do pacote, então as soluções sugeridas não funcionaram para mim. Finalmente, configurei Não codifique a assinatura para a construção, fechei o projeto, removi o provisionamento no organizador, baixei o novo provisionamento e adicionei-o ao organizador, em seguida, configurei-o para a construção. Funcionou.

Engeor
fonte
1

Esta não é uma resposta técnica, mas uma resposta de "erro do usuário" que provavelmente não se aplica à sua situação. Aconteceu comigo e minha pesquisa me levou a este Q&A sem sucesso --- até que percebi meu erro. Eu tinha um filtro definido no Issue Navigator que não correspondia a nada que estava sendo relatado como um problema. Quando limpei o filtro, os problemas foram exibidos.

Observe que os sintomas são os mesmos que você estava perguntando e não tenho ideia de quando defini esse filtro (ele deve ser herdado das outras visualizações de navegação), pois não precisaria de nenhuma filtragem na lista curta.

mobibob
fonte
1

Eu só tive um problema semelhante. Não foi possível encontrar um erro em qualquer lugar. Excluí todos os meus perfis de provisionamento e adicionei novos.

Em seguida, tentei criar outro aplicativo de teste para meu dispositivo e recebi esta mensagem de erro:

Erro de sinal de código: a identidade do certificado 'iPhone Developer: xxxxxx' aparece mais de uma vez nas chaves. A ferramenta de codesign requer que haja apenas um.

Então entrei no Keychain, encontrei alguns certificados expirados com o mesmo nome e os excluí, e isso resolveu o problema.

Bastante aleatório, mas talvez se você tentar construir outro aplicativo para o dispositivo como eu fiz, você pode ter a sorte de receber uma mensagem de erro, como eu, para ajudar a diagnosticar o problema.

Mestevie
fonte
1

Vá para o Organizer no xcode. E na guia Projeto, exclua esse projeto. Deixe o xcode reconstruir os dados derivados novamente para corrigir meu problema.

AccBLue
fonte
1

Eu enfrentei um problema semelhante no XCode4.5 e, enquanto trabalhava no meu aplicativo, o XCode travou repentinamente.

Depois de pesquisar por horas, descobri que um dos meus arquivos no meu aplicativo foi excluído quando o xcode travou.

Restaurei o arquivo da Lixeira e o problema foi resolvido.

niks
fonte
1

Eu estava programando um aplicativo Mac OS X sem code-signing . Quando habilitei o sandbox na seção "Direitos", o codesigning foi ativado automaticamente e não consegui fazer uma nova compilação.

Thomas Johannesmeyer
fonte