Aplicación de iOS con marco bloqueado en el dispositivo, dyld: Biblioteca no cargada, Xcode 6 Beta
crash swift (20)
Para iOS mayor o igual a 8
En la pestaña General del objetivo, en la sección Binarios incrustados, agregue el marco. Esto copiará el marco en el compilado para que pueda vincularse en el tiempo de ejecución.
¿Por qué está pasando esto? : porque el marco al que se vincula se compila como un marco vinculado dinámicamente y, por lo tanto, se vincula en el 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 menos de 8
Si tiene influencia en este marco (tiene acceso al código fuente / proceso de compilación), puede cambiarlo para que se vincule de forma estática en lugar de hacerlo de forma dinámica. Esto hará que el código se incluya en la aplicación compilada en lugar de vincularlo en el tiempo de ejecución y, por lo tanto, el marco no tendrá que estar integrado.
Cómo: En la pestaña Configuración de creación del marco, en la sección Enlace, cambie el Tipo de Mach-O a Biblioteca estática. Ahora no debería necesitar incluir el marco en los binarios incrustados.
Incluir 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 recursos del paquete utilizando NSBundle.
Este bloqueo ha sido un problema de bloqueo, básicamente usé los siguientes pasos para reproducir el problema:
- Crear un proyecto de Cocoa Touch Framework
- Agrega un archivo rápido y un perro de clase
- Construir framework para dispositivo
- Crear una aplicación de vista única en Swift
- Importar marco en proyecto de aplicación
- Crea una instancia de la clase swift desde el framework en ViewController
- Crea y ejecuta la aplicación en el dispositivo
La aplicación se bloqueó 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
He intentado construir en dispositivos iOS 7.1 y 8.0, ambos tienen el mismo bloqueo. Sin embargo puedo construir una aplicación y ejecutarla bien en simulador. También soy consciente de que puedo cambiar el marco de Requerido a Opcional en Vincular binario con bibliotecas , pero no resolvió completamente el problema, la aplicación se bloqueó cuando creo una instancia de Dog . El comportamiento es diferente en el dispositivo y en el simulador, sospecho que no podemos distribuir el marco para el dispositivo utilizando la versión beta de Xcode. ¿Alguien puede arrojar luz sobre esto?
- Ir al archivo en xcode -> configuración del área de trabajo
- Haga clic en la flecha junto a la que aparece / Users / apple / Library / Developer / Xcode / DerivedData
- Seleccione los datos derivados y muévalos a la papelera.
- Completamente el xcode y reabrirlo.
- Limpia el proyecto y ejecuta de nuevo.
Los pasos anteriores resolvieron mis problemas.
Debe agregar el marco a una nueva Fase de compilación de archivos para asegurarse de que el marco se copie en el paquete de la aplicación en tiempo de ejecución.
Consulte Cómo agregar una ''fase de compilación de Copiar archivos'' a mi destino para obtener más información.
Documentos oficiales de Apple: https://developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html
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
Ir a iTunes en Mac -> cuentas -> Autorizar esta computadora - Apeksha Sahu Hace 5 minutos
segundo paso ... Ir a desarrollador en configuraciones en iPad y iPhone y reindexar con identificadores y borrar todo confía en computadoras. Funcionó para mí ........ ....... Después de reinstalar Mac OSHigh versión seria 10.13.15 de la última versión de Mac OS seirra beta, para reinstalar la última versión de Xcode, después de actualizar todos los certificados. etc etc etc ... tantos métodos como puedas pensar que hice. -
En caso de que alguien siga experimentando este problema, a pesar de seguir todos los pasos descritos en las otras muchas respuestas, es posible que deba revocar y volver a crear su certificado de firma de código , según lo siguiente:
https://developer.apple.com/library/ios/qa/qa1886/_index.html
En la pestaña General del objetivo, hay un campo de Binarios incrustados . Cuando se agrega el marco se resuelve el bloqueo.
La referencia está here en los foros de desarrolladores de Apple.
En mi caso, la solución fue eliminar el marco compilado de los Binarios incrustados, que era un proyecto independiente en el área de trabajo, limpiarlo y reconstruirlo, y finalmente volver a agregarlo a los Binarios incrustados.
Lo mismo sucedió cuando creé un nuevo esquema de configuración y construcción.
Así que la solución para mí fue correr
pod install
para esta nueva configuración creada.
Para aquellos que la solución no funcionó, intente actualizar el sistema operativo a Yosemite. ¡Funcionó para mí!
Recibí este mismo error al intentar agregar manualmente mi marco creado a mi proyecto. Simplemente arrastrar el marco en tu proyecto no va a ser lo suficientemente bueno. Eso es como estar en el mismo estadio pero no poder encontrar a sus hijos. Me tomó un poco de prueba y error para que funcione correctamente, pero seguir estos pasos lo hizo por mí.
1) Crea tu marco
- Desarrolle su marco.
- Una vez que se haya completado su desarrollo,
COMMAND
+B
creará su marco y se asegurará de que reciba "Compilación exitosa".
2) Accede a tu framework
- Una vez que su proyecto marco se compile con éxito, estará listo para que pueda acceder a la carpeta
Products
en su proyecto.
- Haga clic derecho en su
.framework
y seleccione "Mostrar en Finder".
3) Colocar marco en tu proyecto.
- Arrastre y suelte el
.framework
desde la ventana del Finder a la carpeta "Framework" del proyecto de su aplicación.
4) Configurar el proyecto de aplicación para el marco
- Selecciona el nivel superior en tu proyecto.
- Elige tu objetivo
- Vaya a "Crear fases", luego "Vincular binarios con bibliotecas" y asegúrese de que su marco esté incluido con la opción opcional seleccionada .
- Aún en "Build Phases", ve a la esquina superior izquierda y selecciona el botón
+
. En la lista 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
en "Marcos". Deja 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 hasta la carpeta "Marcos" 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 "Inicio de sesión de código en copia" seleccionado.
5) Limpia, luego ejecuta tu proyecto
-
COMMAND
+SHIFT
+K
-
COMMAND
+R
Si está utilizando un marco de terceros y está utilizando Cocoapods como su administrador de dependencias, intente realizar una pod install
para actualizar sus pods.
Este bloqueo se estaba produciendo en una biblioteca de terceros que estaba usando, así que me alegro de que la solución anterior haya funcionado para mí, ¡espero que funcione para usted!
Si tiene un pod de desarrollo, elimine su aplicación del simulador, instálelo desde el pod -> limpiar -> ejecutar de nuevo ...
Sorprendentemente, no todas las piezas necesarias están documentadas aquí, al menos para Xcode 8.
Mi caso era un marco de trabajo personalizado como parte del mismo espacio de trabajo. Resulta que estaba siendo construido incorrectamente. Basado en la última respuesta de jeremyhu a este hilo:
https://forums.developer.apple.com/thread/4687
Tuve que establecer Dynamic Library Install Name Base
( DYLIB_INSTALL_NAME_BASE
) en Build Settings
de Build Settings
del marco y luego reconstruirla. Se configuró incorrectamente en $(LOCAL_LIBRARY_DIR)
y tuve que cambiarlo a @rpath
.
Por lo tanto, en la etapa de procesamiento de enlaces, se le indicó a la aplicación host que la cargara dinámicamente en tiempo de ejecución desde /Library/Frameworks/fw.Framework/fw
(como en, la raíz del sistema de archivos) en lugar de path-to-App /Frameworks/fw.Framework/fw
Con respecto a todas las demás configuraciones: tiene que estar en 3 lugares en las Build Phases
, pero estas se configuran a la vez cuando lo agrega a la configuración de Embedded Binaries
de la pestaña General
de la aplicación de hospedaje.
No tuve que configurar una fase adicional de Copy Files
, que de todos modos parece redundante con respecto a la etapa de incrustación. Al verificar el final de la cola de la transcripción de la construcción, podemos asegurarnos de que no sea necesario.
PBXCp /Users/xyz/Library/Developer/Xcode/DerivedData/MyApp-cbcnqafhywqkjufwsvbzckecmjjs/Build/Products/Debug-iphoneos/MyFramework.framework
[Se han eliminado muchas líneas detalladas, pero queda claro en la transcripción simplificada en la interfaz de usuario de Xcode.]
Todavía no tengo idea de por qué Xcode configuró incorrectamente el valor DYLIB_INSTALL_NAME_BASE
.
Tengo el mismo tipo de problema en la versión iOS 9.x
ISSUE IS: App crashes as soon as I open the app with below error.
dyld: Library not loaded: /System/Library/Frameworks/UserNotifications.framework/UserNotifications
Referenced from: /var/containers/Bundle/Application/######/TestApp.app/TestApp
Reason: image not found
He resuelto este problema cambiando Required
a Optional
en Linked Frameworks and Libraries
UserNotifications.framework
para UserNotifications.framework
framework.
Tuve el mismo problema. Intenté construir mi proyecto con un iPhone que nunca había usado antes y no agregué un nuevo marco. Para mí, la limpieza funcionó bien ( Shift + Command + K ). Tal vez sea porque uso la beta 5 de Xcode 7 y un iPhone 6 con iOS 9 Beta, pero funcionó.
Tuve que (además de lo que se menciona aquí) agregar la siguiente línea a Runpath Search Paths en la pestaña Build Settings :
@executable_path/Frameworks