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

573

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 dispositivo
  • Crear una aplicación de vista única en Swift
  • Importar marco en proyecto de aplicación
  • Instanciar clases rápidas desde el marco en ViewController
  • Crea y ejecuta una 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 ejecutar bien en el simulador. Además, soy consciente de que puedo cambiar el marco para formar Obligatorio a Opcional en Enlace binario con bibliotecas , pero no resolvió completamente el problema, la aplicación se bloqueó cuando creé una instancia de Dog . El comportamiento es diferente en el dispositivo y 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
fuente
1
Lo que no entiendo es por qué todos los demás marcos de trabajo de terceros funcionan fuera de la caja y se pueden arrastrar y soltar fácilmente Link Binary with Librariesy, de alguna manera, Xcode sabe copiarlos en el paquete de su aplicación, mientras que para marcos personalizados esto simplemente no sucede.
fatuhoku
La respuesta de sazzad hissain khan aquí stackoverflow.com/questions/26024100/… es la mejor respuesta ..
Ankit Kumar
1
Echa un vistazo a este stackoverflow.com/a/52129141/2020034 . Funciona
Vinayak Parmar
puede hacer una biblioteca gorda, puede ver este enlace: stackoverflow.com/a/54977145/3992606
mohsen
La versión de Xcode no coincide , resuelta con stackoverflow.com/a/55738882/5443510 .
Jimmy Yin

Respuestas:

975

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

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

vladof81
fuente
73
Tengo el marco en los binarios incrustados y también tengo la fase de copia configurada en "Frameworks". Se bloquea de todos modos.
loretoparisi
11
Esto solo se resolvió en el modo de depuración. El error volverá a ocurrir al archivar o construir un proyecto
Saad Ur Rehman
13
Agregar @ ejecutable_path / Frameworks a la 'Ruta de búsqueda de ruta de acceso' resolvió este problema, es decir, además de agregar el marco a 'Binarios incrustados'
ArdenDev
14
¿Alguien puede ayudar a agregar marco en binarios incrustados, desde POD?
Bonnke
3
Ídem. También me gustaría saber cómo agregar desde POD, dado que no se puede encontrar "General> Binarios incrustados" en XCode 6.4 usando PODS
ded
259

Para iOS mayor o igual que 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 tiempo de ejecución.

ingrese la descripción de la imagen aquí

¿Por qué está pasando esto? : porque el marco al que está vinculando se compila 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 es compatible con iOS> 8 y, por lo tanto, sigue 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 estar 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, el marco no tendrá que incrustarse.

** Cómo: ** En la pestaña Configuración de compilación del marco, en la sección Vinculación, cambie el Tipo de Mach-O a Biblioteca estática. Ahora no debería necesitar incluir el marco en 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.

Dawson
fuente
1
¿Cómo puedo agregar framework a binarios incrustados, si framework está en Pods?
TomazStoiljkovic
¿Qué quiere decir con "marco está en Pods"? ¿Que su marco personalizado se distribuye a través de CocoaPods?
Dawson
2
Esto debería ser "Mayor o igual que 8". También tuve que hacer esto en iOS 8.
Cruinh
errorSwift is not supported for static libraries
jose920405
@TomazStoiljkovic, ¿te diste cuenta de esto? Tengo el mismo problema, tengo un marco que quiero construir como binario, pero depende de otros marcos a través de las vainas de cacao.
MegaManX
125

Simplemente arrastrar el marco a su proyecto no será lo suficientemente bueno. Eso es como estar en el mismo estadio pero no poder encontrar a tus hijos. Sigue estos pasos:

1) Crea tu marco

  • Desarrolla tu marco.
  • Una vez que su desarrollo esté completo, COMMAND+ Bcree su marco y asegúrese de recibir "Build Succeeded".

ingrese la descripción de la imagen aquí

2) Acceda a su marco

  • Una vez que su proyecto de marco se compila correctamente, estará listo para que acceda a su Productscarpeta en su proyecto.

ingrese la descripción de la imagen aquí

  • Haga clic derecho en su .frameworky seleccione "Mostrar en el buscador".

