ios español - dyld: Biblioteca no cargada: @ rpath / libswiftCore.dylib





xcode tutorial (26)


Estoy usando Xcode 8.3.3 y Xcode 9.2. La solución para mí fue cambiar mi Xcode predeterminado de 8 a 9 usando Xcode Select:

$ xcode-select - print-path

$ sudo xcode-select -switch /Applications/Xcode-9.2.app

Edición: En realidad, lo que parecía ayudar aquí era que Xcode 9.2 utilizaba los datos derivados de Xcode 8.3.3. No es una solución, pero al menos me permite seguir adelante con mi trabajo.

Estoy intentando ejecutar una aplicación Swift en mi iPhone 4s. Funciona bien en el simulador, y mi amigo puede ejecutarlo con éxito en su iPhone 4s. Tengo iOS 8 y el lanzamiento oficial de Xcode 6.

Yo he tratado

  • Reiniciando Xcode, iPhone, computadora
  • Limpieza y reconstrucción
  • Revocar y crear nuevo perfil de certificado / provisión.
  • Runpath Search Paths es $(inherited) @executable_path/Frameworks
  • El contenido incrustado contiene código Swift es 'Sí'
  • Identidad de firma de código es desarrollador

A continuación se muestra el error en su totalidad.

dyld: Library not loaded: @rpath/libswiftCore.dylib
  Referenced from: /private/var/mobile/Containers/Bundle/Application/LONGSERIALNUMBER/AppName.app/AppName
  Reason: no suitable image found.  Did find:
    /private/var/mobile/Containers/Bundle/Application/LONGSERIALNUMBER/AppName.app/Frameworks/libswiftCore.dylib: mmap() error 1 at
address=0x008A1000, size=0x001A4000 segment=__TEXT in Segment::map() mapping
/private/var/mobile/Containers/Bundle/Application/LONGSERIALNUMBER/APPLICATION_NAME/Frameworks/libswiftCore.dylib



Tenía este problema con la ejecución de mis pruebas de Swift (pero no mi aplicación). Resulta que la prueba necesitaba tener más de @executable_path/Frameworks en su configuración de compilación Runpath Search Paths para el objetivo de la prueba. La configuración de las Rutas de búsqueda de Runpath a las siguientes me sirvió de encanto:

$(inherited)
@executable_path/Frameworks
@loader_path/Frameworks



Las soluciones anteriores no funcionaron para mí. Arreglo el problema siguiendo los siguientes pasos:

  1. Tuve que ir al teléfono (Configuración> Perfil) y eliminar los perfiles que estaban en el teléfono (incluidas todas las aplicaciones asociadas con ese perfil / provisiones).
  2. Después de eso, asegúrese de descargar las disposiciones de Apple en xcode. Vaya a configuración de xcode> cuenta e inicie sesión en su cuenta de desarrollador de Apple.



Vamos a proyectar P está importando la biblioteca personalizada L, luego debe agregar L en

P -> Build Phases -> Embed Frameworks -> + . Funciona para mi.




OK, compartiendo aquí otra causa de este error. Me tomó unas horas resolver esto.

En mi caso, la política de confianza de mi certificado en Keychain Access fue Always Trust , cambiando de nuevo a la configuración predeterminada resolvió el problema.

Para abrir la ventana de configuración del certificado, haga doble clic en el certificado en la lista de certificados de Keychain Access.




Comencé a recibir este error cuando quité:

@executable_path/Frameworks

de Runpath Search Paths en mi configuración de compilación. Reemplazarlo lo arregló todo de nuevo (¡gracias a Dios por el control de la fuente!)

No sé cómo llegó allí, pero parece ser necesario para que un binario encuentre su tiempo de ejecución Swift incorporado.




Para mí, después de haber intentado todo sin éxito, lo que funcionó fue eliminar @executable_path/Frameworks de la Packaging section (no sé cómo llegó a estar allí en primer lugar)




Hay muchas respuestas allí, pero puede que mi respuesta ayude a alguien.

Estoy teniendo el mismo problema, mi aplicación funciona bien en el simulador pero en el dispositivo se bloqueó cuando la aplicación I Lunches y da el error anterior. He intentado todas las respuestas y soluciones. En Mi caso, Mi proyecto Tengo varios objetivos. He creado un objetivo duplicado B desde el objetivo A. El objetivo B funciona bien mientras que el objetivo A se estrelló. Estoy usando diferentes recursos de imagen para cada objetivo. Después de buscar y hacer google, he encontrado algo que podría ayudar a alguien.

