Biblioteca de OS X Framework no cargada: ‘Imagen no encontrada’

Estoy intentando crear un OS X Framework básico, ahora mismo tengo un framework de prueba creado: TestMacFramework.framework y estoy tratando de importarlo en un nuevo proyecto de aplicación OS X.

Construí el archivo .framework y lo importé en el nuevo proyecto. El framework parece estar bien enlazado, y puedo hacer referencia al archivo de encabezado público que agregué a la sección de fases de construcción del framework.

Sin embargo, cuando bash ejecutar la aplicación contenedora obtengo 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 en Google, me di cuenta de que necesitaba agregar una sección de Copy Files a las fases de comstackción de mi aplicación de contenedor, así que lo hice y lo configuré como tal …

enter image description here

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

¿Qué me he perdido?

ACTUALIZAR:

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

enter image description here

ACTUALIZACIÓN 2:

La construcción se vincula correctamente si copio manualmente el TestMacFramework.framework en el directorio Library/Frameworks

[de Xcode 6 -> 7.3]

(sí, sigue trabajando en Xcode 9)

Lo único que debe hacer es agregar el marco a la sección “Binarios incorporados” en la pestaña “General” de su destino de la aplicación

enter image description here

Así que logré que funcionara, es bastante simple cuando tienes las instrucciones correctas. Lo que estaba buscando era un marco ‘privado’ que vive en el paquete de la aplicación en lugar de estar escrito en la carpeta de la biblioteca del sistema.

Construyendo el marco

  1. Agregue un objective para crear un Marco de Cacao
  2. Dentro de los objectives ‘Build Settings’, configure ‘Installation Directory’ en ‘@executable_path /../ Frameworks’
  3. Crear biblioteca y acceder al .framework desde el directorio de archivos o productos

Incluyendo el marco

  1. Arrastre el archivo .framework creado al Proyecto Xcode, asegúrese de marcar ‘Copiar archivos en el directorio’
  2. En el objective de aplicaciones contenedoras, agregue una nueva ‘Fase de comstackción de archivo de copia’
  3. Establezca el ‘Destino’ en ‘Frameworks’
  4. Arrastre en el .framework creado

Fue bastante simple para mí, acabo de agregar mi framework a mis binarios incrustados bajo los objectives de la aplicación

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

Esto está en la pestaña ‘ Configuraciones de comstackción ‘. En la sección ‘ Vinculación ‘. Cambie ‘ Rutas de búsqueda de ruta de acceso ‘ a $(inherited) @executable_path/Frameworks

Ninguno de estos problemas resolvió esto para mí. El problema al final fue bastante fácil. Parece que es una gran falla de Xcode que he registrado el problema y corrijo en el error de Apple: 29820370. Si estás luchando (ya que parece que hay varias páginas de problemas similares a esto), sería genial si puedes generar un error en el reportero de errores: https://bugreport.apple.com/ y hacer referencia al error que levanté para ganar visibilidad. Quiero hacer que Xcode vuelva a tener el placer que tenía antes, y esto es algo que estoy seguro de que Xcode debería haberse arreglado a sí mismo.

Aquí está la solución: 1. Abra el llavero: vaya a Apple Worldwide Developer Cert. 2. Haga doble clic en él 3. Cambie el nivel de permiso de “Confiar siempre” para usar los valores predeterminados del sistema 4. Guarde y cierre 5. Reinicie Xcode, limpie y cree su proyecto, y debería haber desaparecido.

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

Eliminar los datos derivados me lo guardó

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 se puede examinar utilizando:

 otool -D MyFramework.framework/MyFramework 

Cuando un marco está incrustado 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 infraestructura es una ruta absoluta, es posible que no se cargue en tiempo de ejecución y se produzca un error similar al anterior.

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

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

Con este cambio ya no recibo el error

Si accidentalmente restableces tu llavero, esto puede ocurrir debido a que faltan certificados de Apple en el llavero. Seguí esto para resolver mi problema.

Tuve el mismo problema y pude solucionarlo al volver a descargar el WWDR (Autoridad de certificación de relaciones con desarrolladores de Apple en el mundo). Descargue desde aquí: http://developer.apple.com/certificationauthority/AppleWWDRCA.cer

Debería haber un ‘Ejecutar script’ en ‘Build 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:

Build Phases Run Script

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 versiones posteriores, Xcode limpia los datos obsoletos, los encabezados precomstackdos y las memorias caché de módulos. (23282174)

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

En base a la idea del autor, encontré este registro de construcció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 archivo de copia y copiar el marco obsoleto objective al destino de Frameworks , el registro de eliminación anterior desaparece después de la reconstrucción.

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

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

Por alguna razón, en el desarrollo de un Framework personalizado de Swift 2.3, Xcode 8 eliminó la configuración DYLIB_INSTALL_NAME_BASE del archivo project.pbxproj . Un pequeño paso en la Build Settings / Dynamic Library Install Name Base nuevo a @rpath solucionó.

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

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, crea la aplicación básica de vista única e intenta ejecutarla sin ningún cambio en tu 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. Descarga todo de nuevo y arregla los que hayan caducado. Luego, cuando obtienes la aplicación básica para no informar el error, prueba tu aplicación nuevamente después de salir de Xcode y tal vez reinicies tu 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 obtiene el mensaje Construir con éxito cuando intenta ejecutarlo. FYI

Entendí el problema al probar Xcode 9 beta y volver a Xcode 8. Una simple Limpieza en el objective resolvió el problema.

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

[Xcode 9]

Lo único que funcionó para mí:

Target> Build Phases> [CP] Embed Pods Frameworks Desmarque “Mostrar variables de entorno en el log de comstackción” y “Ejecutar script solo al instalar”

Intenté muchas correcciones, pero lo que funcionó para mí fue eliminar un objective perdido que figuraba en la pestaña de comstackción del esquema de comstackción. Puede acceder abriendo la ventana de edición del esquema actual.

Editar: Mi objective de prueba de UI no funcionaba tan bien, y la solución que encontré fue eliminarlo y generarlo de nuevo.

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

Solo agregue QBImagePicker.framework y RSKImageCropper.framework en binarios integrados que funcionaron para mí