Obteniendo el error "No hay tal módulo" usando Xcode, pero el marco está ahí

344

Actualmente estoy codificando en Swift, y tengo un error:

No existe tal módulo Social

Pero no entiendo, porque el módulo está en mi proyecto, declarado en "Marcos vinculados y bibliotecas" y en "Binarios incrustados".

El marco está en Objective-C, así que escribí un encabezado de puente para él.

Por favor, ¿cómo puedo hacer que Xcode reconozca el marco?

Módulo de error

Proyecto

Enlaces Marcos, Bibliotecas

Puente de cabecera

alexandresecanove
fuente
20
No ser demasiado señor. obvio, pero ¿has intentado una limpieza y construcción completas?
Kalel Wade
28
Si el encabezado del marco ya está incluido en el archivo de encabezado de puente, entonces no tiene que importarlo en el archivo fuente Swift.
Martin R
2
También es posible que deba utilizar comillas para la importación:#import "Social/Social.h"
Martin R
3
mismo error con CocoaPods 'no hay tal error de módulo' en xcode.
AsimRazaKhan
1
Cambié el Objetivo de implementación de 11 a 10, pero olvídalo en Podfile platform :ios, '10.0'. Esa fue la solución.
Artur Guseynov

Respuestas:

321

No estoy seguro de por qué sucede esto, pero una forma de resolver su problema es ir a la configuración de compilación y definir las Rutas de búsqueda del marco a una carpeta que contenga los marcos en cuestión. Si los marcos se colocan en el directorio de su proyecto, simplemente configure la ruta de búsqueda del marco en $(SRCROOT)y recursiva.

terhechte
fuente
55
Gracias. Tenía que hacer esto en la configuración de compilación de mi proyecto en lugar de la configuración de compilación de mi objetivo
Pulsar
8
El truco para mí fue encontrar una ruta al marco para usar en las Rutas de búsqueda del marco. $ {TARGET_BUILD_DIR} /YourFrameworkName.framework funciona bien para mí. Ver también stackoverflow.com/questions/32816507/…
Chris Prince
11
Tenía que hacer esto en Project Build Settingslugar de Target Build Settings.
Maxim Mikheev
378
Arreglé esto yendo al baño. Cuando regresé estaba funcionando. Estoy bastante seguro de que intenté todo en este hilo, no sé exactamente qué hizo el trabajo. También recé en algún momento.
nmdias
2
NOTA SOBRE EL ARREGLO: $ (SRCROOT) solo funcionó para mí cuando lo agregué a la Ruta de búsqueda de Framework PARA EL PROYECTO PODS.
addzo
546

En caso de que sea viernes por la tarde o en cualquier momento después de la 1 a. M .:

Abrir en xcodeprojlugar de xcworkspaceprovocará un error como este ...

capikaw
fuente
2
Intenté esto como un santo grial. Gracioso. Quién sabe, pero salir y volver a abrir el espacio de trabajo también funcionó. Limpiar, luego construir.
mondousage
3
9pm usando fastlane, especificó el gimnasio (proyecto: ---) en lugar de gimnasio (espacio de trabajo: ----) ¡Gracias!
RickiG
1
Esto me sucedió después de que Xcode se bloqueó y seleccioné la aplicación 'reabrir' del informe de error. Lo sabré mejor la próxima vez.
Sello del
Reinstalé XCODE y recibí este error porque estaba abriendo la aplicación a través de los proyectos abiertos recientemente. Cerró el proyecto, Archivo -> Abrir -> seleccione el archivo xcworkspace y todo funcionó.
Dpedrinha
También se aplica a la construcción en la línea de comando (nuestro problema): xcodebuild -workspace yourproject.workspace.
Ben Butzer
57

Asegúrese de que el nombre de sus configuraciones en los subproyectos coincida con el del proyecto "principal". Si el nombre de la configuración no coincide exactamente (distingue entre mayúsculas y minúsculas), Xcode cancelará el proceso de archivo y mostrará el error "No existe tal módulo ..."

