OS X Framework Library no cargada: 'Imagen no encontrada'

279

Estoy tratando de crear un marco OS X básico, en este momento solo tengo un marco de prueba creado: TestMacFramework.frameworky estoy tratando de importarlo en un nuevo proyecto de aplicación OS X.

Creé el archivo .framework y lo importé al nuevo proyecto. El marco parece vincularse bien y puedo hacer referencia al archivo de encabezado público que agregué a la sección de fases de construcción del marco.

Sin embargo, cuando intento ejecutar la aplicación contenedor, aparece el siguiente error:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

Después de buscar un poco en Google, me di cuenta de que necesitaba agregar una Copy Filessección a las fases de compilación de la aplicación de mi contenedor, así que hice esto y lo configuré así ...

ingrese la descripción de la imagen aquí

Sin embargo, todavía recibo el error de tiempo de ejecución. Obviamente estoy haciendo algo mal aquí, pero el recurso de la biblioteca de desarrolladores de Apple para este hace referencia a Xcode 2, ¡así que no es muy útil!

¿Qué me he perdido?

ACTUALIZAR:

Puedo ver en el registro de compilación que mi TestMacFramework.frameworkse está copiando en el directorio .app contents / frameworks, pero no se está instalando en el directorio Library / Frameworks en el HD

ingrese la descripción de la imagen aquí

ACTUALIZACIÓN 2:

La compilación se vincula correctamente si copio manualmente TestMacFramework.frameworken el Library/Frameworksdirectorio

Sammio2
fuente
1
¿Qué otool -Lte dice acerca de dónde la aplicación espera encontrar el marco?
trojanfoe
Bien, descubrí cómo ejecutarlo ... Esta es la salida que obtengo para mi biblioteca (he excluido las otras dependencias, como Foundation, etc.)/Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework (compatibility version 1.0.0, current version 1.0.0)
Sammio2
Mi solución fue Incrustar como binarios la biblioteca que necesitaba (Alamofire). ¿Es esto aceptable?
Cmag
2
Es muy confuso que esta pregunta esté claramente etiquetada como para OS X, y todas las respuestas, incluida la aceptada, son para iOS. Tengo el mismo error y no puedo usar ninguna de las respuestas.
RenniePet
@RenniePet Dado que Xcode 7.3 el proceso es el mismo para los marcos iOS y macOS, la respuesta aceptada es la forma correcta de hacerlo. Si todavía tiene problemas, ¿podría ser un problema no relacionado?
Sammio2

Respuestas:

553

[Xcode 11+]

Lo único que debe hacer es agregar el marco a la General->Frameworks, Libraries And Embedded Contentsección en la Generalpestaña del objetivo de su aplicación.

Asegúrese de seleccionar la opción 'Incrustar y firmar'.

ingrese la descripción de la imagen aquí

[Xcode v6 -> Xcode v10]

Lo único que debe hacer es agregar el marco a la Embedded binariessección en la Generalpestaña del objetivo de su aplicación.

Captura de pantalla de Xcode

Kappe
fuente
32
Este es el único paso necesario para iOS.
nikolovski
77
¡Gracias! Lo resolvió para mí en iOS.
user1244109
66
¡Gracias! Me ayudó para iOS
Alexander Khitev
44
Utilizo una clase de mi marco importado en Storyboard y estaba teniendo este error. Solo quería agregar eso además de configurar la CLASE personalizada en Storyboard, también debe configurar el campo MÓDULO.
Ruben Martinez Jr.
8
@ZevsVU No tengo una Embedded binariessección en mi proyecto macOS. Que pasa
fnc12
56

Así que logré hacerlo funcionar, es bastante simple cuando tienes las instrucciones correctas. Lo que estaba buscando era un marco 'privado' que viva en el paquete de aplicaciones en lugar de estar escrito en la carpeta de la biblioteca del sistema.

Construyendo el marco

  1. Agregue un objetivo para crear un Marco de cacao
  2. Dentro de los objetivos 'Configuración de compilación' configure el 'Directorio de instalación' en '@executable_path /../ Frameworks'
  3. Cree una biblioteca y acceda a .framework desde el archivo o directorio de productos

Incluyendo el marco

  1. Arrastre el archivo .framework creado al Proyecto Xcode, asegúrese de marcar 'Copiar archivos al directorio'
  2. En el destino de las aplicaciones que lo contienen, agregue una nueva 'Fase de creación de archivos de copia'
  3. Establezca el 'Destino' en 'Marcos'
  4. Arrastre en el .framework creado
Sammio2
fuente
1
Esto también funciona para marcos iOS. Al agregar el marco personalizado en el espacio de trabajo para construir junto con él. ¡Debe agregar la parte Incluyendo el marco de esta solución para resolver este error al depurar en el dispositivo!
cynistersix
1
Gracias, trabajé para iOS. No seguí tus primeros pasos ya que los marcos ya estaban construidos en mi carpeta de datos derivados
Gmeister4
¡Increíble! ¡Salvé mi maldito día! 2017 - Xcode 8.3.2 ¡Gracias!
Glenn
Por alguna extraña razón, no puede arrastrar el marco desde la sección predeterminada "Enlace binario con bibliotecas" a la sección "Marcos incrustados", pero puede arrastrar el marco desde la lista de Proyectos a la izquierda. Aún tendrá que eliminar manualmente el marco de la sección "Enlace binario con bibliotecas" con el botón "-".
William Cerniuk
18

Para mí fue bastante simple, acabo de agregar mi marco a mis binarios incrustados en los objetivos de la aplicación

Robin Delaporte
fuente
15

Las opciones anteriores no me son posibles de incluir. Lo resolví especificando la ruta de búsqueda Runpath

Esto está en la pestaña ' Configuración de compilación '. En la sección ' Vinculación '. Cambie ' Rutas de búsqueda de Runpath ' a$(inherited) @executable_path/Frameworks

Vincent
fuente
Necesitaba ambos pasos, este paso y agregar una nueva 'Fase de compilación de archivos de copia' con el marco anterior.
usuario23
Tenía un antiguo proyecto Xcode que se actualizó de forma incremental y me faltaban estas configuraciones. Agregado y ahora funcionando como se esperaba.
Mattio
De todas estas soluciones, esta funcionó, es tan molesto cómo el enfoque del problema es como "está bien, déjenme ir a la lista de todas estas publicaciones de stackoverflow, ya que la causa raíz no está clara" APLICADO
Ryan
9

Me encontré con el mismo problema, pero la solución aceptada no funcionó para mí. En cambio, la solución fue modificar el nombre de instalación del marco.

El error en la publicación original es:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

Tenga en cuenta la primera ruta después de la biblioteca no cargada . El marco se está cargando desde una ruta absoluta. Esta ruta proviene del nombre de instalación del marco (a veces llamado rpath), que puede examinarse usando:

otool -D MyFramework.framework/MyFramework

Cuando se incrusta un marco en una aplicación, esta ruta debe ser relativa y de esta forma: @ rpath / MyFramework.framework / MyFramework . Si el nombre de instalación de su marco es una ruta absoluta, es posible que no se cargue en tiempo de ejecución y se generará un error similar al anterior.

La solución es modificar el nombre de la instalación:

install_name_tool -id "@rpath/MyFramework.framework/MyFramework" MyFramework.framework/MyFramework 

Con este cambio ya no obtengo el error

Amos Joshua
fuente
8

Eliminar datos derivados me los guardó

SleepsOnNewspapers
fuente
3
No funcionó para mí, sin embargo, cuando lo hice pod installfuncionó.
Hola Soy Edu Feliz Navidad
7

Ninguno de estos problemas me resolvió esto. El problema al final fue bastante fácil. Parece que es un error bastante importante de Xcode que he registrado el problema y lo solucioné con el error de Apple: 29820370. Si tiene problemas (ya que parece que hay varias páginas de problemas similares a este), sería genial si pudiera plantear un error en el reportero de errores: https://bugreport.apple.com/ y haga referencia al error que planteé para ganar visibilidad. Quiero hacer que Xcode vuelva al placer que era antes, y esto es algo que estoy seguro de que Xcode debería haberse solucionado.

Aquí está la solución: 1. Llavero abierto: vaya al Certificado de desarrollador mundial de Apple. 2. Haga doble clic en él. 3. Cambie el nivel de permiso de "siempre confíe" para usar los valores predeterminados del sistema. 4. Guarde y ciérrelo. 5. Reinicie Xcode, limpie y construya su proyecto y ya no estará.

Captura de pantalla a continuación de la configuración correcta: ¡ Acceso a llavero fijo Espero que esto ayude!

UKDataGeek
fuente
2
"Usar valores predeterminados del sistema" parece ser la configuración estándar.
Raphael
No siempre, algo parece cambiarlo, lo que resulta en ese error
UKDataGeek
Gracias, esto solucionó mi problema también. Lamentablemente, no puedo ver su ticket en el rastreador de errores para darle visibilidad adicional. No estoy seguro de por qué, sin embargo, no muestra ningún error allí.
Jim
7

Xcode 11:

en Xcode 11 agregar marco en General->Frameworks, Libraries And Embedded Content

después de agregar, asegúrese de seleccionar la Embed & Signopción

ingrese la descripción de la imagen aquí

