Obtenir l'erreur «Aucun module de ce type» en utilisant Xcode, mais le cadre est là

344

Je suis en train de coder dans Swift, et j'ai une erreur:

Pas de module social

Mais je ne comprends pas, car le module est dans mon projet, déclaré dans "Framework et bibliothèques liés" et dans "Binaires intégrés".

Les cadres sont en Objective-C, j'ai donc écrit un en-tête de pont pour cela.

S'il vous plaît, comment puis-je faire en sorte que Xcode reconnaisse le framework?

Module d'erreur

Projet

Linkes Frameworks, Bibliothèques

Pont d'en-tête

alexandresecanove
la source
20
Ne pas être trop mr. évident mais avez-vous essayé un nettoyage et une construction complets?
Kalel Wade
28
Si l'en-tête du framework est déjà inclus dans le fichier d'en-tête de pontage, vous n'avez pas besoin de l'importer dans le fichier source Swift.
Martin R
2
Vous devrez peut-être également utiliser des guillemets pour l'importation:#import "Social/Social.h"
Martin R
3
même erreur avec CocoaPods «aucune erreur de module» dans xcode.
AsimRazaKhan
1
J'ai changé la cible de déploiement de 11 en 10, mais oubliez-la dans Podfile platform :ios, '10.0'. C'était une solution.
Artur Guseynov

Réponses:

322

Je ne sais pas pourquoi cela se produit, mais une façon de résoudre votre problème consiste à entrer dans vos paramètres de construction et à définir les chemins de recherche du cadre dans un dossier qui contient les cadres en question. Si les frameworks sont placés dans le répertoire de votre projet, définissez simplement le chemin de recherche du framework sur $(SRCROOT)et définissez-le sur récursif.

terhechte
la source
5
Merci. Je devais le faire dans mes paramètres de construction de projet plutôt que dans mes paramètres de construction cibles
Pulsar
8
L'astuce pour moi était de trouver un chemin vers le framework à utiliser dans les chemins de recherche du framework. $ {TARGET_BUILD_DIR} /YourFrameworkName.framework fonctionne bien pour moi. Voir aussi stackoverflow.com/questions/32816507/…
Chris Prince
11
J'ai dû faire ça au Project Build Settingslieu de Target Build Settings.
Maxim Mikheev
378
J'ai corrigé cela en allant aux toilettes. Quand je suis rentré, ça fonctionnait. Je suis presque sûr d'avoir tout essayé dans ce fil, je ne sais pas exactement ce qui a fait le travail. J'ai aussi prié à un moment donné.
nmdias
2
REMARQUE SUR LE CORRECTIF: $ (SRCROOT) n'a fonctionné pour moi que lorsque je l'ai ajouté au chemin de recherche du cadre pour le projet PODS.
addzo
549

Dans le cas où c'est vendredi après-midi ou à tout moment après 1h du matin:

L'ouverture xcodeprojau lieu de xcworkspaceprovoquera une erreur comme celle-ci ...

capikaw
la source
2
J'ai essayé cela comme un Saint Graal. Drôle. Qui sait, mais quitter puis rouvrir l'espace de travail a également fonctionné. Nettoyez, puis construisez.
lundi
3
21h en utilisant fastlane, a spécifié le gymnase (projet: ---) au lieu du gymnase (espace de travail: ----) Merci!
RickiG
1
Cela m'est arrivé après le crash de Xcode et j'ai sélectionné l'application «rouvrir» dans le rapport de bogue. Je saurai mieux la prochaine fois.
Timbre
J'ai réinstallé XCODE et j'obtenais cette erreur parce que j'ouvrais l'application via les projets récemment ouverts. Fermez le projet, Fichier -> Ouvrir -> sélectionnez le fichier xcworkspace et tout a fonctionné.
Dpedrinha
S'applique également à la construction sur la ligne de commande (notre problème): xcodebuild -workspace yourproject.workspace.
Ben Butzer
57

Assurez-vous que la dénomination de vos configurations dans les sous-projets correspond à celle du projet "parent". Si le nom de la configuration ne correspond pas exactement (sensible à la casse), Xcode abandonnera le processus d'archivage et affichera l'erreur "Aucun module de ce type ..."

Autrement dit, si vous avez un projet "parent" avec une configuration nommée "AppStore", vous devez vous assurer que tous les sous-projets ont également ce nom de configuration.

