La aplicación iOS con marco falló en el dispositivo, dyld: biblioteca no cargada, Xcode 6 Beta
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?
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.
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.
¿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.
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.
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
+B
cree su marco y asegúrese de recibir "Construcción exitosa".
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
Products
carpeta de su proyecto.
- Haga clic derecho en su
.framework
y seleccione "Mostrar en Finder".
3) Coloque el marco en su proyecto.
- Arrastre y suelte
.framework
desde la ventana de su Finder a la carpeta "Framework" del proyecto de su aplicación.
4) Configurar el proyecto de la aplicación para el marco.
- Seleccione el nivel superior en su proyecto
- Elige tu objetivo
- 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 .
- 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".
- 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.
- 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".
- Asegúrese de que su marco esté incluido con "Copia de inicio de sesión de código" seleccionado.
5) Limpia y luego ejecuta tu proyecto
COMMAND
+SHIFT
+K
COMMAND
+R
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.
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 Libraries
la opción en Build Options
.
Eche un vistazo a esta captura de pantalla: