Xcode 6 Bug: Classe desconhecida no arquivo do Interface Builder

Fiz o upgrade para o Xcode 6 beta 4 e agora meu App falha continuamente com a mensagem

Classe desconhecida X no arquivo do Interface Builder.

Ele falha porque supostamente o Xcode não consegue encontrar minhas classs personalizadas que eu vinculei no Storyboard, mas mostra que elas estão vinculadas corretamente na interface do Xcode.

Tenho certeza de que tudo está ligado corretamente. Minha única outra opção pode ser excluir todo o arquivo do storyboard e começar do zero, porque ele pode estar corrompido de alguma forma.

Edit: Eu também gostaria de acrescentar que eu tentei limpeza, simulando reseting, brincando com as fases de compilation etc. Nada disso funciona.

Eu resolvi esse problema enquanto digitava a pergunta. Pensei em responder minha pergunta e deixá-la aqui para qualquer outra pessoa que possa enfrentar esse problema ao usar o Xcode 6 beta 4.

Para resolver esse problema, você precisa selecionar cada um dos objects de class personalizados no Storyboard (isso inclui quaisquer modos de exibição personalizados, até mesmo os próprios controladores de exibição personalizados).

Depois, com esses objects selecionados, abra o inspetor de identidade e, em “Classe Personalizada”, você verá a opção Módulo. Clique dentro da checkbox de texto do módulo e pressione enter.

É isso aí! O módulo atual para todos os meus objects personalizados deve ter sido internamente configurado incorretamente de alguma forma no Xcode 6 beta 4. Mas não havia nenhuma indicação visual disso no inspetor.

Note que se pressionar enter dentro da checkbox de texto Module não funcionar, tente selecionar a seta para a direita e selecione manualmente seu módulo atual, então limpe a checkbox de texto e pressione enter. Você também pode tentar pressionar enter dentro da checkbox de texto da class (embora isso geralmente seja para resolver um problema diferente).

Aqui está uma imagem para tornar as coisas mais claras: insira a descrição da imagem aqui

Algumas vezes o Xcode perdeu customModule="AppName" customModuleProvider="target"

Para corrigi-lo, abra o storyboard como código-fonte e substitua esta linha:

  

para isso:

  

Eu tive esse problema depois de renomear uma class rápida. Resolvido usando a diretiva @objc:

 @objc(ForumTopicListViewController) class ForumTopicListViewController 

Isso funcionou para mim ..

Verifique sua fonte compilada, se o arquivo (por exemplo: ViewController.m) é adicionado ou não, no meu caso o arquivo ViewController não foi adicionado, então ele estava me dando o erro.

insira a descrição da imagem aqui

Isso pode acontecer em qualquer Xcode acima de 6.0. Aconteceu comigo depois de renomear algumas classs ViewController no projeto Swift (mas eu acho que isso vai acontecer com o Obj-C também). Você só tem que abrir o construtor de interface, vá para o Identity Inspector do ViewController que teve sua class renomeada, selecione class e pressione Enter. Isso reatribuirá a class renomeada ao ViewController selecionado e também redefinirá o valor do módulo que é perdido depois de renomear a class.

Atualização para o Xcode 8.1 (provavelmente 8.0 também):

O Xcode 8.1 apenas trava. Simples e irritantemente apenas falha e não imprime nada. Eu estava perseguindo aquele acidente fantasma por uma hora só para descobrir que era essa mesma coisa – class não designada no IB. Se você está tendo algumas falhas fantasmas, verifique o IB para classs não atribuídas primeiro.

Às vezes, o controlador que você está fornecendo perde sua associação de destino do aplicativo atual. Nesse caso, pressionar enter no campo “Module” não fará nada. Vá para o controlador e certifique-se de que ele tenha associação de destino definida para o aplicativo atual.

Projeto com Múltiplos Alvos

No meu caso, estou trabalhando no Project com vários destinos e o problema “herdar do destino” foi desmarcado. Selecionando “herdar do alvo” resolveu meu problema

insira a descrição da imagem aqui

Minha resposta: definir módulo personalizado igual ao nome do POD personalizado (no meu exemplo – nome da class personalizada), como na captura de canvas anexada

Essa solução é para um caso específico : para classs de visualizações personalizadas da estrutura Pod (ou Carthage ).

Infraestrutura: XCode8, Swift3

insira a descrição da imagem aqui

Eu consertei isso fazendo exatamente o oposto do que ChikabuZ sugeriu (obrigado por apontar, no entanto). No arquivo do storyboard, encontre isto:

  

e substitua por isso:

  

Eu não posso acreditar quantas horas eu estou perdendo em torno de erros no compilador Swift e Xcode 6

Enfrentei esse problema no Xcode 8 , para resolvê-lo tive que modificar o storyboard no editor de texto.

Em geral, procure seu controle e remova customModule e customModuleProvider da entidade de controle.

Fez um truque para mim.

Selecionando o Module apropriado para minha Custom Class , resolvi esse problema.

Aqui está :

insira a descrição da imagem aqui

Enfrentei esse problema no Xcode 6.1 quando removi Main.storyboard , o arquivo LaunchScreen.xib e as classs ViewController padrão do meu projeto.

