La aplicación iOS con marco falló en el dispositivo, dyld: biblioteca no cargada, Xcode 6 Beta

Resuelto vladof81 asked hace 54 años • 34 respuestas

Este bloqueo ha sido un problema de bloqueo. Utilicé los siguientes pasos para reproducir el problema:

  • Crear un proyecto de Cocoa Touch Framework
  • Agregue un archivo rápido y una clase Perro
  • Construir un marco para el dispositivo
  • Crear una aplicación de vista única en Swift
  • Importar marco al proyecto de aplicación
  • Crear una instancia de clase rápida desde el marco en ViewController
  • Cree y ejecute una aplicación en el dispositivo

La aplicación falló inmediatamente al iniciarse, aquí está el registro de la consola:

dyld: Library not loaded: @rpath/FrameworkTest03.framework/FrameworkTest03
  Referenced from: /var/mobile/Applications/FA6BAAC8-1AAD-49B4-8326-F30F66458CB6/FrameworkTest03App.app/FrameworkTest03App
  Reason: image not found

Intenté compilar en dispositivos iOS 7.1 y 8.0, ambos tienen el mismo fallo. Sin embargo, puedo crear una aplicación y ejecutarla bien en el simulador. Además, soy consciente de que puedo cambiar el marco para que forme Requerido a Opcional en Vincular binario con bibliotecas , pero no resolvió completamente el problema, la aplicación falló cuando creo una instancia de Perro . El comportamiento es diferente en el dispositivo y en el simulador. Sospecho que no podemos distribuir un marco para el dispositivo usando una versión beta de Xcode. ¿Alguien puede arrojar luz sobre esto?

vladof81 avatar Jan 01 '70 08:01 vladof81
Aceptado

En la pestaña General del objetivo , hay un campo Binarios integrados . Cuando agrega el marco allí, el bloqueo se resuelve.

La referencia está aquí en los foros de desarrolladores de Apple.

vladof81 avatar Jun 21 '2014 20:06 vladof81

Para iOS mayor o igual a 8

En la pestaña General del objetivo, en la sección Binarios integrados, agregue el marco. Esto copiará el marco en el compilado para poder vincularlo en tiempo de ejecución.

ingrese la descripción de la imagen aquí

¿Por qué está pasando esto? : porque el marco al que se está vinculando se compila como un marco vinculado dinámicamente y, por lo tanto, está vinculado en tiempo de ejecución.

** Nota:** La integración de marcos personalizados solo se admite en iOS > 8 y, por lo tanto, a continuación se ofrece una solución alternativa que funciona en versiones anteriores de iOS.

Para iOS menos de 8

Si influye en este marco (tiene acceso al código fuente/proceso de compilación), puede cambiar este marco para que esté vinculado estáticamente en lugar de vinculado dinámicamente. Esto hará que el código se incluya en su aplicación compilada en lugar de vincularse en tiempo de ejecución y, por lo tanto, no será necesario incrustar el marco.

** Cómo:** En la pestaña Configuración de compilación del marco, en la sección Vinculación, cambie el Tipo Mach-O a Biblioteca estática. Ahora no debería ser necesario incluir el marco en los archivos binarios integrados.

Marco estático

Inclusión de activos: para incluir elementos como imágenes, audio o archivos xib/nib, recomiendo crear un paquete (esencialmente un directorio, más información aquí bit.ly/ios_bundle) y luego cargar los activos del paquete usando NSBundle.

Dawson avatar Feb 12 '2015 05:02 Dawson

Simplemente arrastrar el marco a su proyecto no será suficiente. Es como estar en el mismo estadio pero no poder encontrar a sus hijos. Sigue estos pasos:

1) Crea tu marco

  • Desarrolla tu marco.
  • Una vez que se complete su desarrollo, COMMAND+ Bcree su marco y asegúrese de recibir "Construcción exitosa".

ingrese la descripción de la imagen aquí

2) Accede a tu marco

  • Una vez que su proyecto marco se haya compilado exitosamente, estará listo para que pueda acceder a él en la Productscarpeta de su proyecto.

ingrese la descripción de la imagen aquí

  • Haga clic derecho en su .frameworky seleccione "Mostrar en Finder".

ingrese la descripción de la imagen aquí

3) Coloque el marco en su proyecto.

  • Arrastre y suelte .frameworkdesde la ventana de su Finder a la carpeta "Framework" del proyecto de su aplicación.

ingrese la descripción de la imagen aquí

4) Configurar el proyecto de la aplicación para el marco.

  • Seleccione el nivel superior en su proyecto

ingrese la descripción de la imagen aquí

  • Elige tu objetivo

ingrese la descripción de la imagen aquí

  • Vaya a "Fases de compilación", luego a "Vincular binario con bibliotecas" y asegúrese de que su marco esté incluido con las opciones seleccionadas .

ingrese la descripción de la imagen aquí

  • Aún en "Fases de construcción", ve a la esquina superior izquierda y selecciona el +botón. En el menú desplegable, elija "Nueva fase de copia de archivos".

ingrese la descripción de la imagen aquí

  • Desplácese hacia abajo hasta la nueva sección "Copiar archivos" y asegúrese de configurar Destination"Frameworks". Deje la ruta secundaria vacía. Luego haga clic en el +botón en la parte inferior izquierda.

ingrese la descripción de la imagen aquí

  • Se le presentará la jerarquía de su proyecto. Desplácese hacia abajo hasta la carpeta "Frameworks" a la que agregó el marco en el paso 3, o búsquelo en la barra de búsqueda en la parte superior. Seleccione su marco y haga clic en "Agregar".

ingrese la descripción de la imagen aquí

  • Asegúrese de que su marco esté incluido con "Copia de inicio de sesión de código" seleccionado.

ingrese la descripción de la imagen aquí

5) Limpia y luego ejecuta tu proyecto

  • COMMAND+ SHIFT+K
  • COMMAND+R
Brandon A avatar Apr 04 '2017 02:04 Brandon A

En primer lugar, intente compilar después de Comando+Opción+Mayús+K. Si aún falla, siga los pasos a continuación.

Si alguien enfrenta este error en Xcode 8, cambie el estado de su marco a Opcional en lugar de Requerido en la pestaña General de su objetivo.

ingrese la descripción de la imagen aquí

Desert Rose avatar Sep 12 '2016 10:09 Desert Rose

Creé un marco usando Swift3/Xcode 8.1 y lo estaba consumiendo en un proyecto Objective-C/Xcode 8.1. Para solucionar este problema, tuve que habilitar Always Embed Swift Standard Librariesla opción en Build Options.

Eche un vistazo a esta captura de pantalla:

ingrese la descripción de la imagen aquí

NeverHopeless avatar Nov 10 '2016 13:11 NeverHopeless