Es decir, si tiene un proyecto "principal" con una configuración llamada "AppStore", debe asegurarse de que todos los subproyectos también tengan este nombre de configuración.

Ver mis capturas de pantalla adjuntas.

Configuración de configuración en proyecto "padre"

Configuración de la configuración en el primer subproyecto

Configuración de la configuración en el segundo subproyecto

Groot
fuente
1
En mi caso, el subproyecto tenía solamente Debugy Distributionya su proyecto padre estaba tratando de construir para Release. La solución fue hacer una copia del Distributionproyecto secundario y cambiar el nombre de esa copia Release.
olivaresF
2
Esto me llevó a encontrar el problema, pero lo resolví agregando a las rutas de búsqueda del marco en mis configuraciones personalizadas, ya que no quería tocar un subproyecto de terceros :)
DeFrenZ
Eso solucionó el problema! Bien hecho :)
alicanbatur
¡Gracias! He tenido 3 configuraciones en mi proyecto principal. Entonces, hice lo mismo para framework y me ayudó.
daxh
¿Alguna pista sobre cómo hacer que Xcode cree una configuración específica de subproyecto anidado? No quiero renombrar configuraciones de subproyectos, ya que se vuelve demasiado conectado agregar nuevas configuraciones al proyecto principal
Dren
44

No estoy muy seguro de por qué se ignora la respuesta de Martin R en los comentarios a la pregunta:

Asegúrese de haber intentado simplemente omitir la importación del marco ya que ya se agregó con el encabezado de puente .

Espero que esto ayude

Mike K
fuente
37

Tuve el mismo problema al usar Cocoapods y Swift . No noté las siguientes líneas en el Podfile:

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

Entonces, todo lo que tuve que hacer fue cambiarlo a:

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

... y funcionó :)

nburk
fuente
Sí, para mí use_frameworks ni siquiera estaba en mi Podfile, así que lo
agregué
22

Compare esta captura de pantalla con su configuración de compilación. Puede que esto funcione. Vaya a la ruta de búsqueda del marco:

Ingrese la descripción de la imagen aquí

Krutarth Patel
fuente
También mencionado por Chris Prince .
Franklin Yu
18

Estaba experimentando este problema también. La solución para mí fue que los esquemas de archivo entre los dos proyectos no coincidían. Tengo un xcworkspace con un proyecto de marco y un proyecto de aplicación. El problema era que en el esquema de archivo para mi aplicación, estaba usando una configuración de compilación diferente a la que usaba el marco para su esquema de archivo. Configuré ambas configuraciones de compilación para liberar, y eso solucionó el problema.

mikepj
fuente
Esto funcionó para mí. Configuré mi proyecto principal Build Config nuevamente en Release (from Distribution) y ahora coincide con el subproyecto. Todo trabajando ¡Gracias!
Charlie Seligman
1
Nuestro marco no tenía la configuración AdHoc que usamos para el proyecto, lo que significa que no se creó junto con el proyecto.
Johan
15

Los siguientes pasos me funcionaron.

  1. Salir de xcode
  2. Correr "pod update"en la terminal
  3. Abrir .xcworkspacey construir de nuevo.
john raja
fuente
1
Estos pasos funcionaron para mí ... Gracias ... Ejecuté "Pod install" pero no estaba obteniendo "Módulo XXX no encontrado", pero al salir de XCode y luego volver a abrir Workspace me ayudó ...
Aks
Mi problema es que después de agregar una nueva configuración de compilación y esquema obtuve "Módulo no encontrado ..." Salir de Xcode no funciona, después de pod installque funciona.
William Hu
Esto funcionó para mí. ¿Alguna explicación de por qué esto soluciona el problema?
Nico Cernek
Funcionó para mi. Después de volver a abrir projectname.xcworkspace, necesita limpiar y reconstruir nuevamente para que funcione.
Prashant
14

En mi caso, después de muchos intentos de descubrir qué estaba haciendo mal al importar un marco, finalmente descubrí que el marco en sí era el problema. Si no obtiene su marco de una fuente confiable, debe inspeccionar el marco y asegurarse de que contenga una carpeta Módulos con un archivo module.modulemap dentro. Si module.modulemap no está presente, obtendrá el error "No existe tal módulo 'MyFramework'".