Eu Info.plist isso excluindo as inputs Launch Screen File e Main Interface do Info.plist

Eu tive o mesmo problema.

No meu caso, o Xcode não estava adicionando minha class personalizada a: Target> Build Phase> Compile Sources.

Então, eu recomendo que você verifique se o seu CustomClass.m está lá.

insira a descrição da imagem aqui

Espero que isso ajude você.

Eu pesquisei em todos os lugares por isso. Nenhuma das respostas funciona para mim até que eu encontrei um cara que me pediu para mover minha pasta do projeto para a área de trabalho. Apenas funcionou automaticamente. Aparentemente, se você tem que projetar pasta para o fundo em muitas pastas, XCODE realmente quebra.

Verifique se sua turma tem a inscrição certa.

Essas etapas funcionam para mim.

1) Limpar dados derivados.
2) Remova os arquivos .h e .m
3) Crie arquivos .h e .m novamente

Eu resolvi isso abrindo meu arquivo de storyboard como código-fonte e usando o comando -F para procurar minha class desconhecida e excluir a class personalizada associada a ela.

O que @gfrs disse está correto, você precisa definir o módulo. No entanto, encontrei uma vez uma questão em que minha turma não estava listada na lista suspensa ” Class . Eventualmente eu removi o arquivo, reiniciei o Xcode e criei novamente o arquivo. Finalmente, a turma foi listada e poderia ser usada no Storyboard.

Também dê uma olhada nesta resposta , que parece resolver o problema ‘real’ que encontrei.

Eu resolvi esse problema digitando o nome do módulo (infelizmente, a lista suspensa não mostrará nada …) na class personalizada do inspetor de identidade de todos os controladores e visões do View.

Você também pode precisar indicar o provedor de destino. Para atingir esse objective, você pode abrir o storyboard no modo código fonte e adicionar o atributo “customModuleProvider” nos colchetes angulares ViewController e View.

Minha solução (Xcode 8.1 Swift 3.0):

Classe desconhecida xxx no arquivo do Interface Builder.

Abra o StoryBoard como código fonte e procure por xxx . Remova o atributo que contém o valor xxx . Construa e Corra.

No meu caso, a class referenciada no Storyboard / xib não tinha o conjunto de membros alvo .

Para corrigir, dê aos arquivos .h e .m da mesma class a mesma Associação de Destino que as outras classs.

Nenhum conjunto de associação de destino.

No meu caso, adicionei uma flag -ObjC a Other Linker Flags nas configurações do projeto para fazê-lo funcionar. Também tentei com o flag -all_load e funcionou bem também.

insira a descrição da imagem aqui

Eu enfrentei o problema quando eu portei o storyboard do projeto Swift para o projeto Objective-c, percebendo a resposta de vvuznetsov , descobriu-se que os dois projetos usando o mesmo identificador. Eu “Product -> Clean” e pressione Enter no campo de texto Module e Class. a questão foi embora.

Minha solução foi remover @objc da definição de class personalizada.

Eu fixei isso nas linhas do que Laura sugeriu, mas eu não precisei recriar os arquivos.

Usando o XCode 4, no Project Navigator, selecione o arquivo .m que contém a class da qual ele está reclamando.

Vá em Exibir-> Utilitários-> Mostrar Inspetor de Arquivos (isso mostrará o Inspetor de Arquivos à direita, com aquela informação de arquivo -m)

Abra a seção Target Membership e certifique-se de que seu destino esteja selecionado para este arquivo .m

Quando adicionei meu arquivo .m ao meu projeto, ele não o adicionou ao meu destino padrão por algum motivo e isso me levou a obter o erro que você mencionou.

O que só funcionou para mim é realmente adicionar o nome do módulo ao arquivo xib …

Então, os arquivos xib são assim:

 mymodule.MyViewController.xib (Module being the name of the proyect, usually) 

Solução HORRÍVEL, na minha opinião, mas isso é supostamente como a Apple quer que façamos isso agora.

Esta pergunta mostra 3 tentativas possíveis de volta em beta 4 … aparentemente, a Apple não tem sido muito útil nesta situação, de acordo com alguns, porque eles chamam de “Trabalhar como pretendido”.

Eu tive o mesmo problema com o Xcode Versão 6.1 (6A1052d). Eu acho que o problema aparece se você renomeou o seu projeto App / Xcode.

Minha solução foi adicionar o nome do módulo no construtor de interface manualmente.

Eu tive esse problema depois que adicionei um novo alvo, criei uma nova class usando o diálogo ‘Novo arquivo’, mas acidentalmente não consegui verificar o novo alvo, assim como o destino original na checkbox de diálogo de criação, então o object só foi adicionado ao meu alvo original. A solução foi excluir os arquivos de origem (remova apenas a referência) e, em seguida, adicione-os novamente usando ‘Add Files’, desta vez verificando os dois destinos.

A solução foi diferente para mim. Você precisa adicionar o .m da class às fonts compiladas da fase de compilation do destino.

Espero que isto ajude!

Selecione seu arquivo de class desconhecido, aba de inspetor de arquivo aberto, verifique seu nome de alvo em Target Membership . Ai está.