ingrese la descripción de la imagen aquí

3) Coloque el marco en su proyecto

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

ingrese la descripción de la imagen aquí

4) Configurar proyecto de aplicación para framework

  • 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 "Vincular binario con bibliotecas" y asegúrese de que su marco esté incluido con la opción seleccionada .

ingrese la descripción de la imagen aquí

  • Aún en "Fases de construcción", vaya a la esquina superior izquierda y seleccione 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 a la nueva sección "Copiar archivos" y asegúrese de establecerla Destinationen "Frameworks". Deja el subpath vacío. 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 la "Copia de inicio de sesión de código" seleccionada.

ingrese la descripción de la imagen aquí

5) Limpia, luego ejecuta tu proyecto

  • COMMAND+ SHIFT+K
  • COMMAND+R
Brandon A
fuente
55
Buen punto. Casi me funciona. Hice un marco A, que incluye Alamofire. Mi aplicación host (marco integrado A) funciona en simuladores. Pero cuando intento ejecutarlo en un iPhone real, se bloquea con un error: Alamofire: dyld: Biblioteca no cargada: @ rpath / Alamofire.framework / Alamofire Motivo: no se encontró una imagen adecuada. Encontró: xxx / ddcdemo.app / Frameworks / iddc.framework / Frameworks / Alamofire.framework / Alamofire: mach-o, pero arquitectura incorrecta
DàChún
1
@ Brandon Hacer opcional al framework resolvió mi problema. Pero, ¿puede explicarme cuál es el comportamiento de hacer que el marco sea opcional?
Mitesh Dobareeya
2
¡Gracias! En su paso 5, tenía "Copiar solo al instalar" marcado y ese era mi problema.
Andi
48

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 la Always Embed Swift Standard Librariesopción en Build Options.

Echa un vistazo a esta captura de pantalla:

ingrese la descripción de la imagen aquí

Nunca sin esperanza
fuente
3
Esto ahora funcionó para mí en at. La solución a este problema es ir a BuildPhases -> Copiar archivos -> seleccione Marco en Destino y agregue su marco. Lo más probable es que su biblioteca desaparezca aquí.
Harish
@Harish, la solución que estás sugiriendo ya es sugerida por varios y definitivamente me encargo de eso en el primer punto. En mi caso, el marco se agregó allí, pero aún apareció el mismo problema. Luego lo cavo solo. Si ha rechazado esta solución, no sé por qué está bastante seguro de su camino cuando no funcionó en mi caso: S
NeverHopeless
@ Harish Gracias. Su respuesta me ayudó mucho más y, por supuesto, NeverHopeless también lo hizo :) Gracias a ustedes
Mohsin Khubaib Ahmed
Esto fue lo único que funcionó para mí ... pero ya estoy "incrustando" el marco en la Embedded Binariessección de mi objetivo . Entonces, ¿por qué esto hace que funcione?
guptron
Impresionante, esto funciona porque si se usa una biblioteca rápida o un pod para incrustar en el proyecto objetivo C. El proyecto del objetivo C a menudo tiene esta bandera a No.
Swaroop S
47

En primer lugar, intente compilar después de Command + Option + Shift + 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 marco a Opcional en lugar de Requerido en la pestaña General de su objetivo.

ingrese la descripción de la imagen aquí