Voir mes captures d'écran ci-jointes.

Configuration de la configuration dans le projet "parent"

Configuration de la configuration dans le 1er sous-projet

Configuration de la configuration dans le 2ème sous-projet

Groot
la source
1
Dans mon cas, le sous-projet avait seulement Debuget Distributionet son projet parent essayait de construire pour Release. La solution consistait à faire une copie de Distributiondans le projet enfant et à renommer cette copie Release.
olivaresF
2
Cela m'a amené à trouver le problème, mais je l'ai résolu en ajoutant aux chemins de recherche du cadre dans mes configurations personnalisées car je ne voulais pas toucher à un sous-projet tiers :)
DeFrenZ
Je vous remercie! J'ai eu 3 configurations dans mon projet principal. J'ai donc fait de même pour le framework et cela a aidé.
daxh
Des indices sur la façon de faire une configuration spécifique à la construction Xcode d'un sous-projet imbriqué? Je ne veux pas renommer les configs de sous-projets, car il devient trop connecté d'ajouter de nouvelles configs au projet principal
Dren
Cela a fonctionné pour moi car mon projet avait 3 configurations, qui ont été renommées à partir des configurations par défaut "Debug" et "Release". J'ai mis à jour mon framework pour avoir les mêmes 3 configurations, construit le framework et tout a fonctionné comme prévu.
Yuri
44

Je ne sais pas trop pourquoi la réponse de Martin R dans les commentaires de la question est si ignorée:

Assurez-vous que vous avez simplement ignoré l'importation du cadre, car il est déjà ajouté avec l'en-tête de pontage .

J'espère que cela t'aides

Mike K
la source
38

J'ai eu le même problème en utilisant Cocoapods et Swift . Je n'ai pas remarqué les lignes suivantes dans le Podfile:

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

Donc, tout ce que j'avais à faire était de le changer en:

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

... et ça a marché :)

nburk
la source
Ouais pour moi, use_frameworks n'était même pas dans mon Podfile donc je l'ai ajouté
PhoenixB
22

Veuillez comparer cette capture d'écran avec votre paramètre de construction. Cela peut fonctionner. Accédez au chemin de recherche du framework:

Entrez la description de l'image ici

Krutarth Patel
la source
Également mentionné par Chris Prince .
Franklin Yu
18

J'éprouvais également ce problème. La solution pour moi était que les schémas d'archivage entre les deux projets ne correspondaient pas. J'ai un xcworkspace avec un projet de framework et un projet d'application. Le problème était que dans le schéma d'archivage de mon application, j'utilisais une configuration de construction différente de celle utilisée par le framework pour son schéma d'archivage. J'ai défini les deux configurations de build sur Release, et cela a résolu le problème.

mikepj
la source
Cela a fonctionné pour moi. J'ai remis mon projet principal Build Config sur Release (from Distribution) et maintenant il correspond au sous-projet. Tout fonctionne. Je vous remercie!
Charlie Seligman
1
Notre framework n'avait pas la configuration AdHoc que nous avons utilisée pour le projet - ce qui signifie qu'il n'a pas été construit avec le projet.
Johan
15

Les étapes suivantes ont fonctionné pour moi.

  1. Quitter xcode
  2. Exécuter "pod update"dans le terminal
  3. Ouvrez .xcworkspaceet reconstruisez.
John Raja
la source
1
Ces étapes ont fonctionné pour moi ... Merci ... J'ai exécuté "Installation de pod" mais je n'obtenais pas "Module XXX introuvable ..." mais en quittant XCode puis en rouvrant Workspace, cela m'a aidé ..
Aks
Mon problème est après avoir ajouté une nouvelle configuration de construction et un nouveau schéma, j'ai obtenu "Module introuvable ..." Quitter Xcode ne fonctionne pas, après pod installcela fonctionne.
William Hu
Cela a fonctionné pour moi. Une explication sur la raison pour laquelle cela résout le problème?
Nico Cernek
Ça a marché pour moi. Après avoir rouvert projectname.xcworkspace, vous devez nettoyer et reconstruire à nouveau pour le faire fonctionner.
Prashant
14