La aplicación deja de fallar cuando cambio el nombre de los recursos de Imágenes de lanzamiento para ambas aplicaciones. por ejemplo, Target A Launch Image nombre del activo LaunchImage A. Target B Lunch Image nombre de activo LaunchImage B y asignado correctamente en la pestaña General de cada objetivo. Mis aplicaciones funcionan bien.







Ninguna de las soluciones funcionó para mí. Reiniciando el teléfono lo arregló. Extraño pero funcionó.




Estoy usando Xcode 7.2. Si ha intentado todo lo anterior y el error persiste, ¡intente eliminar el certificado anterior de Keychain Access! Es un dolor para finalmente arreglar esto.




Tengo varias versiones de Xcode instaladas al mismo tiempo. El marco fue construido con una nueva versión de Xcode. La aplicación que intenté compilar fue con una versión anterior de Xcode. Cuando limpié y compilé tanto el marco como la aplicación con la misma versión de Xcode, las cosas funcionaron.




En mi caso, era solo el nombre de mi objetivo:

Lo renombré así : MyApp.something y apareció el mismo problema. Pero vi en la ventana de Configuración de compilación, el nombre de mi módulo de producto ha sido cambiado como este MyApp-algo . Por lo tanto, eliminé el punto en mi nombre de destino ( MyAppSomething ) y el problema desapareció.




Cambie los recursos de los pods de copia para el objetivo desde:

"${SRCROOT}/Pods/Target Support Files/Pods-Wishlist/Pods-Wishlist-resources.sh"

a:

"${SRCROOT}/Pods/Target Support Files/Pods-Wishlist/Pods-Wishlist-frameworks.sh"



Runpath Search Paths configurar las Runpath Search Paths en @executable_path/Frameworks como se muestra en la siguiente captura de pantalla de Configuración de compilación:

Si tiene marcos incrustados hechos en Swift, entonces puede configurar YES para que el Embedded Content Contains Swift Code opciones de compilación Embedded Content Contains Swift Code .




Estaba teniendo el mismo problema después de cambiarme a un nuevo Mac, y después de las horas, probando todas las respuestas sugeridas en las preguntas, nada de esto funcionó para mí.

La solución para mí fue instalar este certificado faltante. http://developer.apple.com/certificationauthority/AppleWWDRCA.cer

Encontré la respuesta aquí. https://.com/a/14495100/976628




Sorprendentemente, todo lo que hice fue "Limpiar" mi proyecto (shift + cmd + K) y funcionó. Parecía estar relacionado con el certificado sin embargo.




Cuando Xcode le pide que restablezca los certificados, lo restablece . Y la aplicación se puede ejecutar en un dispositivo real sin que se bloqueen los mensajes de error. Una vez resuelto este problema en un proyecto veloz. Otros proyectos rápidos con este problema son arreglados también.

He luchado por estos alrededor de medio día y descubrí que restablecer los certificados una y otra vez en el portal de aprovisionamiento no ayuda.




Después de haber probado todo, finalmente descubrí que la construcción parece no incluir cada detalle una y otra vez. Tal vez para acelerar el proceso ... Para asegurar un embalaje ENTERO antes de ejecutarlo en un dispositivo, primero haga una limpieza: Shift-Cmd-K. Luego construye con: Cmd-B. Después de eso ejecútalo en tu dispositivo. Fácil. Un cordial saludo a todos ustedes, buenos chicos en ese lugar!




ninguna de estas soluciones pareció funcionar, pero cuando cambié el permiso del certificado World Wide Developer para Use System defaults , funcionó. He incluido los pasos y capturas de pantalla en el siguiente enlace

Le animo a registrar el ticket en el informe de error de Apple como se menciona aquí, ya que Apple realmente debería resolver este error masivo: https://.com/a/41401354/559760




Para agregar a la solución de certificado de distribución empresarial: puede abrir Keychain e inspeccionar el certificado. Si hay algún texto en rojo que diga que la cadena de confianza no se puede verificar o que se está revocando, ¡NO FUNCIONARÁ! En mi computadora, nuestro certificado de distribución se mostraba como revocado a pesar de que el portal web lo mostraba como todavía válido. Obtuvimos un nuevo certificado de distribución, que era verde (válido) en Keychain, y esto resolvió el problema.