Ejemplo que muestra la estructura de directorios de SwiftyJSON.framework

Si a la carpeta Módulos le falta la carpeta "MyFramework.swiftmodule", se encontrará el marco, pero Xcode no sabrá sobre su contenido, por lo que obtendrá diferentes errores.

mcsheffrey
fuente
2
Por alguna razón, esto no se muestra en xcode 9.1 incluso cuando está presente. Haga clic derecho en su marco> Mostrar en Finder> y asegúrese de que su mapa de módulo esté allí. Si está utilizando un marco manual en un proyecto de pods, reconstruya sus pods si acaba de agregar un nuevo marco manual o actualizar uno existente.
Christopher Larsen
1
¡Gracias! Creé el archivo yo mismo y funcionó: módulo de marco NAME {cabecera general "NAME.h" export * module * {export *}}
Sjoerd realiza el
12

Asumiendo que el Framework realmente está allí y en la ruta, etc., elimine el directorio ~ / Library / Developer / Xcode / DerivedData / ModuleCache (y limpie el proyecto y elimine los datos derivados específicos del proyecto para una buena medida).

Cuando realiza la limpieza estándar, el directorio ModuleCache no se reconstruye.

Brad Brighton
fuente
1
Simplemente lo hice como me dijiste, y no funciona: /
alexandresecanove
1
Entonces es posible que se enfrente a un problema diferente que simplemente se parecía al que encontré. : - /
Brad Brighton
Estaba teniendo el mismo problema con un Cocoapod y eliminar los archivos en ModuleCache me ayudó.
HolySamosa
10

Lo que funcionó para mí es esta solución a otra pregunta. Cerrar Xcode y reabrir el proyecto como espacio de trabajo.
Vaya a la carpeta de su proyecto y abra el .xcodeworkspace archivo.
Una vez que abra el espacio de trabajo (en lugar del proyecto), los Pods deberían aparecer como proyecto de nivel superior en Project Navigator.

cenkarioz
fuente
9

¡Asegúrese de que las Find implicit Dependenciesopciones de compilación en Scheme estén activadas!

Nik Kov
fuente
Esto funcionó para mí ..
Abhinav Dobhal
7

También encontré el mismo error hace unos días. Así es como resolví el problema:

El error es "módulo no encontrado"

  • Cree Podfile en su directorio de proyecto raíz
  • Instalar cocoapods (un administrador de dependencias para proyectos Swift e iOS)
  • Ejecute la instalación de pod
  • Vaya a Configuración de compilación del proyecto:

    • Encuentre el encabezado de puente de Objective-c en el compilador Swift - Generación de código (si no encuentra el compilador Swift aquí, probablemente agregue un nuevo archivo Swift al proyecto)
    • Arrastre y suelte el archivo de encabezado de la biblioteca desde el lado izquierdo al encabezado de puente (ver imagen adjunta)ingrese la descripción de la imagen aquí
  • Cree un nuevo archivo de encabezado de puente: por ejemplo, TestProject-Bridging-Header.h y colóquelo en Swift Compiler → Objective-C Generated Interface Header Name (ref, vea la imagen de arriba)

  • En el archivo TestProject-Bridging-Header.h, escriba #import "Mixpanel / Mixpanel.h"
  • En su archivo Swift, el código debe ser: Importar Mixpanel (es decir, nombre de la biblioteca)

Eso es todo.

vikram jeet singh
fuente
Esta respuesta ayudó. Cuando traté de configurarlo para MBProgress, terminé siguiendo las instrucciones en ios-support.blogspot.com/2017/04/… , que era muy similar.
Vette
6

Ok, cómo se resolvió el mismo problema para mí fue establecer la ubicación de los datos derivados en relación con el directorio del espacio de trabajo en lugar de mantenerlo predeterminado. Ir a las preferencias en xcode. Vaya a la pestaña de ubicaciones en las preferencias y configure los Datos derivados en Relativo. Espero eso ayude.

