Obtendo o erro "Não existe esse módulo" usando o Xcode, mas a estrutura está lá

344

Atualmente, estou codificando no Swift e tenho um erro:

Não existe esse módulo Social

Mas eu não entendo, porque o módulo está no meu projeto, declarado em "Frameworks e bibliotecas vinculadas" e em "Binários incorporados".

Os frameworks estão no Objective-C, então escrevi um Bridge Header para ele.

Por favor, como posso fazer o Xcode reconhecer a estrutura?

Módulo de erro

Projeto

Estruturas de links, bibliotecas

Ponte de cabeçalho

alexandresecanove
fonte
20
Para não ser muito mr. óbvio, mas você já tentou uma limpeza completa e construção?
Kalel Wade
28
Se o cabeçalho da estrutura já estiver incluído no arquivo de cabeçalho da ponte, você não precisará importá-lo no arquivo de origem Swift.
Martin R
2
Talvez você precise usar aspas para a importação:#import "Social/Social.h"
Martin R
3
mesmo erro com o CocoaPods 'sem erro de módulo' no xcode.
AsimRazaKhan 15/09/16
11
Mudei o Deployment Target de 11 para 10, mas esqueça no Podfile platform :ios, '10.0'. Essa foi a solução.
Artur Guseynov

Respostas:

321

Não sei por que isso acontece, mas uma maneira de resolver seu problema é entrar nas configurações de compilação e definir os Caminhos de Pesquisa do Framework em uma pasta que contém os frameworks em questão. Se as estruturas forem colocadas no diretório do projeto, simplesmente defina o caminho de pesquisa da estrutura como $(SRCROOT)e recursivo.

terhechte
fonte
5
Obrigado. Eu tinha que fazer isso em minhas configurações de compilação do projeto, em vez de minhas configurações de compilação alvo
Pulsar
8
O truque para mim foi encontrar um caminho para a estrutura a ser usada nos Caminhos de Pesquisa da Estrutura. $ {TARGET_BUILD_DIR} /YourFrameworkName.framework funciona bem para mim. Veja também stackoverflow.com/questions/32816507/…
Chris Prince
11
Tinha que fazer isso em Project Build Settingsvez de Target Build Settings.
Maxim Mikheev
378
Corrigi isso indo ao banheiro. Quando voltei, estava funcionando. Tenho certeza de que tentei de tudo neste tópico, não sei exatamente o que fez o trabalho. Eu também orei em algum momento.
Ndias # 30/17
2
NOTA NO CORRECÇÃO: $ (SRCROOT) só funcionou para mim quando o adicionei ao caminho de pesquisa do Framework PARA O PROJETO PODS.
addzo
546

Caso seja sexta-feira à tarde ou a qualquer momento depois da 1h:

Abrir em xcodeprojvez de xcworkspacecausará um erro como este ...

capikaw
fonte
2
Eu tentei isso como um santo graal. Engraçado. Quem sabe, mas sair e reabrir o espaço de trabalho também funcionou. Limpe e depois construa.
Mondousage
3
21:00 usando fastlane, especificou a academia (projeto: ---) em vez da academia (espaço de trabalho: ----) Obrigado!
RickiG
11
Isso aconteceu comigo depois que o Xcode travou e eu selecionei o aplicativo 'reabrir' no relatório de erros. Eu saberei melhor da próxima vez.
Stamp
Reinstalei o XCODE e estava recebendo esse erro porque estava abrindo o aplicativo por meio dos projetos abertos recentemente. Fechado o projeto, Arquivo -> Abrir -> selecione o arquivo xcworkspace e tudo funcionou.
Dpedrinha 25/01
Também se aplica à construção na linha de comando (nosso problema): xcodebuild -workspace yourproject.workspace.
Ben Butzer
57

Certifique-se de que o nome de suas configurações nos subprojetos corresponda ao nome do projeto "pai". Se a nomeação da configuração não corresponder exatamente (diferencia maiúsculas de minúsculas), o Xcode interromperá o processo de arquivamento e mostrará o erro "Nenhum módulo ..."