Creo que es un error cuando los certificados se generan directamente desde Xcode. Para resolver (al menos en Xcode 6.1 / 6A1052d):

  1. Vaya al sitio web de Apple Developer donde se administran los certificados: https://developer.apple.com/account/ios/certificate/certificateList.action
  2. seleccione su (s) certificado (s) (que deberían mostrar "Administrado por Xcode" en "Estado") y "Revocar"
  3. siga las instrucciones aquí para generar manualmente un nuevo certificado: https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingCertificates/MaintainingCertificates.html#//apple_ref/doc/uid/TP40012582-CH31-SW32
  4. Vaya a Xcode> Preferencias> Cuentas> [su ID de Apple]> haga doble clic en el nombre de su equipo> haga clic en el botón Actualizar para actualizar los certificados y los perfiles de aprovisionamiento



En Xcode 8, la opción para Embedded Content Contains Swift Code opción Embedded Content Contains Swift Code ya no está disponible.

Se le cambió el nombre a "Always Embed Swift Standard Libraries = YES"




Creo que Apple ya lo ha resumido en la aplicación Swift se bloquea al intentar hacer referencia a la biblioteca Swift libswiftCore.dylib

Citado de la sección de preguntas y respuestas técnicas QA1886 :

La aplicación Swift se bloquea al intentar hacer referencia a la biblioteca libswiftCore.dylib de Swift.

P: ¿Qué puedo hacer con el error de carga de libswiftCore.dylib en la consola de mi dispositivo que ocurre cuando intento ejecutar la aplicación de idioma Swift?

R: Para corregir este problema, deberá firmar su aplicación utilizando certificados de firma de código con la Unidad organizativa del sujeto (OU) establecida en su ID de equipo. Todos los certificados de desarrollador de iOS estándar y de empresa que se crean después de que se lanzó iOS 8 tienen el nuevo campo de ID del equipo en el lugar adecuado para permitir que se ejecuten las aplicaciones de lenguaje Swift.

Por lo general, este error aparece en el registro de la consola del dispositivo con un mensaje similar a uno de los siguientes:

[....] [deny-mmap] mapped file has no team identifier and is not a platform binary:
/private/var/mobile/Containers/Bundle/Application/5D8FB2F7-1083-4564-94B2-0CB7DC75C9D1/YourAppNameHere.app/Frameworks/libswiftCore.dylib

Dyld Error Message:
  Library not loaded: @rpath/libswiftCore.dylib

Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x0000000120021088
Triggered by Thread: 0

Referenced from: /private/var/mobile/Containers/Bundle/Application/C3DCD586-2A40-4C7C-AA2B-64EDAE8339E2/TestApp.app/TestApp
Reason: no suitable image found. Did find:
/private/var/mobile/Containers/Bundle/Application/C3DCD586-2A40-4C7C-AA2B-64EDAE8339E2/TestApp.app/Frameworks/libswiftCore.dylib: mmap() error 1 at address=0x1001D8000, size=0x00194000 segment=__TEXT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/C3DCD586-2A40-4C7C-AA2B-64EDAE8339E2/TestApp.app/Frameworks/libswiftCore.dylib
Dyld Version: 353.5

Los nuevos certificados son necesarios al crear un archivo y empaquetar su aplicación. Incluso si tiene uno de los nuevos certificados, simplemente renunciar a un archivo de aplicaciones swift existente no funcionará. Si se construyó con un certificado pre-iOS 8, deberá crear otro archivo.

Importante: tenga cuidado si necesita revocar y configurar un nuevo certificado de Distribución Empresarial. Si usted es un desarrollador interno de Enterprise, deberá tener cuidado de no revocar un certificado de distribución que se usó para firmar una aplicación; cualquiera de sus empleados de Enterprise sigue utilizando como cualquier aplicación firmada con ese certificado de distribución de empresa. dejará de funcionar de inmediato. Lo anterior solo se aplica a los certificados de Distribución Empresarial. Los certificados de desarrollo son seguros para revocarlos para desarrolladores de iOS empresariales / estándar.

A medida que los individuos de AirSign state las raíces del problema del atributo OU faltante en el campo de asunto del certificado interno.

Asunto: UID = 269J2W3P2L, CN = Distribución de iPhone: Nombre de la compañía, OU = 269J2W3P2L , O = Nombre de la compañía, C = FR