harshitpthk
fuente
Funcionó solo una vez, luego, cuando ejecuto, pasa al mismo problema de no encontrar el módulo.
nycdanie
5

Estaba recibiendo el mismo error para

import Firebase

Pero luego noté que no estaba agregando pod a la sección de destino principal, sino solo agregando a los objetivos Test y TestUI en Podfile.

Con el comando

pod init

para un proyecto xcode swift, se genera el siguiente 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

Por lo tanto, debe asegurarse de agregar uno a cualquier marcador de posición apropiado.

zeeawan
fuente
5

Si está construyendo para una plataforma como tvOS, asegúrese de tener un simulador de Apple TV (es decir, coincidente) seleccionado.

Construir una aplicación tvOS con un simulador de iOS seleccionado me dio exactamente este error. Pasé la mayor parte de una hora buscando todo tipo de problemas de compilación ... doh.

Jordan Smith
fuente
1
Lo mismo se aplica si elige "Mi Mac" al crear un proyecto de iOS. No sé por qué Xcode incluso permite esto ... Kla
Klaas
¡Gracias! ¡Tan obvio ahora, pero el error me estaba haciendo buscar soluciones más complicadas!
Dan Messing
5

En mi caso, la aplicación IPHONEOS_DEPLOYMENT_TARGET se configuró en 9.3, mientras que en mi marco recién creado se configuró en 10.2

El solucionador de dependencias implícitas ignoró mi nuevo marco porque los requisitos de la plataforma de destino son más altos que los requisitos de la aplicación.

Después de ajustar el objetivo de implementación de iOS del marco para que coincida con el objetivo de implementación de mi aplicación, el marco se compiló y se vinculó correctamente.

Berbie
fuente
Gracias. Después de perder varias horas, descubrí que el objetivo del despliegue era el problema.
niks
4

Recibía el mismo error cuando agregué un par de marcos usando Cocoapods. Si estamos usando Pods en nuestro proyecto, deberíamos usarlo en xcodeworkspacelugar de xcodeproject. Para ejecutar el proyecto a través de xcodebuild, agregué el -workspace <workspacename>parámetro en el xcodebuildcomando y funcionó perfectamente.

pawan singh
fuente
Si tiene una pregunta NUEVA, hágala haciendo clic en el botón Hacer pregunta . Si tiene suficiente reputación, puede votar la pregunta. Alternativamente, "marque" como favorito y se le notificará de cualquier nueva respuesta.
Alessandro Cuttin
@pawan singh ahorraste varias horas para mí, ¡gracias!
Dmitry Senkovich
3

He encontrado que la Import Pathsde la Build Settingsera equivocada para un módulo personalizado (MySQL). Después de señalar eso en la dirección correcta, el mensaje desapareció.

qwerty_so
fuente
@rplankenhorn Bueno, justo donde los has puesto en tu máquina. Ejecute un findsi no lo sabe.
qwerty_so
3

Arreglé esto con

Objetivos -> General -> Marcos vinculados y bibliotecas

Agregue el marco que debe estar en la parte superior de la Workspacecarpeta. Dolor en el culo.

Magoo
fuente
3

Acabo de eliminar mi cocoapod. Luego, hice una instalación de pod para eliminarlo. Luego, lo agregué nuevamente a mi podfile y lo reinstalé. Eso lo hizo funcionar. No estoy seguro de por qué.

Daniel Jones
fuente
3

Ya había instalado pods. Build funcionó sin problemas cuando construí la aplicación en mi dispositivo, pero el archivo no funcionó. Acabo de correr:

pod install

no se instalaron nuevos pods, solo el archivo .xcodeproj se regeneró y el archivo comenzó a funcionar

Vojta
fuente
3

En Xcode 10.1, la solución para mí fue cambiar el sistema de compilación en la Configuración del espacio de trabajo en el menú Archivo. Está configurado de forma predeterminada en Nuevo sistema de compilación , lo cambió a Sistema de compilación heredado y eso funcionó.

ingrese la descripción de la imagen aquí

