Estou usando o Xcode 6,
1) Em primeiro lugar, estou criando uma biblioteca dinâmica (CoreLibrary). Esta biblioteca contém o arquivo RequestPoster.h.
2) Criei um Cocoa Touch Framework e adicionei esta biblioteca dinâmica (CoreLibrary).
3) Em seguida, essa estrutura é adicionada ao meu projeto e gera erro no arquivo RequestPoster.h (CoreLibrary).
Erro: inclusão do cabeçalho não modular na classe do módulo de estrutura:
ifaddrs.h, arpa / inet.h, sys / types.h>
Esses arquivos não foram encontrados no projeto.
ifaddrs
, eles são obrigados a importar ifaddrs.h./usr/include/libproc.h
?Verifique se os arquivos de cabeçalho estão disponíveis publicamente como parte dos cabeçalhos públicos da estrutura.
Vá para Framework -> Target -> Build Fhases e arraste para mover os arquivos de cabeçalho relevantes de Project para Public. Espero que ajude!
fonte
Você pode definir YES para Permitir inclusões não modulares nos Módulos da estrutura em Configurações de compilação do destino afetado. Esta é a configuração de compilação que você precisa editar:
NOTA : Você deve usar esse recurso para descobrir o erro subjacente, que eu acho frequentemente causado pela duplicação de inclusões globais com colchetes angulares em arquivos com algum relacionamento dependente, ou seja:
Se definir Permitir inclusões não modulares nos módulos de quadros como YES resultar em um conjunto de erros "X é uma referência ambígua" ou algo do tipo, você poderá rastrear as duplicatas incorretas e eliminá-las. Depois de limpar seu código, defina Permitir inclusões não modulares nos módulos de quadros novamente para NÃO .
fonte
Eu tive o mesmo problema e resolvi-o apenas tornando público o arquivo de cabeçalho.
Se você estiver trabalhando em vários módulos em seu projeto. Em seguida, seu arquivo de cabeçalho precisa ser público para ser usado em outras partes dos projetos. O que você precisa é selecionar esse arquivo de cabeçalho e, na visualização Utilitários do projeto. Altere o arquivo de Projeto / Privado para Público. Veja a imagem abaixo:
fonte
"Incluir cabeçalho não modular dentro do módulo de estrutura"
Quando você recebe esse erro, em algumas circunstâncias, a solução pode ser simplesmente marcar o arquivo que você está tentando importar como "público" no inspetor de arquivos "Associação de Destino". O padrão é "Projeto" e, quando definido dessa maneira, pode causar esse erro. Esse foi o meu caso ao tentar importar os cabeçalhos do Google Analytic para uma estrutura, por exemplo.
fonte
Na verdade, uma maneira mais fácil de corrigir isso é mover a
#import
instrução para a parte superior do.m
arquivo (em vez de tê-la em seu.h
arquivo de cabeçalho). Dessa forma, não irá reclamar que está incluindo um arquivo de cabeçalho não modular. Eu tive esse problema emAllow non-module includes
definir aYES
fez não trabalho para mim, por isso, movê-lo para o arquivo de implementação, ele parou de reclamar. De fato, essa é a maneira preferida de importar e incluir arquivos de cabeçalho. Depois de fazer isso, configurá-lo novamenteNO
deve funcionar.Idealmente, devemos tentar almejar ter
Allow non-module includes
definidoNO
. Definir issoYES
na maioria dos casos significa que você está fazendo algo errado. A configuração se traduz em "Permitir a importação de arquivos de cabeçalho aleatórios no disco que não fazem parte do módulo". Isso se aplica a poucos casos de uso na prática e, portanto, essa configuração deve sempre serNO
(ou seja, o valor padrão).fonte
Caso você esteja desenvolvendo sua própria estrutura:
Por que isso está acontecendo?
Se algum dos arquivos de cabeçalho público que você mencionou no module.modulemap tiver instruções de importação que não são mencionadas no modulemap, isso fornecerá o erro. Como ele tenta importar algum cabeçalho que não é declarado como modular (em module.modulemap), ele quebra a modularidade da estrutura.
Como posso corrigir isso?
Apenas inclua o cabeçalho que deu o erro no seu module.modulemap e construa novamente!
POR QUE NÃO apenas definir permitir não modular para SIM?
Porque não é realmente uma solução aqui, com isso você diz ao seu projeto "que essa estrutura deveria ser modular, mas não é. Use-a de alguma forma, não me importo". Isso não resolve o problema de modularidade da sua biblioteca.
Para mais informações, verifique esta postagem no blog ou consulte os documentos clang .
fonte
Se você precisar disso para os destinos do CocoaPods, adicione estas linhas em
Podfile
:fonte
Allow Non-modular Includes in Framework Modules
só funciona no código objc. Não trabalhe rápido.Após um período de pesquisa, eu descobri que o swift pode passar o parâmetro de aviso para clang, então defina
OTHER_SWIFT_FLAGS
para-Xcc -Wno-error=non-modular-include-in-framework-module
inibir o erro de importação rápido.apenas para alguém que tem o mesmo problema
fonte
Eu tive o mesmo problema e nada de cima me ajudou. Então, espero que minha resposta seja útil para alguém. No meu caso, o problema estava na configuração ALWAYS_SEARCH_USER_PATHS. Quando foi definido como NO, o projeto foi construído e funcionou bem. Mas, na medida em que um dos pods exigia que fosse definido como SIM, eu estava recebendo um erro
Depois de tomar algumas xícaras de café e pesquisar o dia inteiro, descobri que, de acordo com problemas conhecidos das notas de versão do Xcode 7.1 Beta 2 :
Eu estava usando o XCode 7.3, mas parece que esse bug ainda não foi corrigido.
fonte
Finalmente, acho que colocar o 'import xxx.h' na implementação em vez da interface pode resolver o problema.E se você usar o Cocoapods para gerenciar o seu projeto.Você pode adicionar
no seu arquivo 'xxx.podspec'.
fonte
Se você vir esse erro em um cabeçalho guarda - chuva ao criar uma estrutura dinâmica , importe seu arquivo como:
#import "MyFile.h"
e não como
#import <MyFramework/MyFile.h>
.fonte
Também deparei com esse problema e originalmente pensei que era um problema do CocoaPods, mas era um problema nas configurações de criação de aplicativos em que alguém (provavelmente eu) havia definido
${PODS_ROOT}
nos Caminhos de pesquisa de cabeçalho e definido como umarecursive
pesquisa. Isso permitiu encontrar cabeçalhos que não foram projetados para serem usados na criação do aplicativo. Depois de definir isso para usar,non-recursive
tudo estava bem. usar arecursive
pesquisa é um truque terrível para tentar encontrar os cabeçalhos adequados. Lição aprendida.fonte
Isso foi meio que um problema chato para mim. Nenhuma sugestão pareceu ajudar meu caso particular, pois eu precisava incluir os cabeçalhos "não modulares" no meu arquivo de cabeçalho de arquivo individual. O trabalho que usei foi colocar a chamada de importação no arquivo de cabeçalho do prefixo.
fonte
Acabei movendo o Umbrella Header para o final da lista de Headers depois de verificar as soluções acima, e funcionou no Xcode 9.3.
fonte
Eu resolvi removendo a
Modules
pasta da estrutura.Navegue até o local da estrutura presente no App Project usando o finder
Vá para dentro da
Test.framework
pasta (no caso acima seráCoreLibrary.framework
) e apague aModules
pasta.Limpe e re Construa o aplicativo, ele resolverá o problema.
fonte
No meu caso, esqueci de adicionar os arquivos .he .m na seção "s.source_files" do arquivo .podspecs.
depois de adicionar isso, ele funciona bem.
fonte
tente em
@import FrameworkName
vez de#import "FrameworkName.h"
fonte
Consegui limpar dezenas desses erros usando o Git clean. Aqui está o comando:
git clean -dffx && git reset --hard
fonte