Ou seja, se você tiver um projeto "pai" com uma configuração denominada "AppStore", verifique se todos os subprojetos também possuem esse nome de configuração.

Veja minhas imagens em anexo.

Configuração no projeto "pai"

Configuração no 1º subprojeto

Configuração no 2º subprojeto

Groot
fonte
11
No meu caso, o subprojeto tinha apenas Debuge Distributione seu projeto pai estava tentando construir para Release. A solução foi fazer uma cópia Distributionno projeto filho e renomear essa cópia Release.
precisa
2
Isso me levou a encontrar o problema, mas eu resolvi adicionando aos caminhos de pesquisa quadro em minhas configurações personalizadas desde que eu não quero tocar uma parte 3 subprojeto :)
DeFrenZ
Isso resolveu o problema! Bem feito :)
alicanbatur
Obrigado! Eu tive 3 configurações no meu projeto principal. Então, eu fiz o mesmo com o framework e isso ajudou.
daxh
Alguma pista sobre como fazer o Xcode criar uma configuração específica do subprojeto aninhado? Não quero mudar o nome de subprojetos configurações, uma vez que se torna muito ligado de adicionar novas configurações de projeto principal
Dren
44

Não sei ao certo por que a resposta de Martin R nos comentários da pergunta é tão desconsiderada:

Certifique-se de que você tentou simplesmente ignorar a importação da estrutura, pois ela já foi adicionada ao cabeçalho da ponte .

Espero que isto ajude

Mike K
fonte
37

Eu tive o mesmo problema usando Cocoapods e Swift . Não notei as seguintes linhas no Podfile:

# Uncomment this line if you're using Swift
# use_frameworks!

Então, tudo que eu precisava fazer era alterá-lo para:

# Uncomment this line if you're using Swift
use_frameworks!

... aa e funcionou :)

nburk
fonte
Sim para mim use_frameworks não estava mesmo na minha Podfile então eu adicionei-lo
PhoenixB
22

Por favor, compare esta captura de tela com sua configuração de compilação. Pode este trabalho. Vá para o caminho de pesquisa da estrutura:

Digite a descrição da imagem aqui

Krutarth Patel
fonte
Também mencionado por Chris Prince .
Franklin Yu
18

Eu estava enfrentando esse problema também. A solução para mim foi que os esquemas de arquivamento entre os dois projetos não correspondiam. Eu tenho um xcworkspace com um projeto de estrutura e um projeto de aplicativo. O problema era que, no esquema de arquivamento do meu aplicativo, eu estava usando uma configuração de compilação diferente da que a estrutura estava usando para o esquema de arquivamento. Defina as Configurações de compilação para Liberar, e isso corrigiu o problema.

mikepj
fonte
Isso funcionou para mim. Defino meu projeto principal Build Config de volta para Release (from Distribution) e agora ele corresponde ao subprojeto. Tudo funcionando. Obrigado!
Charlie Seligman
11
Nossa estrutura não tinha a configuração AdHoc que usamos para o projeto - o que significava que ela não foi criada junto com o projeto.
Johan
15

Os seguintes passos funcionaram para mim.

  1. Sair do xcode
  2. Executar "pod update"no terminal
  3. Abra .xcworkspacee construa novamente.
john raja
fonte
11
Estes passos funcionou para mim ... Obrigado ... Eu corri "Pod instalar", mas não estava recebendo "Módulo XXX não encontrado distância .." mas ao sair Xcode e, em seguida, reabrir Workspace me ajudou ..
Aks
Meu problema é depois de adicionar uma nova configuração e esquema de compilação e recebi "Módulo não encontrado ..." Sair do Xcode não funciona, depois de pod installfuncionar.
William Hu
Isso funcionou para mim. Alguma explicação sobre por que isso resolve o problema?
Nico Cernek
Funcionou para mim. Após reabrir projectname.xcworkspace, é necessário limpar e reconstruir novamente para fazê-lo funcionar.
Prashant
14