AMF
fuente
Gracias amigo, me salvaste el día! +1
DungeonDev
3

Hay varias posibles configuraciones erróneas por las que puede surgir el problema,

  1. Confirme que ha abierto el archivo .xcworkspacepero no el .xcodeprojarchivo. También asegúrese de tener compilación Socialantes de construir TriviaApp.
  2. Asegúrese de que iOS Deployment Target esté configurado de la misma manera para todos los módulos con la aplicación principal. Por ejemplo, si TriviaAppel objetivo de implementación está establecido en 9.0, Socialel objetivo de implementación también debe establecerse en 9.0.
  3. Asegúrese de que su módulo principal ( TriviaApp) y su marco utilizado ( Social) tengan el mismo conjunto de configuraciones. es decir, si su proyecto tiene tres configuraciones, Debug, Release, ReleasePremiumque su marco social también es necesario tener tres configuraciones Debug, Release, ReleasePremium. También asegúrese de que la configuración de archivo esté establecida para ambos TriviaAppy Social. es decir, si su TriviaAppesquema de archivo s está configurado en ReleasePremium, Socialtambién es necesario configurar su esquema de archivo s ReleasePremium.
  4. Asegúrese de que no necesita importar Socialen cada .swiftarchivo cuando ya está agregado en Bridging-Header.h.
  5. En caso de problema vino de archivos Pod, asegúrese de que ha descomentado #use_frameworks!en use_frameworks!de usted Podfile. En algún momento, la reinstalación de pod funciona si Socialtiene alguna dependencia de los pods.
  6. Si ninguno de los pasos anteriores funciona, elimine su carpeta de datos derivados e intente reconstruir.
Sazzad Hissain Khan
fuente
Wow, nunca lo habría descubierto sin tu ayuda. De hecho, tenía una configuración personalizada agregada a mi proyecto principal, pero faltaba en el marco.
Iulian Onofrei
@lulian feliz de saber que ayudó
Sazzad Hissain Khan
2

Si está utilizando Cartago, los marcos en la configuración del edificio generalmente permanecen en

$(PROJECT_DIR)/Carthage/Build/iOS

Si ejecuta carthage update --platform ios --no-build(para ahorrar tiempo) los archivos dentro de la carpeta Build no se volverán a crear, entonces los módulos no estarán disponibles para XCode.

En mi caso, he corrido carthage update --platform ios, entonces mi problema fue resuelto.

Ronaldo Albertini
fuente
2

En General => Marcos y bibliotecas vinculados, agregué mi ./Pods/Pods.xcodeproje hizo el truco

michel
fuente
2

Para mí, Build Active Architecture Only se configuró en Sí para la configuración seleccionada. Esto hizo el truco:

Seleccione "Pods" en el navegador de proyectos izquierdo> Seleccione "Configuración de compilación"> Construir arquitectura activa solo para no

boa_in_samoa
fuente
1

Si todos los métodos anteriores no funcionaron para usted, como en el caso mío. No hubo ningún problema el día anterior pero a la mañana siguiente me enfrenté al mismo error. Acabo de eliminar los marcos quitando referencias y nuevamente los agregué. Sé que esto puede sonar tonto, pero listo funcionó.

Soham Ray
fuente
1

Tuve un problema similar al cargar FacebookSDK, agregué ~ / Documents / FacebookSDK (busque dónde están sus marcos) a las rutas de búsqueda de Marco en la configuración de compilación y luego pude importar el módulo FBSDKShareKit

kalafun
fuente
1

Por lo que vale (soy nuevo en esto usando Xcode 7.2 / Swift 2), pero noté que solo tener el archivo .swift de la biblioteca en el directorio del proyecto automáticamente te da acceso a él y no necesita la declaración de uso.

Ejemplo: estoy usando SwiftyJSON y solo tener el archivo SwiftyJSON.swift en el proyecto fue todo lo que necesitaba. La usingdeclaración en realidad me estaba dando el error 'no hay tal módulo' y al eliminarlo lo resolvió, y funciona bien.

markiyanm
fuente