objective library interoperability guide documentacion developer convert ios objective-c iphone compiler-errors email-integration

ios - library - objective c documentation



Símbolos no definidos para la arquitectura i386:_OBJC_CLASS_$_SKPSMTPMessage ", referenciado desde: error (30)

He importado el marco para enviar correos electrónicos desde la aplicación en segundo plano, es decir, SKPSMTPMessage Framework. ¿Alguien puede sugerir por qué se muestra abajo el 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 cual se toma el marco: -

Bloqueando 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.


¿Está compilado tu framework para armv (x)? Me parece que está compilado para i386, cuyo código no se ejecuta 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úrate, usando la configuración de compilación Akshay que se muestra arriba, que tu marco esté compilado correctamente para el chip en el que lo vas a ejecutar.


Además de lo que hizo Allan, agregando clases faltantes, seguí la solución de @ emdog4 y agregué la biblioteca Core Data yendo a Build Phases en Xcode y debajo de ''Link Binary with Libraries'' haciendo clic en + y seleccionando ''CoreData.framework'' . Esto solucionó mi error


Agregando lo que funcionó para mí en caso de que otros tengan el mismo problema y terminen aquí. Tuve un proyecto anterior que tenía la configuración de CLANG_ENABLE_MODULES en No. Después de horas de frustración, comparé con un proyecto de trabajo y descubrí que tenía la opción Activar la configuración de módulos en mi configuración de compilación de LLVM. Establecer esto en Sí resolvió mi problema y la aplicación funciona bien.

Configuración del proyecto -> Configuración de la compilación -> busque ''Módulos'' y actualice los módulos de habilitación (C y Objective-C) a SÍ.


Compruebe que todos los recursos de su paquete se copian en la fase de compilación.


Cuando encontré el mismo problema que este:

Símbolos indefinidos para la arquitectura i386:

_OBJC_CLASS _ $ _ SKPSMTPMessage, referenciado desde: objc-class-ref en ConfirmController.o

Resultó que me olvidé de agregar el marco. Era QuartzCore.framework para ser exactos.


Cuando encontré el mismo problema, olvidé agregar la "versión compilada de la biblioteca (con la extensión .a)". Normalmente, agregamos la biblioteca del proyecto importado en Dependencia de destino en las fases de compilación, pero nos olvidamos de agregar "biblioteca compilada" en Vincular binarios con bibliotecas en las fases de compilación.


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 EN CONFLICTO de la biblioteca. Estaban en carpetas diferentes, pero ambas se enumeraban 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 obsoletos de la carpeta terminó haciendo el truco e hizo que los misteriosos mensajes de error desaparecieran.


En la mía, estaba usando Cocoapods para un proyecto de Realidad Aumentada y lo que descubrí fue que cuando implementas Cocoapods y abres el .workspace de tu proyecto, terminas con el objetivo del Proyecto Xcode y los objetivos de los 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 destino de Xcode en Construir fases >> Compilar orígenes, funcionó bien.


En mi caso fue un poco diferente.

En el encabezado de prefijo faltaba una definición

#ifdef DEBUG # define TWDLog(fmt, ...) NSLog((@"/n%s/n" fmt), __PRETTY_FUNCTION__, ##__VA_ARGS__) #else # define TWDLog(...) #endif

Así que busque PROJECTNAME-Prefix.pch y compruebe si falta algo en ambos proyectos


Es posible que estés usando una biblioteca que solo esté compilada para hardware REAL. Por ejemplo, si está utilizando una biblioteca Bluetooth como Zephyr HxM Smart, es probable que no se compile en el simulador, y solo debe ejecutarse en dispositivos reales.


Intente eliminar el marco, limpiar el proyecto, agregarlo de nuevo y compilar. O elimine la clase que ha sido agregada por xcode en la fuente de compilación, limpie el proyecto, agregue de nuevo y luego compile.


La respuesta es que simplemente arrastre y suelte la carpeta sobre el proyecto y haga clic en Copiar.


No agregué "-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 resultados de registro de MonkeyTalk cuando lo ejecuté y el script anterior que escribí que usé para conectar Ahora mostraba el botón de reproducción como deshabilitado. La salida del MT IDE se muestra como "Conexión configurada para simulador de iOS", pero no se puede seleccionar el botón ejecutar / jugar.

