Ottenere l'errore "Nessun modulo di questo tipo" utilizzando Xcode, ma il framework è lì


344

Attualmente sto codificando in Swift e ho un errore:

Nessun tale modulo Social

Ma non capisco, perché il modulo è nel mio progetto, dichiarato in "Framework e librerie collegate" e in "Binari incorporati".

Il framework è in Objective-C, quindi ho scritto una Bridge Header per questo.

Per favore, come posso fare in modo che Xcode riconosca il framework?

Modulo errore

Progetto

Collega quadri, librerie

Ponte di intestazione


20
Non essere troppo signor. ovvio ma hai provato un clean and build completo?
Kalel Wade,

28
Se l'intestazione del framework è già inclusa nel file di intestazione ponte, non è necessario importarla nel file di origine Swift.
Martin R

2
Inoltre potresti dover usare le virgolette per l'importazione:#import "Social/Social.h"
Martin R

3
stesso errore con CocoaPods "nessun errore del modulo" in xcode.
AsimRazaKhan,

1
Ho cambiato il Deployment Target da 11 a 10, ma lo dimentico in Podfile platform :ios, '10.0'. Questa era la soluzione.
Artur Guseynov,

Risposte:


322

Non sono sicuro del perché ciò accada, ma un modo per risolvere il problema è accedere alle impostazioni di compilazione e definire i percorsi di ricerca del framework in una cartella che contenga i framework in questione. Se i framework vengono inseriti nella directory del progetto, è sufficiente impostare il percorso di ricerca del framework su $(SRCROOT)e impostarlo su ricorsivo.


5
Grazie. Ho dovuto farlo nelle impostazioni di compilazione del mio progetto piuttosto che nelle impostazioni di compilazione di destinazione
Pulsar,

8
Il trucco per me era trovare un percorso per il framework da utilizzare nei percorsi di ricerca del framework. $ {TARGET_BUILD_DIR} /YourFrameworkName.framework funziona bene per me. Vedi anche stackoverflow.com/questions/32816507/…
Chris Prince,

11
Ho dovuto fare questo Project Build Settingsinvece di Target Build Settings.
Maxim Mikheev,

378
Ho risolto questo problema andando in bagno. Quando sono tornato funzionava. Sono abbastanza sicuro di aver provato tutto in questo thread, non so esattamente cosa ha fatto il lavoro. Ho anche pregato ad un certo punto.
nmdias,

2
NOTA SUL FIX: $ (SRCROOT) ha funzionato solo per me quando l'ho aggiunto al percorso di ricerca del framework FOR THE PODS PROJECT.
addzo

549

Nel caso sia venerdì pomeriggio o in qualsiasi momento dopo l'01:

L'apertura xcodeprojanziché xcworkspacecausa un errore come questo ...


2
L'ho provato come un santo graal. Divertente. Chi lo sa, ma uscendo e riaprendo lo spazio di lavoro ha funzionato pure. Pulisci, quindi costruisci.
mondousage,

3
21:00 usando fastlane, specificato la palestra (progetto: ---) invece della palestra (area di lavoro: ----) Grazie!
RickiG,

1
Questo è successo a me dopo l'arresto anomalo di Xcode e ho selezionato l'applicazione 'riapri' dalla segnalazione dei bug. Lo saprò meglio la prossima volta.
Timbro

Ho reinstallato XCODE e ho riscontrato questo errore perché stavo aprendo l'app tramite i progetti aperti di recente. Chiuso il progetto, File -> Apri -> seleziona il file xcworkspace e tutto ha funzionato.
Dpedrinha,

Si applica anche alla creazione dalla riga di comando (il nostro problema): xcodebuild -workspace yourproject.workspace.
Ben Butzer,

57

Assicurarsi che la denominazione delle configurazioni nei progetti secondari corrisponda a quella del progetto "padre". Se la denominazione della configurazione non corrisponde esattamente (con distinzione tra maiuscole e minuscole), Xcode interromperà il processo di archiviazione e mostrerà l'errore "Nessun modulo del genere ..."