No meu caso, depois de muitas tentativas de descobrir o que eu estava fazendo de errado ao importar uma estrutura, finalmente descobri que a estrutura em si era o problema. Se você não estiver obtendo sua estrutura de uma fonte confiável, verifique a estrutura e verifique se ela contém uma pasta Módulos com um arquivo module.modulemap dentro dela. Se module.modulemap não estiver presente, você receberá o erro "No module 'MyFramework'".

Exemplo mostrando a estrutura de diretórios do SwiftyJSON.framework

Se a pasta Módulos estiver sem a pasta "MyFramework.swiftmodule", a estrutura será encontrada, mas o Xcode não saberá sobre o seu conteúdo e, portanto, você obterá erros diferentes.

mcsheffrey
fonte
2
Por alguma razão, isso não é mostrado no xcode 9.1, mesmo quando está presente. Clique com o botão direito do mouse em sua estrutura> Show In Finder> e verifique se o seu modulemap está lá. Se você estiver usando uma estrutura manual em um projeto de pods, reconstrua-os se tiver adicionado uma nova estrutura manual ou atualizado uma já existente.
Christopher Larsen
11
Obrigado! Eu fiz criar o arquivo de mim mesmo e funcionou: quadro módulo NOME {header guarda-chuva "NAME.h" exportação * módulo * {exportação *}}
Sjoerd Perfors
12

Supondo que o Framework realmente esteja lá e no caminho, etc ... exclua o diretório ~ / Library / Developer / Xcode / DerivedData / ModuleCache (e limpe o projeto e exclua os dados derivados específicos do projeto para uma boa medida).

Quando você faz a limpeza padrão, o diretório ModuleCache não é reconstruído.

Brad Brighton
fonte
11
Eu só fiz isso como você me disse, e ele não funciona: /
alexandresecanove
11
Então você pode estar enfrentando um problema diferente que parecia o mesmo que eu encontrei. : - /
Brad Brighton
Eu estava tendo o mesmo problema com um Cocoapod e excluir os arquivos no ModuleCache fez o truque para mim.
HolySamosa
10

O que funcionou para mim é essa solução para outra pergunta. Fechando o Xcode e reabrindo o projeto como espaço de trabalho.
Vá para a pasta do seu projeto e abra o .xcodeworkspace arquivo.
Depois de abrir o espaço de trabalho (em vez do projeto), os Pods devem aparecer como um projeto de nível superior no Project Navigator.

cenkarioz
fonte
9

Certifique-se de que as Find implicit Dependenciesopções de compilação no esquema estejam ativadas!

Nik Kov
fonte
Isso funcionou para mim ..
Abhinav Dobhal
7

Eu também encontrei o mesmo erro alguns dias atrás. Aqui está como eu resolvi o problema:

O erro é "módulo não encontrado"

  • Crie o Podfile no diretório raiz do projeto
  • Instale cocoapods (um gerenciador de dependência para projetos Swift e iOS)
  • Executar instalação do pod
  • Vá para Configurações de criação do projeto:

    • Encontre o Cabeçalho de ponte Objective-c no compilador Swift - Geração de código (se você não encontrar o compilador Swift aqui, provavelmente adicione um novo arquivo Swift ao projeto)
    • Arraste e solte o arquivo de cabeçalho da biblioteca do lado esquerdo para o cabeçalho de ponte (veja a imagem em anexo)insira a descrição da imagem aqui
  • Crie um novo arquivo de cabeçalho de ponte: por exemplo, TestProject-Bridging-Header.he coloque em Swift Compiler → Nome do cabeçalho da interface gerada por Objective-C (ref, veja a imagem acima)

  • No arquivo TestProject-Bridging-Header.h, escreva #import "Mixpanel / Mixpanel.h"
  • No seu arquivo Swift, o código deve ser: Import Mixpanel (ou seja, nome da biblioteca)

Isso é tudo.

vikram jeet singh
fonte
Esta resposta ajudou. Ao tentar configurá-lo para o MBProgress, acabei seguindo as instruções em ios-support.blogspot.com/2017/04/… , que era muito semelhante.
Vette
6

Ok, como o mesmo problema foi resolvido para mim foi definir o local dos dados derivados em relação ao diretório da área de trabalho, em vez de mantê-lo padrão. Vá para preferências no xcode. Vá para a guia locais nas preferências e defina Dados derivados como Relativo. Espero que ajude.