Tengo un certificado de desarrollo empresarial, creando uno nuevo solucionado el problema.




Para el dispositivo, también necesita agregar el marco dinámico a la sección Embedded binaries en la pestaña General del proyecto.




  1. No debe enviar ni recibir objetos de clase personalizados desde un destino (iOS) al segundo objetivo (watchOS), sino que debe enviar / recibir datos en formato de diccionario como [String: Any] y este diccionario debe contener una matriz de sus propiedades personalizadas requeridas. en el par de valores clave en el diccionario simple. Esto podría ser fácilmente decodificable en el lado del reloj.

  2. Debería crear una clase desacoplada que extienda WCSessionDelegate tal como se muestra a continuación, para que esta clase se pueda usar no solo en ExtensionDelegate sino también en cualquier WKInterfaceController.

    class WatchSessionManager: NSObject, WCSessionDelegate {
    
        static let sharedManager = WatchSessionManager()
    
        private override init() {
            super.init()
            self.startSession()
        }
    
        private let session: WCSession = WCSession.default
    
        func startSession() {
            session.delegate = self
            session.activate()
        }
    
        func tryWatchSendMessage(message: [String: Any], completion: (([String: Any]) -> Void)? = nil) {
            print("tryWatch \(message)")
            weak var weakSelf = self
            if #available(iOS 9.3, *) {
                if weakSelf?.session.activationState == .activated {
                    if weakSelf?.session.isReachable == true {
                        weakSelf?.session.sendMessage(message,
                                                      replyHandler: { [weak self]  ( response )  in
                                                        guard let slf = self else {return}
                                                        //Get the objects from response dictionary
                                                        completion?(response)
                            },
                                                      errorHandler: { [weak self] ( error )  in
                                                        guard let slf = self else {return}
                                                        print ( "Error sending message: % @ " ,  error )
                                                        // If the message failed to send, queue it up for future transfer
                                                        slf.session.transferUserInfo(message)
                        })
                    } else {
                        self.session.transferUserInfo(message)
                    }
                }else{
                    self.session.activate()
                    self.session.transferUserInfo(message)
                }
            } else {
                // Fallback on earlier versions
                if self.session.activationState == .activated {
                    if self.session.isReachable == true {
                        self.session.sendMessage(message,
                                                 replyHandler: {  ( response )  in
                                                    //Get the objects from response dictionary
                                                    completion?(response)
                        },
                                                 errorHandler: {  ( error )  in
                                                    print ( "Error sending message: % @ " ,  error )
                                                    // If the message failed to send, queue it up for future transfer
                                                    self.session.transferUserInfo(message)
                        })
                    } else {
                        self.session.transferUserInfo(message)
                    }
                }else{
                    self.session.activate()
                    self.session.transferUserInfo(message)
                }
            }
        }
    
    
    }
    

Ahora podría enviar fácilmente un mensaje a su aplicación iOS para despertar y obtener datos de allí (por ejemplo, desde CoreData) usando la función anterior en cualquier WKInterfaceController y el bloque de finalización tendrá sus datos requeridos, tales como

let dict: [String: Any] = ["request": "FirstLoad"]
WatchSessionManager.sharedManager.tryWatchSendMessage(message: dict,completion:{ (data) in print(data)})

De la misma manera que debería utilizar este WatchSessionManager en iOS y recibir la solicitud y según la clave solicitada, debe tomar datos del núcleo de almacenamiento / base de datos y enviar la lista de objetos personalizados en un patrón simple de valor clave dentro de la función replyHandler of didreceiveMessage como se muestra a continuación .

 func session(_ session: WCSession, didReceiveMessage message: [String: Any], replyHandler: @escaping ([String: Any]) -> Void) {
 var dict: [String: Any] = [String: Any]()
 replyHandler(dict) //This dict will contain your resultant array to be sent to watchApp.
}

En algún momento, la aplicación iOS (estado asesinado) no es alcanzable para WatchApp, para resolver ese problema debe llamar a "tryWatchSendMessage" dentro del temporizador de aproximadamente 3 segundos de intervalo. Y cuando obtenga la conexión de watchApp, debe invalidar el temporizador.

La funcionalidad sendMessage de WatchConnectivity es tan poderosa para activar su aplicación. Debe usarlo de manera optimizada.





ios xcode swift