Cioè, se si dispone di un progetto "padre" con una configurazione denominata "AppStore", è necessario assicurarsi che anche tutti i sottoprogetti abbiano questo nome di configurazione.

Vedi i miei screenshot allegati.

Impostazione della configurazione nel progetto "padre"

Impostazione della configurazione nel 1 ° sottoprogetto

Impostazione della configurazione nel 2 ° sottoprogetto


1
Nel mio caso, il sottoprogetto aveva solo Debuge Distributione il suo progetto principale stava cercando di costruire Release. La soluzione era fare una copia del Distributionprogetto figlio e rinominare quella copia Release.
olivaresF

2
Questo mi ha portato a trovare il problema, ma l'ho risolto aggiungendo ai percorsi di ricerca del framework nelle mie configurazioni personalizzate poiché non volevo toccare un sottoprogetto di terze parti :)
DeFrenZ,

Grazie! Ho avuto 3 configurazioni nel mio progetto principale. Quindi, ho fatto lo stesso per framework e mi ha aiutato.
daxh

Qualche indizio su come fare in modo che Xcode costruisca una configurazione specifica del sottoprogetto nidificato? Non voglio rinominare le configurazioni dei sottoprogetti, poiché diventa troppo connessa all'aggiunta di nuove configurazioni al progetto principale
Dren,

Questo ha funzionato per me poiché il mio progetto aveva 3 configurazioni, che sono state rinominate dalle configurazioni "Debug" e "Release" predefinite. Ho aggiornato il mio framework per avere le stesse 3 configurazioni, costruito il framework e tutto ha funzionato come previsto.
Yuri,

44

Non sono del tutto sicuro del motivo per cui la risposta di Martin R nei commenti alla domanda sia così ignorata:

Assicurati di aver semplicemente provato a saltare l'importazione del framework poiché è già stato aggiunto con l'intestazione bridge .

Spero che questo ti aiuti


38

Ho avuto lo stesso problema con Cocoapods e Swift . Non ho notato le seguenti righe nel Podfile:

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

Quindi, tutto quello che dovevo fare era cambiarlo in:

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

... e ha funzionato :)


Sì, per me use_frameworks non era nemmeno nel mio Podfile, quindi l'ho aggiunto
PhoenixB


18

Stavo riscontrando anche questo problema. La soluzione per me era che gli schemi di archiviazione tra i due progetti non corrispondevano. Ho un xcworkspace con un progetto quadro e un progetto app. Il problema era che nello schema Archive per la mia app, stavo usando una configurazione di build diversa da quella utilizzata dal framework per il suo schema Archive. Ho impostato entrambe le configurazioni di build su Release e questo ha risolto il problema.


Questo ha funzionato per me. Ho impostato il mio progetto principale Build Config su Release (da Distribution) e quindi ora corrisponde al progetto secondario. Tutto funzionante. Grazie!
Charlie Seligman,

1
Il nostro framework non aveva la configurazione AdHoc che abbiamo usato per il progetto, il che significa che non è stato creato insieme al progetto.
Johan

15

I seguenti passaggi hanno funzionato per me.

  1. Esci da xcode
  2. Esegui "pod update"nel terminale
  3. Apri .xcworkspacee costruisci di nuovo.

1
Questi passaggi hanno funzionato per me ... Grazie ... Ho eseguito "Installazione pod" ma non ho ricevuto "Modulo XXX non trovato via .." ma dopo aver chiuso XCode e riaperto Workspace mi ha aiutato ..
Aks

Il mio problema è che dopo aver aggiunto la nuova configurazione di build e lo schema ho ottenuto "Modulo non trovato ..." Esci da Xcode non funziona, dopo pod installche funziona.
William Hu,

Questo ha funzionato per me. Qualche spiegazione sul perché questo risolva il problema?
Nico Cernek,

Ha funzionato per me. Dopo aver riaperto projectname.xcworkspace, è necessario pulirlo e ricostruirlo nuovamente per farlo funzionare.
Prashant,

14