harshitpthk
fonte
Funcionou apenas uma vez, então quando eu corro vai para o mesmo problema de não encontrar o módulo.
Nycdanie
5

Eu estava recebendo o mesmo erro por

import Firebase

Mas então notei que eu não estava adicionando pod à seção principal de destino, mas apenas adicionando aos alvos Test e TestUI no Podfile.

Com o comando

pod init

para um projeto xcode swift, o seguinte Podfile é gerado

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'MyApp' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for MyApp

  target 'MyAppTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'MyAppUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

Portanto, é necessário garantir que você adicione pods a qualquer espaço reservado apropriado.

zeeawan
fonte
5

Se você está construindo para uma plataforma como o tvOS, verifique se o simulador da Apple TV (ou seja, correspondente) está selecionado.

A criação de um aplicativo tvOS com um simulador iOS selecionado me deu exatamente esse erro. Passou quase uma hora procurando todos os tipos de problemas de construção ... doh.

Jordan Smith
fonte
11
O mesmo se aplica se você escolher "Meu Mac" ao criar um projeto iOS. Eu não sei por que Xcode permite mesmo que este ... 😒
Klaas
Obrigado! Tão óbvio agora, mas o erro estava me fazendo procurar soluções mais complicadas!
Dan Messing
5

No meu caso, o aplicativo IPHONEOS_DEPLOYMENT_TARGET foi definido como 9.3, enquanto no meu recém-criado framework foi definido como 10.2

O resolvedor implícito de dependências ignorou minha nova estrutura porque os requisitos da plataforma de destino são mais altos que os requisitos do aplicativo.

Depois de ajustar o destino da implantação do iOS da estrutura para corresponder ao destino da implantação do meu aplicativo, a estrutura compilada e vinculada com êxito.

Berbie
fonte
Obrigado. Depois de desperdiçar várias horas, achei que o destino da implantação era o problema.
Niks
4

Eu estava recebendo o mesmo erro que adicionei algumas estruturas usando Cocoapods. Se estivermos usando Pods em nosso projeto, devemos usar em xcodeworkspacevez de xcodeproject. Para executar o projeto através do xcodebuild, adicionei o -workspace <workspacename>parâmetro no xcodebuildcomando e funcionou perfeitamente.

Pawan Singh
fonte
Se você tiver uma nova pergunta, faça-o clicando no botão Fazer pergunta . Se você tiver reputação suficiente, poderá aprovar a pergunta. Como alternativa, marque-a como favorita e você será notificado sobre novas respostas.
Alessandro Cuttin
@pawan singh você salvou várias horas para mim, obrigado!
Dmitry Senkovich 28/08/19
3

Eu descobri que o Import Pathsno Build Settingsestava errado para um módulo personalizado (MySQL). Depois de apontar para a direção certa, a mensagem desapareceu.

qwerty_so
fonte
@rplankenhorn Bem, exatamente onde você os colocou em sua máquina. Execute a findse você não souber.
qwerty_so
3

Corrigi isso com

Destinos -> Geral -> Estruturas e bibliotecas vinculadas

Adicione a estrutura que deve estar no topo da Workspacepasta. Dor na bunda.

Magoo
fonte
3

Acabei de excluir meu cocoapod. Em seguida, instalei um pod para removê-lo. Depois, adicionei-o novamente no meu podfile e o reinstalei. Isso fez funcionar. Não sei por que.

Daniel Jones
fonte
3

Eu já tinha instalado os pods. A compilação funcionou sem problemas quando criei o aplicativo no meu dispositivo, mas o arquivamento não funcionou. Eu apenas corro:

pod install

nenhum pod novo foi instalado, apenas o arquivo .xcodeproj foi regenerado e o arquivo começou a funcionar

Vojta
fonte
3

No Xcode 10.1, a solução para mim foi alterar o sistema de compilação nas Configurações da Área de Trabalho no menu Arquivo. Por padrão, é definido como Novo sistema de compilação , alterado para Legacy Build System e foi o que fez o truque.