Dans mon cas, après de nombreuses tentatives pour comprendre ce que je faisais de mal lors de l'importation d'un framework, j'ai finalement découvert que le framework lui-même était le problème. Si vous n'obtenez pas votre framework à partir d'une source fiable, vous devez inspecter le framework et vous assurer qu'il contient un dossier Modules avec un fichier module.modulemap à l'intérieur. Si module.modulemap n'est pas présent, vous obtiendrez l'erreur «Aucun module de ce type« Mon cadre »».

Exemple montrant la structure de répertoires de SwiftyJSON.framework

Si le dossier Modules ne contient pas le dossier "MyFramework.swiftmodule", le framework sera trouvé mais Xcode ne connaîtra pas son contenu, vous obtiendrez donc différentes erreurs.

mcsheffrey
la source
2
Pour une raison quelconque, cela n'est pas affiché dans xcode 9.1 même lorsqu'il est présent. Cliquez avec le bouton droit sur votre framework> Afficher dans le Finder> et assurez-vous que votre modulemap est là. Si vous utilisez un framework manuel dans un projet de pods, reconstruisez vos pods si vous venez d'ajouter un nouveau framework manuel ou d'en mettre à jour un existant.
Christopher Larsen
1
Merci! J'ai créé le fichier moi-même et cela a fonctionné: module de structure NAME {en-tête parapluie "NAME.h" export * module * {export *}}
Sjoerd Perfors
12

En supposant que le Framework est vraiment là et dans le chemin, etc ... supprimez le répertoire ~ / Library / Developer / Xcode / DerivedData / ModuleCache (et nettoyez le projet et supprimez les données dérivées spécifiques au projet pour faire bonne mesure).

Lorsque vous effectuez le nettoyage standard, le répertoire ModuleCache n'est pas reconstruit.

Brad Brighton
la source
1
Je viens de le faire comme tu me l'as dit, et ça ne marche pas: /
alexandresecanove
1
Ensuite, vous pourriez être confronté à un problème différent qui ressemblait à celui que j'ai rencontré. : - /
Brad Brighton
J'avais le même problème avec un Cocoapod et la suppression des fichiers dans ModuleCache a fait l'affaire pour moi.
HolySamosa
10

Ce qui a fonctionné pour moi, c'est cette solution à une autre question. Fermer Xcode et rouvrir le projet en tant qu'espace de travail.
Accédez à votre dossier de projet et ouvrez le .xcodeworkspace fichier.
Une fois que vous avez ouvert l'espace de travail (au lieu du projet), les pods doivent apparaître comme projet de niveau supérieur dans Project Navigator.

cenkarioz
la source
9

Assurez-vous que les Find implicit Dependenciesoptions de construction dans Scheme sont activées!

Nik Kov
la source
7

J'ai également rencontré la même erreur il y a quelques jours. Voici comment j'ai résolu le problème:

L'erreur est "module introuvable"

  • Créer un fichier pod dans votre répertoire racine de projet
  • Installer des cocoapods (un gestionnaire de dépendances pour les projets Swift et iOS)
  • Exécutez l'installation du pod
  • Accédez aux paramètres de construction du projet:

    • Trouver l'en-tête de pontage Objective-c sous le compilateur Swift - Génération de code (si vous ne trouvez pas le compilateur Swift ici, ajoutez probablement un nouveau fichier Swift au projet)
    • Faites glisser et déposez le fichier d'en-tête de bibliothèque du côté gauche vers l'en-tête de pontage (voir l'image ci-jointe)entrez la description de l'image ici
  • Créez un nouveau fichier d'en-tête de pontage: par exemple TestProject-Bridging-Header.h et placez-le sous Swift Compiler → Nom d'en-tête d'interface généré par Objective-C (réf, voir l'image ci-dessus)

  • Dans le fichier TestProject-Bridging-Header.h, écrivez #import "Mixpanel / Mixpanel.h"
  • Dans votre fichier Swift, le code doit être: Importer Mixpanel (c'est-à-dire le nom de la bibliothèque)

C'est tout.

vikram jeet singh
la source
Cette réponse a aidé. En essayant de le configurer pour MBProgress, j'ai fini par suivre les instructions sur ios-support.blogspot.com/2017/04/… , qui étaient très similaires.
Vette
6

Ok, la façon dont le même problème a été résolu pour moi a été de définir l'emplacement des données dérivées par rapport au répertoire de l'espace de travail plutôt que de le conserver par défaut. Accédez aux préférences dans xcode. Accédez à l'onglet Emplacements dans les préférences et définissez Données dérivées sur Relatif. J'espère que ça aide.

harshitpthk
la source
Cela n'a fonctionné qu'une seule fois, puis lorsque je lance le problème, je ne trouve pas le module.
nycdanie
5

J'obtenais la même erreur pour

import Firebase

Mais j'ai ensuite remarqué que je n'ajoutais pas de pod à la section cible principale, mais seulement que je ajoutais aux cibles Test et TestUI dans Podfile.

Avec la commande

pod init

pour un projet xcode swift, le Podfile suivant est généré

# 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

Donc, assurez-vous que l'on ajoute des pods à tout espace réservé approprié.

Zeeawan
la source
5

Si vous construisez pour une plate-forme comme tvOS, assurez-vous d'avoir sélectionné un simulateur Apple TV (c'est-à-dire correspondant).