Rosa del desierto
fuente
3
Esto hará que el tiempo de ejecución no reconozca las clases del marco
tesla
@azimov es correcto. Estoy enfrentando este dilema en este momento. Requerido provoca el error "imagen no encontrada" y si intentamos configurarlo como opcional, se bloqueará en tiempo de ejecución con el "selector no reconocido"
Adam Mendoza
1
Aunque mi marco ya estaba en Binarios de enlace e Incrustar, todavía tenía que agregar una Fase de copia. dyld: Biblioteca no cargada: @ rpath / AFNetworking.framework / AFNetworking Referenciada desde: / Users / {User} / Library / Developer / CoreSimulator / Devices / 6833A85C-5783-45FA-A4D5-991D286B28C2 / data / Containers / Bundle / Application / B1A0A3B2-92A2-41B0-9884-6DB6995A0D7E / MyApp.app / MyApp Motivo: imagen no encontrada (lldb) Solución: Proyecto -> Destino -> Fases de construcción -> + en la parte superior para agregar una nueva fase Copiar archivos Destino = Marcos Seleccione el marco eso necesita ser copiado
Adam Mendoza
@ AdamMendoza Hice que rechazaran mi aplicación por hacer eso.
jbouaziz
@jbouaziz, sí, un error con el que se puede encontrar se debe a que .framework es gordo, lo que significa que tiene arquitecturas que no son compatibles con iOS, como i386 x86_64, además del armv7 arm64 necesario. La tienda le dará un error, pero es posible que no vea el error en Xcode. Use el cargador en Xcode -> Abrir herramienta de desarrollador -> Cargador de aplicaciones. SolutionL hacerlo delgado ver -> ikennd.ac/blog/2015/02/…
Adam Mendoza
28

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

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

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

He resuelto este problema cambiando Requireda Optionalin Linked Frameworks and Librariesfor UserNotifications.frameworkframework.

jfalexvijay
fuente
Esto funciona. ¿Alguien sabe por qué? Porque algunos dispositivos necesitan esta configuración, otros no.
NEO
Recibo "advertencia: no se pudo ejecutar el código de soporte para leer los datos de la clase Objective-C en el proceso. Esto puede reducir la calidad de la información de tipo disponible". cuando marque mi lib como opcional
BergP
funcionó, tal vez la razón es que algún marco no se ejecutó en el simulador por eso
Gowtham Sooryaraj
@ redent84 Esta respuesta, junto con tu comentario, me salvó de volverme loco. Encontré este problema con AuthenticationServices.framework, que requiere iOS 12.
Tamás Sengel
26

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 Configuración de compilación :
@executable_path/Frameworks

ingrese la descripción de la imagen aquí

Aviel Gross
fuente
Esto solucionó el problema para mí. Comencé a tener el problema después de agregar una extensión de aplicación a mi aplicación iOS 9. Antes de agregar la extensión, mi marco se encontró bien. Agregar una fase de compilación de Copiar archivos no ayudó, y ya estaba incrustando el marco.
Greg
Es tan extraño que esto no está incluido por defecto. Si descomprime y mira su IPA, debe encontrar sus marcos en Payloads / appname.app / Frameworks /. Sin embargo, agregar esta ruta de búsqueda debe estar allí para que la aplicación busque en esta carpeta durante el tiempo de ejecución. Extraño.
mattv123
25

Debe agregar el marco a una nueva Fase de creación de archivos de copia para garantizar 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

liamnichols
fuente
Después de probar tantas cosas, esto es lo que me resolvió. Ya tenía el marco en Link Binary y Embed Framework. No pensé que tenía que agregar también una fase de copia, pero esto lo solucionó.
Adam Mendoza
14

Si está utilizando Xcode 11 o más reciente :

  1. Navegue a la configuración de su objetivo y seleccione General .

Configuración de destino / General

  1. Desplácese hacia abajo hasta Marcos, Bibliotecas y Contenido incrustado .

  2. Asegúrese de que el valor Incrustar y firmar o Incrustar sin firmar esté seleccionado para la opción Incrustar si es necesario.

Sección de marcos, bibliotecas y contenido incrustado

Tamás Sengel
fuente
13

Agregue el marco en binarios incrustados ingrese la descripción de la imagen aquí

Luego limpiar y construir.

Vineesh TP
fuente
11

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

Mi caso fue un marco personalizado 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 establecer Dynamic Library Install Name Base( DYLIB_INSTALL_NAME_BASE) debajo Build Settingsdel Proyecto Marco y luego reconstruirlo. Estaba configurado incorrectamente $(LOCAL_LIBRARY_DIR)y tuve que cambiarlo a @rpath.

