Aplicación para iOS con el marco bloqueado en el dispositivo, dyld: Biblioteca no cargada, Xcode 6 Beta

Este locking ha sido un problema de locking, básicamente utilicé los siguientes pasos para reproducir el problema:

  • Crear un proyecto Cocoa Touch Framework
  • Agregue un archivo rápido y una clase Dog
  • Estructura de comstackción para el dispositivo
  • Crear una aplicación de vista única en Swift
  • Importar el marco en el proyecto de la aplicación
  • Crear una instancia de clase rápida desde el marco en ViewController
  • Comstack y ejecuta la aplicación en el dispositivo

La aplicación se colgó 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é construir en dispositivos iOS 7.1 y 8.0, ambos tienen el mismo locking. Sin embargo, puedo crear aplicaciones y ejecutarlas en el simulador correctamente. También soy consciente de que puedo cambiar el marco de trabajo de Requerido a Opcional en Link Binary With Libraries , pero no resolvió completamente el problema, la aplicación se colgó cuando creo una instancia de Dog . El comportamiento es diferente en el dispositivo y el simulador, sospecho que no podemos distribuir el marco para el dispositivo usando la versión beta de Xcode. ¿Alguien puede arrojar luz sobre esto?

En la pestaña General del objective, hay un campo Binarios incrustados . Cuando agrega el marco, se resuelve el locking.

La referencia está aquí en Apple Developer Forums.

Para iOS mayor o igual que 8

Debajo de la pestaña General del objective, en la sección Binarios incrustados, agregue el marco. Esto copiará el marco en el comstackdo para que pueda vincularse en tiempo de ejecución.

enter image description here

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

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

Para iOS de menos de 8

Si tiene influencia en este marco (tiene acceso al código fuente / proceso de comstackción), puede cambiar este marco para que esté enlazado estáticamente en lugar de vinculado dinámicamente. Esto hará que el código se incluya en la aplicación comstackda 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 comstackción del marco, en la sección Vinculación, cambie Mach-O Type a Static Library. Ahora no debería necesitar incluir el marco bajo binarios incrustados.

Marco estático

Incluyendo activos: para incluir cosas 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.

Recibí este mismo error al intentar agregar manualmente mi marco creado en mi proyecto. Simplemente arrastrar el marco a su proyecto no va a ser lo suficientemente bueno. Es como estar en el mismo estadio pero no poder encontrar a tus hijos. Me tomó un poco de prueba y error para que funcione correctamente, pero siguiendo estos pasos lo hice por mí.

1) Crea tu marco

  • Desarrolla tu marco.
  • Una vez que se completa su desarrollo, COMMAND + B crea su marco y se asegura de que reciba “Build Succeeded”.

enter image description here

2) Acceda a su marco

  • Una vez que el proyecto de su marco se haya construido correctamente, estará listo para que acceda a su carpeta Products en su proyecto.

enter image description here

  • Haga clic derecho en su .framework y seleccione “Mostrar en Finder”.

enter image description here

3) Coloque el marco en su proyecto

  • Arrastre y suelte el .framework desde la ventana del Finder hasta la carpeta “Framework” de su proyecto de aplicación.

enter image description here

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

  • Seleccione el nivel superior en su proyecto

enter image description here

  • Elige tu objective

enter image description here

  • Vaya a “Crear fases”, luego “Enlace binario con bibliotecas” y asegúrese de que su marco esté incluido con la opción seleccionada .

enter image description here

  • Aún en “Fases de comstackción”, vaya a la esquina superior izquierda y seleccione el botón + . En el menú desplegable, seleccione “Nueva fase de copia de archivos”.

enter image description here

  • Desplácese hacia abajo a la nueva sección “Copiar archivos” y asegúrese de configurar Destination en “Frameworks”. Deje el subtrayecto vacío. Luego haz clic en el botón + en la parte inferior izquierda.

enter image description here

  • Se te presentará la jerarquía de tu proyecto. Desplácese hasta la carpeta “Marcos” a la que agregó el marco en el paso 3, o búsquela en la barra de búsqueda en la parte superior. Seleccione su marco y haga clic en “Agregar”.

enter image description here

  • Asegúrese de que su marco esté incluido con “Code Sign On Copy” seleccionado.

enter image description here

5) Limpio, luego ejecuta tu proyecto

  • COMMAND + SHIFT + K
  • COMMAND + R

Primero, intente comstackr después de Comando + Opción + Mayús + K. Si aún falla, siga los pasos a continuación.

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

enter image description here

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

Eche un vistazo a esta captura de pantalla:

enter image description here

¡Espero que ayude!

Tuve que (además de lo mencionado aquí) agregar la siguiente línea a las Rutas de búsqueda de Runpath en la pestaña Configuraciones de comstackción :
@executable_path/Frameworks

enter image description here

Necesita agregar el marco a una nueva Fase de comstackción de archivos de copia para asegurarse de que el marco se copie en el paquete de aplicaciones en tiempo de ejecución.

Consulte Cómo agregar una ‘Fase de comstackción de Copiar archivos’ a mi Target para obtener más información.

Documentos oficiales de Apple: https://developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html

Tengo el mismo tipo de problema en la versión iOS 9.x

  EL PROBLEMA ES: La aplicación falla tan pronto como abro la aplicación con el siguiente error.