El proyecto original tenía "ObjC -all_load" en los Otros indicadores de vinculador y cuando adjunté "-all_load -lstdc ++", junto con el mensaje de error de este post se trata. Cuando quité el "ObjC -all_load" y solo agregué el proyecto "-all_load -lstdc ++", pero aún no se ha cerrado la sesión de Monkey Talk como confirmación en la consola.


Para mí el tema resultó ser marcos faltantes. Una vez que agregué em, funcionó.


Producto => Clean hizo el truco para mí


Puede obtener este tipo de error si agrega bibliotecas de terceros en su proyecto que requieren marcos nativos no incluidos en su proyecto.

Debe mirar dentro de los archivos .h y .m de su biblioteca recién agregada y ver qué marcos de trabajo requiere, luego incluir esos marcos en su proyecto (Destino> Fases de creación> Vincular binarios con bibliotecas).


Puede obtener este tipo de error si el archivo .m de su clase no aparece en el paso "Compilar orígenes" de la pestaña "Crear fases" de su objetivo. Normalmente Xcode hace esto por usted, pero a veces pierde la trama y necesita agregar el archivo .m manualmente.

Para hacer esto:

TargetSettings -> Crear fases -> Compilar orígenes -> agregar su clase .m -> Crear y ejecutar


Recibí este mensaje cuando arrastré y solté algunos archivos de origen de otro proyecto. Cuando los eliminé y luego los agregué a través de "Agregar archivos ..." del menú Archivo, se creó sin el error.


Recuerde que puede poner algo de macro en cualquier controlador de vista que esté llamando a los archivos que ya ha eliminado.

La aplicación no mostrará ningún error hasta que la construya, lanzará el error en la fase de compilación en los archivos .o.

Recuerde eliminar cualquier MACRO que esté llamando a archivos que ya ha eliminado.

Gracias :)


Sí, esto está relacionado con lo que dijo allen ... busque TargetMembership en la sección de Utilidades del archivo fuente. hay una casilla de verificación que asocia ese archivo a un proyecto. Comprobando esto resolví este problema para mí también.


Se encontró con un problema similar con IOS 6. Pudo resolverlo agregando storekit.framework al "Enlace de binarios con bibliotecas" en la sección de fases de compilación.

Ahora funciona como un encanto.


Si está importando algún otro proyecto en xcode y si el proyecto actual e importado tienen los mismos archivos en la fuente del compilador, simplemente elimine el mismo archivo en el proyecto actual en la configuración "Fase de compilación". Funcionó para mí.


También podría ser que falte un enlace en una biblioteca binaria, verifique las fases de compilación en sus Targes, agregue las bibliotecas requeridas y luego Producto> Producto limpio> Compilación

¡Eso también debe funcionar!


También resolví este problema y lo arreglé comprobando si tanto el código binario de origen como el de compilación con la biblioteca contenían todo el archivo / biblioteca / marco que necesitaba.


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.


Tuve este problema cuando abrí el mismo proyecto dos veces, solo un proyecto fue el original y el otro se clonó de un url de git.

''Producto''> ''Limpiar'' solucionó el problema.


Tuve un error similar con NSManagedObject y fue porque estaba usando Core Data pero faltaba el marco Core Data en Build Phases - Link Binary With Libraries, como han respondido otros.


Verifique las propiedades exclusivas de Arquitecturas válidas y Crear arquitectura activa


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 de this 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 this y construirlo después de cada paso ... la línea ofensiva resultó ser la siguiente: agregar -todos_cargar para crear configuraciones-> otras banderas del enlazador

Resulta que esta bandera se recommended una vez para vincular categorías a bibliotecas estáticas ... pero luego resultó que esta bandera ya no era necesaria Xcode 4.2+ ... (lo mismo ocurre con la bandera -force_load ... que también era recomendado en otros posts ) ..


si está utilizando cocoapods, asegúrese de que la configuración de construcción de su objetivo contenga $ (heredado) en la sección de otras banderas del enlazador