Entonces, en la etapa de procesamiento de enlaces en el Proyecto de aplicación , estaba instruyendo a la aplicación host para cargar dinámicamente el marco en tiempo de ejecución desde /Library/Frameworks/fw.Framework/fw(como en la raíz del sistema de archivos de tiempo de ejecución) en lugar de la ruta a la aplicación/Frameworks/fw.Framework/fw

Con respecto a todos los demás valores: que no tiene por qué ser en 3 lugares en Build Phases, pero estos son todos conjunto a la vez cuando se acaba de añadir a la Embedded Binariesconfiguración de la Generalpestaña de la aplicación de alojamiento.

Yo no tengo que configurar un extra de Copy Filesfase, que intuitivamente parece redundante con respecto a la etapa de incorporación de todos modos. Al verificar el final de la transcripción de compilación, podemos asegurar que eso 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ó el DYLIB_INSTALL_NAME_BASEvalor incorrectamente en mí.

BaseZen
fuente
1
Gracias, este resultó ser mi problema en Xcode 11. Estaba importando uno de mis propios marcos, que anteriormente funcionaba, pero comencé a emitir el error "dyld: Biblioteca no cargada". Para que quede claro, desea establecer la configuración de compilación "Dynamic Library Install Name Base" en "@rpath" en el proyecto del marco que está intentando importar, no en el proyecto al que está importando. De alguna manera se configuró en "/ Library / Frameworks".
Ben Stahl
Me alegro de que esto haya sido útil 3 años después. Editado en consecuencia.
BaseZen
9

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

Andrea Leganza
fuente
8

Mi entorno: Cocos2d 2.0, Box2d, Objetivo 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

Jim Rota
fuente
8

Si está utilizando un marco de terceros y está utilizando Cocoapods como su administrador de dependencias, intente hacer una pod installactualización de sus pods.

Este bloqueo estaba ocurriendo en una biblioteca de terceros que estaba usando, así que me alegro de que la solución anterior funcionó para mí, ¡espero que funcione para usted!

Ingeniero tecnológico de Nueva York
fuente
1
¡Excelente! arreglaron mi problema Pero, ¿hay alguna forma de evitar la instalación de dependencias de pod en mi aplicación host?
DàChún
8

ingrese la descripción de la imagen aquí

Resuelto para mí al desmarcar "Copiar solo cuando está instalado" en Fases de compilación-> Incrustar marcos

Shohin
fuente
1
Sería bueno saber el punto de esta casilla de verificación si el sistema no cree que "depurar instalación" no sea "instalar". De todos modos, si causa un bloqueo de la aplicación en el hardware en lugar de prohibir la ejecución de la aplicación con una advertencia, es otro defecto de Xcode limpio
William Cerniuk
8

Es un error de tiempo de ejecución causado por Dynamic Linker

dyld: Library not loaded: @rpath/...
...
Reason: image not found

El error Library not loadedcon @rpathindica que Dynamic Linkerno se puede encontrar el binario.

  1. Compruebe si se agregó el marco dinámico a General -> Embedded Binaries

  2. Compruebe la @rpathconfiguración entre consumidor (aplicación) y productor (marco dinámico):

    • Marco dinámico:
      • Build Settings -> Dynamic Library Install Name
    • Solicitud:
      • Build Settings -> Runpath Search Paths
      • Build Phases -> Embed Frameworks -> Destination, Subpath

Enlazador dinámico

Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)que es utilizado por loadable bundle( Dynamic frameworkcomo derivado) donde dyldentra en juego
Dynamic Library Install Name: ruta al archivo binario (no .framework). Sí, tienen el mismo nombre, pero MyFramework.frameworkes una packaged bundlecon el MyFrameworkarchivo binario y los recursos dentro.
Esta ruta al directorio puede ser absoluta o relativa (p @executable_path. Ej . @loader_path, @rpath). La ruta relativa es más preferible porque se cambia junto con un ancla que es útil cuando distribuye su paquete como un solo directorio

ruta absoluta - ejemplo de Framework1

//Framework1 Dynamic Library Install Name
/some_path/Framework1.framework/subfolder1

@executable_path