insira a descrição da imagem aqui

MFA
fonte
Obrigado companheiro, você salvou meu dia! 1
DungeonDev
3

Existem várias configurações incorretas em potencial para as quais o problema pode surgir,

  1. Confirme se você abriu o arquivo, .xcworkspacemas não o .xcodeprojarquivo. Verifique também se você construiu Socialprimeiro antes de construir TriviaApp.
  2. Verifique se o Destino de implantação do iOS está definido da mesma forma para todos os módulos com o aplicativo principal. Por exemplo, TriviaAppo destino de implantação de s está definido como 9.0, Socialo destino de implantação de s também precisa ser definido como 9.0.
  3. Certifique-se de que seu módulo principal ( TriviaApp) e sua estrutura usada ( Social) tenham o mesmo conjunto de configurações. ou seja, se o seu projeto tem três configurações, Debug, Release, ReleasePremiumdo que o seu quadro social também precisa ter três configurações Debug, Release, ReleasePremium. Verifique também se a configuração do arquivamento está definida da mesma forma para TriviaAppe Social. ou seja, se seu TriviaAppesquema de arquivamento estiver definido como ReleasePremium, seu Socialesquema de arquivamento também precisará ser definido ReleasePremium.
  4. Verifique se você não precisa importar Socialem cada .swiftarquivo quando ele já estiver adicionado no arquivo Bridging-Header.h.
  5. Em caso de problema veio de arquivos vagem, certifique-se de ter uncommented #use_frameworks!para use_frameworks!de você Podfile. Em algum momento, a instalação do pod funciona se Socialhouver alguma dependência dele.
  6. Se nenhuma das etapas acima funcionar, exclua sua pasta de dados derivados e tente reconstruir.
Sazzad Hissain Khan
fonte
Uau, eu nunca teria descoberto isso sem a sua ajuda. Na verdade, eu adicionei uma configuração personalizada ao meu projeto principal, mas estava ausente na estrutura.
Iulian Onofrei
@lulian feliz em saber que ajudou
Sazzad Hissain Khan
2

Se você estiver usando Cartago, as estruturas na configuração de construção geralmente ficam em

$(PROJECT_DIR)/Carthage/Build/iOS

Se você executar carthage update --platform ios --no-build(para economizar tempo), os arquivos dentro da pasta Build não serão recriados, então os módulos não estarão disponíveis para o XCode.

No meu caso, eu corri carthage update --platform ios, então meu problema foi resolvido.

Ronaldo Albertini
fonte
2

Em geral => Frameworks e bibliotecas vinculadas, eu adicionei o meu ./Pods/Pods.xcodeproje ele fez o truque

michel
fonte
2

Para mim, Build Build Architecture Only foi definido como Yes para a configuração selecionada. Isso fez o truque:

Selecione "Pods" no navegador de projeto esquerdo> selecione "Configurações de compilação"> Compilar somente a arquitetura ativa para Não

boa_in_samoa
fonte
1

Se todos os métodos acima não funcionaram para você, como no meu caso. Não houve problema no dia anterior, mas na manhã seguinte eu enfrentei o mesmo erro. Acabei de remover as estruturas removendo referências e as adicionei novamente. Eu sei que isso pode parecer bobagem, mas pronto, funcionou.

Soham Ray
fonte
1

Eu tive um problema semelhante ao carregar o FacebookSDK, adicionei ~ / Documents / FacebookSDK (procure onde estão suas estruturas) aos caminhos de pesquisa da estrutura nas configurações de compilação e depois disso consegui importar o módulo FBSDKShareKit

kalafun
fonte
1

Pelo que vale a pena (eu sou novo nisso usando o Xcode 7.2 / Swift 2), mas notei que apenas o arquivo .swift da biblioteca no diretório do projeto lhe dá acesso automaticamente e não precisa da instrução using.

Exemplo: estou usando o SwiftyJSON e bastava ter o arquivo SwiftyJSON.swift no projeto. A usingdeclaração estava realmente me dando o erro 'sem módulo' e removê-lo resolveu-o, e funciona bem.

markiyanm
fonte