dyld: Biblioteca no cargada: /System/Library/Frameworks/UserNotifications.framework/UserNotifications Remitido desde: /var/containers/Bundle/Application/######/TestApp.app/TestApp Motivo: imagen no encontrada

UserNotifications.framework este problema cambiando el UserNotifications.framework Required a Optional en Linked Frameworks and Libraries para UserNotifications.framework .

Agregue el marco en Binarios incrustados enter image description here

Luego Limpia y Construye.

En mi caso, la solución fue eliminar el marco comstackdo de Embedded Binaries, que era un proyecto independiente en el espacio de trabajo, limpiarlo y reconstruirlo, y finalmente volver a agregarlo a Binary Embedded.

Mi entorno: Cocos2d 2.0, Box2d, Objective C

Además de hacer las otras respuestas anteriores, finalmente fui a la pestaña General e hice WatchKit Opcional.

Target General Linked Frameworks and Libraries Watchkit.framework Opcional

Si está utilizando un marco de terceros y está utilizando Cocoapods como su administrador de dependencias, intente hacer una pod install para actualizar sus pods.

Este locking se estaba produciendo en una biblioteca de terceros que estaba utilizando, así que me alegro de que la solución anterior funcionó para mí, ¡espero que funcione para usted!

Sorprendentemente, no todas las piezas necesarias están documentadas aquí, al menos para Xcode 8.

Mi caso era un marco creado a medida como parte del mismo espacio de trabajo. Resulta que se estaba construyendo incorrectamente. Basado en la última respuesta de jeremyhu a este hilo:

https://forums.developer.apple.com/thread/4687

Tuve que configurar Dynamic Library Install Name Base ( DYLIB_INSTALL_NAME_BASE ) en Build Settings del Framework y luego reconstruirlo. Se configuró incorrectamente en $(LOCAL_LIBRARY_DIR) y tuve que cambiarlo a @rpath .

Por lo tanto, en la etapa de procesamiento del enlace, se instruía a la aplicación de host para cargarlo dinámicamente en el tiempo de ejecución desde /Library/Frameworks/fw.Framework/fw (como en, la raíz del sistema de archivos) en lugar de la ruta a la aplicación /Frameworks/fw.Framework/fw

Con respecto a todas las otras configuraciones: tiene que estar en 3 lugares en Build Phases , pero todas están configuradas a la vez cuando solo lo agregas a la configuración de Embedded Binaries de la pestaña General de la aplicación de alojamiento.

No tuve que configurar una fase adicional de Copy Files , que parece intuitivamente redundante con respecto a la etapa de incrustación de todos modos. Al verificar el final de la transcripción de comstackción, podemos asegurar que no es necesario.

 PBXCp /Users/xyz/Library/Developer/Xcode/DerivedData/MyApp-cbcnqafhywqkjufwsvbzckecmjjs/Build/Products/Debug-iphoneos/MyFramework.framework 

[Se eliminaron muchas líneas detalladas, pero está claro a partir de la transcripción simplificada en la interfaz de usuario de Xcode].

Todavía no tengo idea de por qué Xcode estableció incorrectamente el valor DYLIB_INSTALL_NAME_BASE en mí.

Tuve el mismo problema. Intenté construir mi proyecto con un iPhone que nunca antes había usado y no agregué un nuevo marco. Para mí, la limpieza funcionó bien ( Shift + Command + K ). Tal vez sea porque uso beta 5 de Xcode 7 y un iPhone 6 con iOS 9 Beta, pero funcionó.

Después de probar todos los métodos disponibles en Internet y mis propios trucos de prueba y error 100 veces. Finalmente pude resolverlo. – Apeksha Sahu hace 6 minutos
Goto iTunes en Mac -> cuentas -> autorizar esta computadora – Apeksha Sahu hace 5 minutos
segundo paso … Ir a desarrollador en la configuración en iPad y iPhone y reindexar con identificadores y borrar las computadoras de confianza todo. Me funcionó …….. ……. Después de reinstalar la versión de Mac OSHigh seria 10.13.15 de la versión beta de seirra beta de Mac OS, reinstalar la última versión de Xcode, después de actualizar todos los certificados. etc etc … etc … tantos métodos como creas que hice. – enter image description here

Si tiene un pod de desarrollo, elimine su aplicación de la instalación del simulador desde el pod -> limpiar -> ejecutar nuevamente …

  1. Ir al archivo en xcode -> Configuración del espacio de trabajo
  2. Haga clic en la flecha al lado de la que aparece / Users / apple / Library / Developer / Xcode / DerivedData
  3. Seleccione los datos Derivados y muévalos a la Papelera.
  4. Todo el Xcode y vuelva a abrirlo.
  5. Limpia el proyecto y ejecuta nuevamente.

Los pasos anteriores resolvieron mis problemas.

En caso de que alguien aún experimente este problema, a pesar de seguir todos los pasos descritos en muchas otras respuestas, es posible que deba revocar y recrear su certificado de firma de código , de acuerdo con lo siguiente:

https://developer.apple.com/library/ios/qa/qa1886/_index.html

Para aquellos a los que no les funcionó la solución, intente actualizar el sistema operativo a Yosemite. ¡Funcionó para mí!