Saifan Nadaf
fuente
2
si hace esto, entonces no podrá cargar su aplicación en la tienda de aplicaciones
Mahendra
@Mahendra, ¿cuál es la alternativa que usa en este caso? Tuve un problema similar
Derryl Thomas el
@DerrylThomas, la aplicación todavía está en modo de desarrollo, así que no probé este caso
Mahendra
1
@Mahendra, comparta aquí en caso de que encuentre una alternativa para esto. Estaría muy agradecido
Derryl Thomas el
@DerrylThomas Al crear el archivo, restaure de nuevo a la opción No incrustar y cree el ejecutable para cargarlo en la tienda de aplicaciones.
BlackPearl12
6

Cuando arrastra un marco personalizado a un proyecto en Xcode 10.1 , se supone que el marco es un marco de sistema y coloca el marco en la sección "Enlace binario con bibliotecas" de "Fases de compilación" debajo de su objetivo.

Los marcos del sistema ya están en el dispositivo, por lo que no se copia en el dispositivo y, por lo tanto, no se puede ejecutar en tiempo de ejecución, por lo que KABOOM (bloqueo en __abort_with_payload y error de desinformación: "Motivo: imagen no encontrada"). Esto se debe a que el código marco no se copia en el dispositivo ...

En realidad, para que Xcode vincule el marco personalizado y se asegure de que se copie junto con su código en el dispositivo iOS (real o simulador), el marco personalizado debe moverse a "Copiar recursos del paquete". Esto finalmente empaqueta el marco junto con el código ejecutable para que estén disponibles en el dispositivo juntos.

Para agregar un marco personalizado a un proyecto y evitar el bloqueo de Apple:

  1. Arrastre el marco personalizado a su lista de archivos de proyecto de iOS
  2. Haga clic en ProjectName en Navigator -> TargetName -> "Build Phases" -> Link Binary With Libraries triángulo de divulgación
  3. Arrastre el marco personalizado hacia afuera y hacia abajo a la sección "Copiar recursos del paquete" a continuación (Xcode ahora mueve la referencia del marco, corregida en Xcode 10)
  4. Ejecutar en simulador o dispositivo

El marco personalizado, por lo tanto, se copia junto con su código en su dispositivo de destino y está disponible en tiempo de ejecución.

ingrese la descripción de la imagen aquí

[editorial: pensaría que Xcode sería lo suficientemente inteligente como para descubrir la diferencia entre uno de sus marcos de sistema que no necesita copiarse en el dispositivo y un marco personalizado que está, oh no sé, en la jerarquía del directorio raíz del proyecto ... 🙄]

William Cerniuk
fuente
5

Debería haber un 'Ejecutar script' en 'Construir fases' con esto: '/ usr / local / bin / carthage copy-frameworks'

En los 'Archivos de entrada' de ese 'Ejecutar script', debe agregar la ruta a sus bibliotecas. Me gusta esto:

Construir Fases Ejecutar Script

thacilima
fuente
4

Si restablece accidentalmente su llavero, esto puede ocurrir debido a la falta de certificados de Apple en el llavero. Seguí esto para resolver mi problema.

Tuve el mismo problema y pude solucionarlo volviendo a descargar WWDR (Autoridad de Certificación de Relaciones con Desarrolladores de Apple en todo el mundo). Descargue desde aquí: http://developer.apple.com/certificationauthority/AppleWWDRCA.cer

usuario1742302
fuente
Esto resolvió mi problema también. Recuerde limpiar la carpeta de compilación antes de volver a compilar.
Justin Milo
4

Si está utilizando Xcode 11 , asegúrese de tener el marco agregado en Frameworks, Bibliotecas e Incrustar contenido en Configuración de destino - General. Cambie el estado de Incrustar de - 'No incrustar' a 'Incrustar y firmar'

Sachin Nautiyal
fuente
Pero esto le dará un error de soporte rápido inválido ITMS-90206 cuando distribuya a App Store. Solo funciona en Desarrollo.
Raptor
2

Lo que lo resolvió para mí fue cambiar abstract_targetal targetobjetivo principal en mi Podfile. Lo había configurado previamente abstract_targety esto causó el error descrito. Ahora funciona como un encanto

Francesco DM
fuente
1

Para Xcode 8, algunos productos obsoletos se eliminarán de la carpeta de datos derivados; consulte esta solución .

Apple: en macOS 10.12 y posteriores, Xcode limpia datos derivados obsoletos, encabezados precompilados y cachés de módulos. (23282174)

El sistema de compilación Xcode admite la eliminación de archivos obsoletos de algunos tipos de artefactos de compilación que se produjeron en una compilación anterior, pero que desde entonces se han eliminado del proyecto.

Basado en el pensamiento del autor, encontré este registro de compilación de mi caso.

Remove stale build products

/bin/rm -rf /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks/AliyunVodPlayerSDK.framework
/bin/rmdir /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks

Después de crear una nueva fase de copia de archivos y copiar el marco obsoleto de destino en destino de Frameworks , el registro de eliminación anterior desaparece después de la reconstrucción.

Solo aclare mi situación y razón, espero que sea útil para alguien.

Itachi
fuente
1

¡Para mí esta fue la solución, después de muchas horas de búsqueda!

Por alguna razón, bien en el desarrollo de un Marco personalizado Swift 2.3, Xcode 8 había eliminado la DYLIB_INSTALL_NAME_BASEconfiguración del project.pbxprojarchivo. Un pequeño paseo hacia el Build Settings / Dynamic Library Install Name Baseentorno de vuelta a@rpath arreglarlo.

(de https://forums.developer.apple.com/thread/4687 )

encaps
fuente
0

Descubrí que este problema solo estaba relacionado con la firma del código y los certificados, no con el código en sí. Para verificar esto, cree la aplicación básica de vista única e intente ejecutarla sin ningún cambio en su dispositivo. Si ve el mismo tipo de error, esto muestra que su código está bien. Como yo, encontrará que sus certificados no son válidos. Descargue todo nuevamente y repare los vencidos. Luego, cuando obtenga la aplicación básica para no informar el error, intente su aplicación nuevamente después de salir de Xcode y tal vez reiniciar su mac por si acaso. Eso finalmente puso fin a esta pesadilla. Lo más probable es que esto no tenga nada que ver con su código, especialmente si recibe un mensaje Build Successful cuando intenta ejecutarlo. FYI

iOS4Fun
fuente
0

Tengo el problema al intentar Xcode 9 beta y volver a Xcode 8. Una simple limpieza en el objetivo resolvió el problema.

Javier
fuente
0

Tuve el mismo problema por una razón diferente. He creado una nueva configuración para depurar y liberar (en PROYECTO -> pestaña Información -> Configuración). Y tuve que cambiar mi script de shell de frameworks de pod (Pods- "appName" -frameworks.sh, en Targets Support Files) para que funcione.

[Xcode 9]

Yuval
fuente
0

Lo único que funcionó para mí:

Destino> Fases de compilación> [CP] Incrustar marcos de pods Desmarque "Mostrar variables de entorno en el registro de compilación" y "Ejecutar script solo al instalar"

Neil
fuente
0

Intenté muchas soluciones, pero lo que funcionó para mí fue eliminar un objetivo faltante que figura en la pestaña de compilación del esquema de compilación. Puede acceder abriendo la ventana de edición del esquema actual.

Editar: Mi objetivo de prueba de IU no funcionaba tan bien, y la solución que encontré fue eliminarlo y generarlo nuevamente.

Gonzalo
fuente
0

abra xcode -> general -> Binarios incrustados -> agregue QBImagepicker.framework y RSKImageCropper -> proyecto limpio

simplemente agregue QBImagePicker.framework y RSKImageCropper.framework en los binarios incrustados que me funcionaron

Agustiar
fuente
0

Creo que no hay una forma fija de resolver este problema, ya que podría deberse a diferentes razones. También tuve este problema la semana pasada, no sé cuándo y exactamente qué causa este problema, solo cuando lo ejecuto en un simulador con Xcode o trato de instalarlo en el teléfono, luego informa ese tipo de error, pero cuando ejecutarlo con react-native run-ios con terminal, no hay problema.

Revisé todas las formas publicadas en Internet, como renovar el certificado, cambiar la configuración en Xcode (todas las formas mencionadas anteriormente), en realidad, todas las configuraciones en Xcode ya estaban configuradas como se solicitó anteriormente, ninguna de las formas funciona para mí. Hasta esta mañana, cuando elimino las cápsulas y reinstalo, el error finalmente desaparecerá después de una semana. Si también está usando cocoapod y luego el error se mostró sin ningún motivo específico, tal vez pueda intentarlo a mi manera.

  1. Mira mi versión de cocoapods.
  2. Actualícelo si hay una nueva versión disponible.
  3. Vaya a la carpeta de su proyecto, elimine su Podfile.lock, el archivo Pods, el proyecto xcworkspace.
  4. Ejecute la instalación de pod
Jack
fuente
0

Experimenté ese problema solo cuando lo ejecuté en un dispositivo real (iPhone SE). En el proyecto del simulador funcionó como se esperaba.

Intenté todas las correcciones desde este mismo hilo y desde aquí . Ninguno de esos funcionó para mí.

Para mí, el problema se resolvió después de reiniciar el iPhone (sic!).

Yo hice:

  • carpeta de compilación limpia,
  • limpiar datos derivados,
  • eliminar la aplicación del dispositivo,
  • Reiniciar dispositivo

Y finalmente funciona. :)

Si falla cualquier otra solución, no olvide probarla.

vandermesis
fuente
0

Xcode 11: Fases de construcción -> Insertar marcos

ingrese la descripción de la imagen aquí

Ofir Malachi
fuente