La création d'une application tvOS avec un simulateur iOS sélectionné m'a donné exactement cette erreur. J'ai passé la meilleure partie d'une heure à chercher toutes sortes de problèmes de construction ... doh.

Jordan Smith
la source
1
Il en va de même si vous choisissez "Mon Mac" lors de la création d'un projet iOS. Je ne sais pas pourquoi Xcode autorise même cela ... 😒
Klaas
Je vous remercie! Si évident maintenant, mais l'erreur me faisait chercher des solutions plus compliquées!
Dan Messing
5

Dans mon cas, l'application IPHONEOS_DEPLOYMENT_TARGET a été définie sur 9.3 alors que dans mon nouveau cadre, elle a été définie sur 10.2

Le résolveur de dépendances implicites a ignoré mon nouveau cadre, car les exigences de la plate-forme cible sont supérieures aux exigences de l'application.

Après avoir ajusté la cible de déploiement iOS du cadre pour correspondre à ma cible de déploiement d'application, le cadre a été compilé et lié avec succès.

berbie
la source
Merci. Après avoir perdu plusieurs heures, j'ai trouvé que la cible de déploiement était le problème.
niks
4

J'obtenais la même erreur que j'ai ajouté quelques cadres en utilisant Cocoapods. Si nous utilisons des pods dans notre projet, nous devrions utiliser à la xcodeworkspaceplace de xcodeproject. Pour exécuter le projet via xcodebuild, j'ai ajouté un -workspace <workspacename>paramètre dans la xcodebuildcommande et cela a parfaitement fonctionné.

pawan singh
la source
Si vous avez une NOUVELLE question, veuillez la poser en cliquant sur le bouton Poser une question . Si vous avez une réputation suffisante, vous pouvez voter pour la question. Vous pouvez également le "mettre en vedette" comme favori et vous serez informé de toute nouvelle réponse.
Alessandro Cuttin
@pawan singh vous avez économisé plusieurs heures pour moi, merci!
Dmitry Senkovich
3

J'ai trouvé que le Import Pathsdans Build Settingsétait incorrect pour un module personnalisé (MySQL). Après avoir indiqué que dans la bonne direction, le message avait disparu.

qwerty_so
la source
@rplankenhorn Eh bien, là où vous les avez placés sur votre machine. Exécutez un findsi vous ne le savez pas.
qwerty_so
3

J'ai corrigé cela avec

Cibles -> Général -> Framework et bibliothèques liés

Ajoutez le framework qui doit être en haut du Workspacedossier. Douleur dans le cul.

Magoo
la source
3

Je viens de supprimer mon cocoapod. Ensuite, j'ai fait une installation de pod pour le supprimer. Ensuite, je viens de le rajouter dans mon podfile et de le réinstaller. Cela l'a fait fonctionner. Pas certain de pourquoi.

Daniel Jones
la source
3

J'avais déjà installé des pods. La construction a fonctionné sans aucun problème lorsque j'ai créé l'application sur mon appareil, mais l'archivage n'a pas fonctionné. Je viens de courir:

pod install

aucun nouveau module n'a été installé, juste le fichier .xcodeproj a été régénéré et l'archive a commencé à fonctionner

Vojta
la source
3

Dans Xcode 10.1, la solution pour moi était de changer le système de construction dans Paramètres de l' espace de travail dans le menu Fichier. Il est par défaut défini sur Nouveau système de construction , changé en Système de construction hérité et cela a fait l'affaire.