Nel mio caso, dopo molti tentativi di capire cosa stavo facendo male importando un framework, ho scoperto che il problema era il framework stesso. Se non si ottiene il framework da una fonte attendibile, è necessario controllare il framework e assicurarsi che contenga una cartella Modules con un file module.modulemap al suo interno. Se module.modulemap non è presente, verrà visualizzato l'errore "No such module 'MyFramework'".

Esempio che mostra la struttura di directory di SwiftyJSON.framework

Se nella cartella Moduli manca la cartella "MyFramework.swiftmodule", verrà trovato il framework ma Xcode non sarà a conoscenza del suo contenuto, quindi si avranno diversi errori.


2
Per qualche motivo questo non è mostrato in xcode 9.1 anche quando è presente. Fai clic con il tasto destro sul tuo framework> Mostra nel Finder> e assicurati che la tua modulemap sia presente. Se stai usando un framework manuale in un progetto di pod, ricostruisci i tuoi pod se hai appena aggiunto un nuovo framework manuale o ne hai aggiornato uno esistente.
Christopher Larsen,

1
Grazie! Ho creato il file da solo e ha funzionato: modulo framework NAME {header header "NAME.h" export * module * {export *}}
Sjoerd Perfors

12

Supponendo che il Framework sia davvero lì e nel percorso, ecc ... eliminare la directory ~ / Library / Developer / Xcode / DerivedData / ModuleCache (e pulire il progetto ed eliminare i dati derivati ​​specifici del progetto per buona misura).

Quando si esegue la pulizia standard, la directory ModuleCache non viene ricostruita.


1
L'ho appena fatto come mi hai detto, e non funziona: /
alexandresecanove

1
Quindi potresti trovarti di fronte a un problema diverso che sembrava lo stesso di quello che ho riscontrato. : - /
Brad Brighton

Stavo avendo lo stesso problema con un Cocoapod e l'eliminazione dei file in ModuleCache ha fatto il trucco per me.
HolySamosa,

10

Ciò che ha funzionato per me è questa soluzione per un'altra domanda. Chiudere Xcode e riaprire il progetto come area di lavoro.
Vai alla cartella del tuo progetto e apri il .xcodeworkspace file.
Dopo aver aperto l'area di lavoro (anziché il progetto), i Pod dovrebbero apparire come progetto di livello superiore in Project Navigator.


9

Assicurati che Find implicit Dependenciesin Opzioni build in Scheme sia attivo!


7

Ho anche riscontrato lo stesso errore qualche giorno fa. Ecco come ho risolto il problema:

L'errore è "modulo non trovato"

  • Crea Podfile nella directory del progetto principale
  • Installa cocoapods (un gestore dipendenze per progetti Swift e iOS)
  • Esegui installazione pod
  • Vai a Impostazioni build progetto:

    • Trova l'intestazione ponte Objective-c sotto il compilatore Swift - Generazione di codice (se non trovi il compilatore Swift qui, probabilmente aggiungi un nuovo file Swift al progetto)
    • Trascina e rilascia il file di intestazione della libreria dal lato sinistro all'intestazione di bridge (vedi immagine allegata)inserisci qui la descrizione dell'immagine
  • Crea un nuovo file di intestazione ponte: ad esempio TestProject-Bridging-Header.h e inseriscilo in Swift Compiler → Nome intestazione interfaccia generata Objective-C (ref, vedi l'immagine sopra)

  • Nel file TestProject-Bridging-Header.h, scrivi #import "Mixpanel / Mixpanel.h"
  • Nel tuo file Swift il codice dovrebbe essere: Import Mixpanel (cioè il nome della libreria)

È tutto.


Questa risposta ha aiutato. Quando ho provato a configurarlo per MBProgress, ho finito per seguire le istruzioni su ios-support.blogspot.com/2017/04/… , che era molto simile.
Vette,

6

Ok, come lo stesso problema è stato risolto per me era impostare la posizione dei dati derivati ​​rispetto alla directory dell'area di lavoro piuttosto che mantenerla predefinita. Vai alle preferenze in xcode. Vai alla scheda posizioni nelle preferenze e imposta i dati derivati ​​su Relativo. Spero che sia d'aiuto.


Ha funzionato solo una volta, quindi quando corro passa allo stesso problema di non trovare il modulo.
nycdanie,

5

Stavo ottenendo lo stesso errore per

import Firebase

Ma poi ho notato che non stavo aggiungendo pod alla sezione target principale, ma solo aggiungendo target Test e TestUI in Podfile.

Con il comando

pod init

per un progetto xcode swift, viene generato il seguente Podfile

# 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

Quindi, è necessario assicurarsi che si aggiungano i pod a qualsiasi segnaposto appropriato.


5

Se stai costruendo per una piattaforma come tvOS, assicurati di aver selezionato un simulatore Apple TV (ovvero la corrispondenza).

La creazione di un'app tvOS con un simulatore iOS selezionato mi ha dato esattamente questo errore. Ho trascorso la parte migliore di un'ora alla ricerca di tutti i tipi di problemi di build ... doh.


1
Lo stesso vale se si sceglie "My Mac" durante la creazione di un progetto iOS. Non so perché Xcode lo permetta nemmeno ... 😒
Klaas,

Grazie! Così ovvio ora, ma l'errore mi stava facendo cercare soluzioni più complicate!
Dan Messing

5

Nel mio caso l'app IPHONEOS_DEPLOYMENT_TARGET era impostata su 9.3 mentre nel mio framework appena creato era impostata su 10.2

Il risolutore di dipendenze implicite ha ignorato il mio nuovo framework perché i requisiti della piattaforma di destinazione sono superiori ai requisiti dell'app.

Dopo aver regolato il target di distribuzione iOS del framework in modo che corrisponda al target di distribuzione della mia applicazione, il framework è stato compilato e collegato correttamente.


Grazie. Dopo aver perso diverse ore, ho scoperto che il problema era rappresentato dall'obiettivo di distribuzione.
nipoti

4

Stavo ottenendo lo stesso errore che ho aggiunto un paio di framework utilizzando Cocoapods. Se stiamo usando Pod nel nostro progetto, dovremmo usare xcodeworkspaceinvece di xcodeproject. Per eseguire il progetto tramite xcodebuild, ho aggiunto il -workspace <workspacename>parametro in xcodebuildcommand e ha funzionato perfettamente.


Se hai una NUOVA domanda, chiedila facendo clic sul pulsante Poni domanda . Se hai una reputazione sufficiente, puoi votare la domanda. In alternativa, contrassegnalo come preferito e riceverai una notifica di eventuali nuove risposte.
Alessandro Cuttin,

@pawan singh hai risparmiato diverse ore per me, grazie!
Dmitry Senkovich,

3

Ho scoperto che in Import Pathsin Build Settingsera errato per un modulo personalizzato (MySQL). Dopo aver indicato quello nella giusta direzione il messaggio era sparito.


@rplankenhorn Bene, proprio dove li hai messi sulla tua macchina. Esegui un findse non lo conosci.
qwerty_so,

3

Ho risolto questo problema con

Target -> Generale -> Framework e librerie collegati

Aggiungi il framework che dovrebbe essere nella parte superiore della Workspacecartella. Dolore nel culo.


3

Ho appena cancellato il mio cocoapod. Quindi, ho fatto un'installazione pod per rimuoverlo. Quindi, l'ho appena aggiunto nel mio podfile e lo ho reinstallato. Questo l'ha fatto funzionare. Non so perché.


3

Avevo già installato i pod. Build ha funzionato senza problemi quando ho creato un'applicazione sul mio dispositivo, ma l'archivio non ha funzionato. Corro solo:

pod install

non sono stati installati nuovi pod, solo il file .xcodeproj è stato rigenerato e l'archivio ha iniziato a funzionare


3

In Xcode 10.1 la soluzione per me era quella di cambiare il sistema di compilazione in Impostazioni area di lavoro nel menu File. È impostato di default su New Build System , modificato in Legacy Build System e ha funzionato.

inserisci qui la descrizione dell'immagine


Grazie amico, mi hai salvato la giornata! +1
DungeonDev

3

Esistono diverse potenziali configurazioni errate per cui può sorgere il problema,

  1. Conferma di aver aperto il file .xcworkspacema non .xcodeproj. Assicurati anche di aver creato Socialprima di costruire TriviaApp.
  2. Assicurati che iOS Deployment Target sia impostato uguale per tutti i moduli con l'app principale. Ad esempio TriviaApp, la destinazione di distribuzione è impostata su 9.0, Socialanche la destinazione di distribuzione deve essere impostata su 9.0.
  3. Assicurarsi che il modulo principale ( TriviaApp) e il framework utilizzato ( Social) abbiano lo stesso set di configurazioni. vale a dire se il progetto ha tre configurazioni, Debug, Release, ReleasePremiumche il vostro quadro sociale anche bisogno di avere tre configurazioni Debug, Release, ReleasePremium. Assicurarsi inoltre che la configurazione dell'archivio sia impostata sia per entrambi TriviaAppche per Social. cioè se lo TriviaAppschema di archiviazione è impostato su ReleasePremium, Socialè necessario impostare anche lo schema di archiviazione ReleasePremium.
  4. Assicurati di non aver bisogno di importare Socialin ogni .swiftfile quando è già stato aggiunto in Bridging-Header.h.
  5. In caso di problema è venuto da file Pod, assicurarsi di aver non è commentato #use_frameworks!in use_frameworks!da voi Podfile. A volte la reinstallazione del pod funziona se Socialha qualche dipendenza dai pod.
  6. Se nessuno dei passaggi precedenti funziona, elimina la cartella dei dati derivati ​​e prova a ricostruirla.

Wow, non l'avrei mai capito senza il tuo aiuto. In effetti, avevo una configurazione personalizzata aggiunta al mio progetto principale, ma mancava dal framework.
Iulian Onofrei il

@lulian felice di sapere che ha aiutato
Sazzad Hissain Khan il

2

Se stai usando Cartagine, i quadri nell'impostazione dell'edificio di solito rimangono dentro

$(PROJECT_DIR)/Carthage/Build/iOS

Se si esegue carthage update --platform ios --no-build(per risparmiare tempo) i file all'interno della cartella Build non verranno ricreati, i moduli non saranno disponibili per XCode.

Nel mio caso, ho corso carthage update --platform ios, quindi il mio problema è stato risolto.


2

In Generale => Frame e librerie collegate, ho aggiunto il mio ./Pods/Pods.xcodeproje ha fatto il trucco


2

Per me Build Active Architecture Only è stato impostato su Sì per la configurazione selezionata. Questo ha fatto il trucco:

Seleziona "Pod" dal navigatore del progetto sinistro> Seleziona "Crea impostazioni"> Crea architettura attiva solo su No


1

Se tutti i metodi di cui sopra non hanno funzionato per te come nel mio caso. Non ci sono stati problemi nel giorno precedente ma la mattina dopo ho riscontrato lo stesso errore. Ho appena rimosso i framework rimuovendo i riferimenti e li ho nuovamente aggiunti. So che può sembrare sciocco, ma voilà ha funzionato.


1

Ho avuto un problema simile con il caricamento di FacebookSDK, ho aggiunto ~ / Documents / FacebookSDK (cerca dove sono i tuoi framework) ai percorsi di ricerca di Framework nelle impostazioni di Build e successivamente sono stato in grado di importare il modulo FBSDKShareKit


1

Per quello che vale (ne sono nuovo usando Xcode 7.2 / Swift 2), ma ho notato che avere semplicemente il file .swift dalla libreria nella directory del progetto ti dà automaticamente accesso e non ha bisogno dell'istruzione using.

Esempio: sto usando SwiftyJSON e solo il file SwiftyJSON.swift nel progetto era tutto ciò di cui avevo bisogno. L' usingaffermazione in realtà mi stava dando l'errore "nessun modulo del genere" e tirandolo fuori lo ha risolto, e funziona benissimo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.