He importado framework para enviar correos electrónicos desde la aplicación en segundo plano, es decir, SKPSMTPMessage
Framework. ¿Alguien puede sugerir por qué se muestra el siguiente error?
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_SKPSMTPMessage", referenced from:
objc-class-ref in ConfirmController.o
"_kSKPSMTPPartContentTransferEncodingKey", referenced from:
-[ConfirmController sendEmail] in ConfirmController.o
"_kSKPSMTPPartMessageKey", referenced from:
-[ConfirmController sendEmail] in ConfirmController.o
"_kSKPSMTPPartContentTypeKey", referenced from:
-[ConfirmController sendEmail] in ConfirmController.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
Fuente de la que se toma el marco: -
Bloqueo de los campos en MFMailComposeViewController
Actualización :
Respuesta: Simplemente arrastre y suelte la carpeta sobre el proyecto y haga clic en copiar. Eso es seleccionar la casilla de verificación del proyecto y la casilla de verificación de destino también.
Respuestas:
Puede obtener este tipo de error si el archivo .m de su clase no figura en el paso "Compilar orígenes" de la pestaña "Fases de compilación" de su destino. Normalmente, Xcode hace esto por usted, pero a veces pierde la trama y necesita agregar el archivo .m manualmente.
Para hacer esto:
TargetSettings -> Build Fases -> Compile Sources -> add your .m class -> Build and Run
fuente
-lLibraryName_$(PLATFORM_NAME)d
para depuración y agregar-lLibraryName_$(PLATFORM_NAME)
para lanzamientoPara mí, el problema resultó ser la falta de marcos. Una vez que los agregué, funcionó.
fuente
Verifique las propiedades exclusivas de Arquitecturas válidas y Construir arquitectura activa.
fuente
si está utilizando cocoapods, asegúrese de que la configuración de compilación de su objetivo contenga $ (heredado) en la otra sección de indicadores del vinculador
fuente
¿Está compilado su marco para armv (x)? Me parece que está compilado para i386, cuyo código no se ejecutará en un dispositivo iOS. O bien, está compilado para armv (x) y está intentando ejecutarlo en el simulador, que es el código i386. Asegúrese de utilizar la configuración de compilación Akshay que se muestra arriba, que su marco está compilado correctamente para el chip en el que lo va a ejecutar.
fuente
Si importa algún otro proyecto en xcode y si el proyecto actual y el de importación tienen los mismos archivos en la fuente del compilador, simplemente elimine el mismo archivo en el proyecto actual en la configuración de "Fase de compilación". Funcionó para mí.
fuente
Sí, esto está relacionado con lo que dijo Allen ... busque TargetMembership en la sección Utilidades del archivo fuente. hay una casilla de verificación que asocia ese archivo a un proyecto. Verificar esto también resolvió este problema para mí.
fuente
También podría ser que te falte vincular con una Biblioteca Binaria, verifica las Fases de Construcción en tus Targes, agrega las bibliotecas requeridas y luego Producto> Producto Limpio> Crear
¡Eso también debe funcionar!
fuente
Tuve este problema cuando abrí el mismo proyecto dos veces, solo un proyecto era el original y el otro se clonó desde una URL de git.
'Producto'> 'Limpiar' resolvió el problema.
fuente
También me encontré con este problema y lo solucioné comprobando si tanto la fuente de compilación como el enlace binario con la biblioteca contenían todo el archivo / biblioteca / marco que necesitaba.
fuente
Cuando encontré el mismo problema que este:
Resultó que me olvidé de agregar marco. Era QuartzCore.framework para ser exactos.
fuente
prueba este último:
así que probé todas las sugerencias en esta página ... ninguna funcionó ... La forma en que comenzó mi problema fue siguiendo los pasos en este tutorial que enseña cómo vincular bibliotecas estáticas. Con mi proyecto de muestra, las instrucciones funcionaron bien ... pero luego, en mi proyecto real, comencé a recibir el error anterior.
Entonces, lo que hice fue seguir cada paso de dicho tutorial y construir después de cada paso ... la línea ofensiva resultó ser esta: agregando -all_load a la configuración de construcción-> otras banderas de enlace
Resulta que este indicador se recomendó una vez para vincular categorías a bibliotecas estáticas ... pero luego resultó que este indicador ya no era necesario Xcode 4.2+ ... (lo mismo ocurre con el indicador -force_load ... que también era recomendado en otras publicaciones ) ..
fuente
Cuando encontré el mismo problema, olvidé agregar "versión compilada de la biblioteca (con extensión .a)". Normalmente agregamos la biblioteca del proyecto importado en Target Dependency en Build Phases pero olvidamos agregar "biblioteca compilada" en Link Binary with Libraries en Build Phases.
fuente
Agregar lo que funcionó para mí en caso de que otros tengan el mismo problema y terminen aquí. Tenía un proyecto más antiguo que tenía la configuración CLANG_ENABLE_MODULES establecida en No. Después de horas de frustración, me comparé con un proyecto en funcionamiento y descubrí que tenía la opción Activar módulos configurados en no en mi configuración de compilación LLVM. Establecer esto en Sí resolvió mi problema y la aplicación funciona bien.
Configuración del proyecto -> Configuración de compilación -> busque 'Módulos' y Actualice los módulos de habilitación (C y Objective-C) a SÍ.
fuente
No agregué el "-all_load -lstdc ++" a Otros indicadores de vinculador en la configuración de compilación y pude iniciar el sim sin error, pero no obtuve la salida del registro MonkeyTalk cuando lo inicié y el script anterior que escribí que solía conectarse ahora mostró el botón de reproducción como deshabilitado. La salida del MT IDE se mostró como "Conexión establecida en el simulador de iOS", pero no se puede seleccionar el botón ejecutar / reproducir.
El proyecto original tenía "ObjC -all_load" en las Otras Banderas de Enlace y cuando agregué "-all_load -lstdc ++" junto con él, recibí el mensaje de error sobre el que trata esta publicación. Cuando eliminé el "ObjC -all_load" y solo agregué el "-all_load -lstdc ++" que el proyecto construyó, pero aún no se cierra la sesión de talk talk como confirmación en la consola
fuente
Es posible que esté utilizando una biblioteca que solo está compilada para hardware REAL. Por ejemplo, si está utilizando una biblioteca Bluetooth como el Zephyr HxM Smart, probablemente no se compilará en el simulador, y solo debe ejecutarse en dispositivos reales.
fuente
Se encontró con un problema similar con iOS 6. Pude resolverlo agregando storekit.framework al "Enlace binario con bibliotecas" en la sección de fases de compilación.
Ahora funciona como un encanto.
fuente
Tengo el mismo problema con 7 errores cuando agrego PSTCollectionviewcontroller. La única solución para este problema es verificar su "xcode -> fases de compilación -> compilar fuentes" aquí agregue todos sus archivos ".m". Espero que esto La publicación ayudará a los usuarios en el futuro.
fuente
En el mío, estaba usando Cocoapods para un proyecto de Realidad Aumentada y lo que descubrí fue que cuando implementas cocoapods y abres el espacio de trabajo de tu proyecto, terminas con el objetivo del Proyecto Xcode y los objetivos de Pods que implementaste dentro del mismo archivo. Lo que estaba sucediendo era que algunos de los .m estaban siendo utilizados por ambos. Después de eliminar los duplicados para el objetivo Xcode en Build Phases >> Compile Sources, funcionó bien.
fuente
Descubrí este mensaje ALTAMENTE engañoso al intentar actualizar a la nueva biblioteca de Google Analytics.
En mi caso, el problema era tener DOS COPIAS CONFLICTAS de la biblioteca. Estaban en carpetas diferentes, pero ambas se enumeraron en las Rutas de compilación de la biblioteca de mi aplicación (en Configuración de compilación).
Mover todos los archivos de la biblioteca en desuso de la carpeta terminó haciendo el truco e hizo que los misteriosos mensajes de error desaparecieran.
fuente
Verifique que todos los recursos de su paquete se copien en la fase de compilación.
fuente
Producto => Limpio hizo el truco para mí
fuente
El cambio en la arquitectura activa funcionó para mí, uno de mis lib estaba usando i386.
En la configuración de compilación >> cambie Build Active Architecture Only a Yes de NO
Funcionó para mi. Espero que ayude a los demás también.
fuente
La respuesta es que simplemente arrastre y suelte la carpeta sobre el proyecto y haga clic en copiar.
fuente
Recibí este mensaje cuando arrastré y solté algunos archivos fuente de otro proyecto. Cuando los eliminé y luego los agregué a través de "Agregar archivos ..." en el menú Archivo, se creó sin el error.
fuente
Tuve un error similar con NSManagedObject y fue porque estaba usando Core Data pero me faltaba el marco de Core Data en Build Phases - Link Binary With Libraries, como han respondido algunos otros
fuente
Puede obtener este tipo de error si agrega bibliotecas de terceros en su proyecto que requieren marcos nativos no incluidos en su proyecto.
Debe buscar dentro de los archivos .h y .m de su biblioteca recién agregada y ver qué marcos requiere, luego incluir esos marcos en su proyecto (Target> Build Fases> Link Binary With Libraries).
fuente
Intente eliminar el marco, limpiar el proyecto, agregarlo nuevamente y compilar. O elimine la clase que ha sido agregada por xcode en la fuente de compilación, limpie el proyecto, agréguela nuevamente y luego compile.
fuente
Recuerde que puede colocar alguna macro en cualquier controlador de vista que llame a los archivos que ya ha eliminado.
La aplicación no mostrará ningún error hasta que cree su aplicación, arrojará el error en la fase de compilación en archivos .o.
Recuerde eliminar cualquier MACRO que llame a los archivos que ya ha eliminado.
Gracias :)
fuente
Además de lo que hizo Allan, agregando las clases que faltaban, seguí la solución de @ emdog4 y agregué la biblioteca de Core Data al ir a Build Phases en Xcode y bajo 'Link Binary with Libraries' haciendo clic en + y seleccionando 'CoreData.framework' . Esto solucionó mi error
fuente