entrez la description de l'image ici

MFA
la source
Merci mec, tu m'as sauvé la journée! +1
DungeonDev
3

Il existe plusieurs erreurs de configuration potentielles pour lesquelles le problème peut survenir,

  1. Veuillez confirmer que vous avez ouvert le fichier .xcworkspacemais pas .xcodeproj. Assurez-vous également que vous avez construit Socialavant de construire TriviaApp.
  2. Assurez-vous que la cible de déploiement iOS est définie de la même manière pour tous les modules avec l'application principale. Par exemple, si la TriviaAppcible de déploiement est définie sur 9.0, la Socialcible de déploiement doit également être définie sur 9.0.
  3. Assurez-vous que votre module principal ( TriviaApp) et votre framework utilisé ( Social) ont le même ensemble de configurations. à savoir si votre projet a trois configurations, Debug, Release, ReleasePremiumque votre cadre social doivent également avoir trois configurations Debug, Release, ReleasePremium. Assurez-vous également que la configuration de l'archive est la même pour les deux TriviaAppet Social. c'est-à-dire que si votre TriviaAppschéma d'archive est défini sur ReleasePremium, votre Socialschéma d'archive s doit également être défini dans ReleasePremium.
  4. Veuillez vous assurer que vous n'avez pas besoin d'importer Socialdans chaque .swiftfichier lorsqu'il est déjà ajouté dans le Bridging-Header.h.
  5. En cas de problème provenait de fichiers Pod, assurez - vous que vous avez décommenté #use_frameworks!dans use_frameworks!de vous Podfile. Parfois, la réinstallation de pod fonctionne si Socialelle dépend des pods.
  6. Si aucune des étapes ci-dessus ne fonctionne, supprimez votre dossier de données dérivé et essayez de reconstruire.
Sazzad Hissain Khan
la source
Wow, je ne l'aurais jamais compris sans votre aide. En effet, j'avais une configuration personnalisée ajoutée à mon projet principal, mais elle manquait dans le framework.
Iulian Onofrei
@lulian heureux de savoir que cela a aidé
Sazzad Hissain Khan
2

Si vous utilisez Carthage, les cadres de construction restent généralement

$(PROJECT_DIR)/Carthage/Build/iOS

Si vous exécutez carthage update --platform ios --no-build(pour gagner du temps) les fichiers dans le dossier Build ne seront pas recréés, alors les modules ne seront pas disponibles pour XCode.

Dans mon cas, j'ai couru carthage update --platform ios, puis mon problème a été résolu.

Ronaldo Albertini
la source
2

En général => Frameworks et bibliothèques liés, j'ai ajouté mon ./Pods/Pods.xcodeprojet ça a fait l'affaire

michel
la source
2

Pour moi, Build Active Architecture Only a été défini sur Yes pour la configuration sélectionnée. Cela a fait l'affaire:

Sélectionnez "Pods" dans le navigateur de projet de gauche> Sélectionnez "Build Settings"> Build Active Architecture Only to No

boa_in_samoa
la source
1

Si toutes les méthodes ci-dessus n'ont pas fonctionné pour vous, comme dans mon cas. Il n'y a eu aucun problème la veille mais le lendemain matin, j'ai fait face à la même erreur. Je viens de supprimer les cadres en supprimant les références et de les ajouter à nouveau. Je sais que cela peut sembler idiot, mais le tour est joué.

Soham Ray
la source
1

J'ai eu un problème similaire avec le chargement de FacebookSDK, j'ai ajouté ~ / Documents / FacebookSDK (recherche où se trouvent vos cadres) aux chemins de recherche du cadre dans les paramètres de construction et après cela, j'ai pu importer le module FBSDKShareKit

kalafun
la source
1

Pour ce que ça vaut (je suis novice en utilisant Xcode 7.2 / Swift 2), mais j'ai remarqué que le simple fait d'avoir le fichier .swift de la bibliothèque dans le répertoire du projet vous donne automatiquement accès et n'a pas besoin de l'instruction using.

Exemple: j'utilise SwiftyJSON et le simple fait d'avoir le fichier SwiftyJSON.swift dans le projet était tout ce dont j'avais besoin. La usingdéclaration me donnait en fait l'erreur «pas de module» et le retirer l'a résolue, et cela fonctionne très bien.

markiyanm
la source