@executable_path - relativo a la entrada binaria - Caso de uso de ejemplo de Framework2
: incrustar un Dynamic frameworken una aplicación

//Application bundle(`.app` package) absolute path
/some_path/Application.аpp

//Application binary absolute path 
/some_path/Application.аpp/subfolder1

//Framework2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

//Framework2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework2 Dynamic Library Install Name 
@executable_path/../Frameworks/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
/some_path/Application.аpp/subfolder1/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

@loader_path

@loader_path - relativo al paquete que es propietario de este
caso de uso binario : framework con framework incrustado - Framework3_1 con Framework3_2 dentro

//Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

//Framework3_1 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_1 @loader_path == Framework3_1 @executable_path
/some_path/Application.аpp/subfolder1

//Framework3_2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_2 @loader_path == Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 Dynamic Library Install Name 
@loader_path/../Frameworks/Framework3_2.framework/subfolder1

//Framework3_2 binary resolved absolute path by dyld
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1/../Frameworks/Framework3_2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

@rpath - Ruta de búsqueda de Runpath

Ejemplo de Framework2

Anteriormente teníamos que configurar un Framework para trabajar con dyld. No es conveniente porque el mismo Framework no se puede usar con configuraciones diferentes

@rpath es un concepto compuesto que se basa en partes externas (Aplicación) y anidadas (Marco dinámico):

  • Solicitud:

    • Runpath Search Paths(LD_RUNPATH_SEARCH_PATHS)- define una lista de plantillas con las que se puede sustituir @rpath.
       @executable_path/../Frameworks
    • Revise Build Phases -> Embed Frameworks -> Destination, Subpathpara ser el condado donde se encuentra exactamente el marco de incrustación
  • Marco Dinámico:

    • Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)- punto que @rpathse usa junto con la ruta del paquete local a un binario
      @rpath/Framework2.framework/subfolder1
//Application Runpath Search Paths
@executable_path/../Frameworks

//Framework2 Dynamic Library Install Name
@rpath/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
//Framework2 @rpath is replaced by each element of Application Runpath Search Paths
@executable_path/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

* ../- ir al padre del directorio actual

otool - herramienta de visualización de archivos de objetos

//-L print shared libraries used
//Application otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//Framework2 otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//-l print the load commands
//Application otool -l
LC_LOAD_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

LC_RPATH
@executable_path/../Frameworks

//Framework2 otool -l
LC_ID_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

install_name_tool cambiar los nombres de instalación de biblioteca compartida dinámica usando -rpath

CocoaPodsutiliza use_frameworks![Acerca de] para regular unDynamic Linker

[Vocabulario]

yoAlex5
fuente
6

Recientemente me encontré con este problema al importar CoreNFC en iphones más antiguos (por ejemplo, iPhone 6) y Xcode (11.3.1). Pude conseguir que funcionara

  1. En sus proyectos , seleccione el objetivo.
  2. Ir a general pestaña en la parte superior.
  3. Debajo de ' Marcos, bibliotecas y contenido incrustado sección ', agregue el marco (para mí fue CoreNFC). Repita para otros objetivos.
  4. Haga clic en Crear fases en la parte superior y expanda ' Vincular binario con bibliotecas '.
  5. Haga que el marco problemático sea opcional (de requerido).

Esto me permitió compilar para iPhones más viejos / más nuevos sin hacer ningún cambio de código. Espero que esto ayude a otros.

que
fuente
1
GRACIAS.
Hacerlo
no funciona, la aplicación se bloquea y no hay ningún mensaje que indique el tipo de bloqueo en lugar de un punto de interrupción en algún código de ensamblaje.
Newsonic
¿Por qué es necesario hacer esto opcional?
rohitwtbs
5

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 la beta 5 de Xcode 7 y un iPhone 6 con iOS 9 Beta, pero funcionó.

henrik-dmg
fuente
Y tal vez también una carpeta de compilación limpia (CMD + Shift + Alt + K)
Grifas
4

En mi caso, mi proyecto está escrito por Objective-C y en la biblioteca hay archivos Swift. Así que cambié "Insertar siempre bibliotecas estándar de Swift" en la pestaña Configuración de compilación de mi proyecto a y se volvió totalmente correcto.

Usuario18474728
fuente
4

Para cualquier proyecto o proyecto de Framework en Xcode que use pods, una manera fácil de evitar que la biblioteca dinámica (dylb) no se cargue es configurar el archivo de pod en tinta en modo estático. Para hacerlo, solo asegúrese de no escribir la siguiente línea en su archivo pod.

use_frameworks!

Una vez que la línea eliminada de su archivo que guardó, simplemente ejecute desde la consola:

$ pod update
Stéphane de Luca
fuente
2

Si tiene un pod de desarrollo Elimine su aplicación de la instalación del simulador desde el pod -> limpiar -> ejecutar de nuevo ...

Rajesh Kumar
fuente
2

Lo mismo ocurrió cuando creé un nuevo esquema de configuración y compilación.

Entonces la solución para mí fue correr

pod install

para esta configuración recién creada.

Atereshkov
fuente
1

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 ... Goto desarrollador en configuraciones en iPad y iPhone y reindexar con identificadores y borrar las computadoras de confianza todo. Funcionó para mí ........ ....... Después de reinstalar Mac OS Alta versión 10.13.15 seria de Mac OS seirra beta última versión, 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. -ingrese la descripción de la imagen aquí

Apeksha Sahu
fuente
1

Intente cambiar el indicador ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES(en versiones anteriores de xcode:) Embedded Content Contains Swift Codeen la Configuración de compilación de NO a SÍ.

Vittal Pai
fuente
1

Xcode 11

  1. Navegue a la configuración de su objetivo y seleccione General.
  2. Busque "Marcos, bibliotecas y contenido incrustado"
  3. Mantenga "No incrustar" y asegúrese de que todos sus objetivos (si tiene más de uno) solo hayan establecido su propio marco y no otros objetivos.
Matias Jurfest
fuente
1

En Xcode 11

Estaba enfrentando el mismo problema

Cambiar "No incrustar" en la pestaña General > "Marcos, bibliotecas y contenido incrustado" seguía dando como resultado el mismo error.

Lo que sí me resolvió fue agregar el Marco en la pestaña Construir fases > sección Incrustar marcos

--Actualizado---

Observé que en proyectos creados en versiones anteriores de Xcode Embed Frameworks Section no está disponible cuando se ejecuta en Xcode 11, encuentre los pasos a continuación para lograr la solución:

1: Primero debe agregar la nueva fase Copiar archivos en la pestaña Fases de compilación .

ingrese la descripción de la imagen aquí

2: Segundo, cambie el nombre de la fase agregada a Incrustar marcos ingrese la descripción de la imagen aquí

3: Cambiar el destino a Frameworks .

ingrese la descripción de la imagen aquí

4: Agregue el marco para el cual ocurrió el error.

ingrese la descripción de la imagen aquí

vinay
fuente
1

Aunque todo el mundo dice que se debe incrustar el marco en los binarios incrustados, todavía no funciona, porque nos estamos perdiendo un paso importante aquí.

Estos son los dos pasos correctos para agregar los binarios en la pestaña Binarios incrustados:

  1. Elimine el marco que genera el error de "Bibliotecas y marcos vinculados" en la pestaña General.

  2. Ahora agregue el marco eliminado solo en la pestaña Binarios incrustados y eso es todo lo que uno tendría que hacer.

Ejecútalo en el dispositivo y mantén esa sonrisa;)

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

Los pasos anteriores resolvieron mis problemas.

john raja
fuente
0

La solución simple es seguir esta captura de pantalla y luego el bloqueo desaparecerá:

ingrese la descripción de la imagen aquí

Notado: Esto es Xcode 11.5

Sour LeangChhean
fuente
-5

En caso de que alguien aún experimente este problema, a pesar de seguir todos los pasos descritos en las muchas otras 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

Sam
fuente
Exactamente. La firma de código no tiene nada que ver con este error.
igraczech