React-native-onesignal: Error de compilación de OneSignal OneSignalNotificationExtension en Xcode 12 relacionado con cocoapods / arquitectura / problemas del simulador

Creado en 31 ago. 2020  ·  32Comentarios  ·  Fuente: OneSignal/react-native-onesignal

Descripción:

Recién actualizado de Xcode 10 a Xcode 12, antes en la v10, este proyecto se construyó y se ejecutó con éxito.

Error de compilación de destino de OneSignalNotificationExtension:

Undefined symbol: _swift_getObjCClassMetadata

Undefined symbol: type metadata accessor for Foundation.UUID

Undefined symbol: Swift._bridgeAnythingToObjectiveC<A>(A) -> Swift.AnyObject

Undefined symbol: protocol descriptor for Swift.ExpressibleByFloatLiteral

Undefined symbol: associated conformance descriptor for Swift.ExpressibleByFloatLiteral.Swift.ExpressibleByFloatLiteral.FloatLiteralType: Swift._ExpressibleByBuiltinFloatLiteral

Undefined symbol: associated type descriptor for Swift.ExpressibleByFloatLiteral.FloatLiteralType

Undefined symbol: protocol descriptor for Swift.ExpressibleByIntegerLiteral

Undefined symbol: associated type descriptor for Swift.ExpressibleByIntegerLiteral.IntegerLiteralType

Undefined symbol: method descriptor for Swift.ExpressibleByIntegerLiteral.init(integerLiteral: A.IntegerLiteralType) -> A

Undefined symbol: static Foundation.UUID._unconditionallyBridgeFromObjectiveC(__C.NSUUID?) -> Foundation.UUID

Undefined symbol: value witness table for Builtin.Int32

Undefined symbol: protocol witness table for Swift.Int : Swift._ExpressibleByBuiltinIntegerLiteral in Swift


y 100 errores más

No soy tan bueno con Xcode y Mac, así que lo siento si no es claro o engañoso.

Gracias

Medio ambiente

react-native 0.63.2
onesignal-react-native 3.9.1
Xcode 12
Instalado a través de npm y vinculado con pods

Pasos para reproducir el problema:

  • Construir

  • Help Wanted

    Comentario más útil

    También tengo algunos problemas con Xcode 12

    Puedo construir con éxito el proyecto en Xcode 11. Sin embargo, tan pronto como abro Xcode12 y construyo el proyecto, aparece el siguiente error:

    ▸ Linking OneSignalNotificationServiceExtension
    
    ❌  clang: error: no such file or directory: '/Users/carloscuesta/project-folder/ios/build/project/Build/Products/Debug-iphonesimulator/libRCTOneSignal.a'
    

    Esto no parece un error del lado de OneSignal. Parece que hay algo extraño con la caché o algo así,
    cosas que probé:

    • Eliminar datos derivados de Xcode - rm -rf ~/Library/Developer/Xcode/DerivedData/
    • Borre las dependencias react-native, yarn cache y reinstale.
    • Restablecer los datos y el contenido del simulador
    • Reinicia la computadora

    No sé qué más debería probar, diría que todo está vinculado correctamente ya que la aplicación funciona bien en Producción y la compilación funciona con Xcode 11.

    Tengo la biblioteca vinculada manualmente usando la guía OneSignal, ¿alguna idea sobre cómo solucionar esto? 🙏🏼

    Por lo general, cuando recibí este problema, se resolvió limpiando DerivedData pero no puedo deshacerme del error 😞

    Todos 32 comentarios

    Hola,
    ¿Cómo se ve su archivo NotificationService.swift ? Debería ser algo como:

    import UserNotifications
    
    import OneSignal
    
    class NotificationService: UNNotificationServiceExtension {
    
        var contentHandler: ((UNNotificationContent) -> Void)?
        var receivedRequest: UNNotificationRequest!
        var bestAttemptContent: UNMutableNotificationContent?
    
        override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: <strong i="8">@escaping</strong> (UNNotificationContent) -> Void) {
            self.receivedRequest = request;
            self.contentHandler = contentHandler
            bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
    
            if let bestAttemptContent = bestAttemptContent {
                OneSignal.didReceiveNotificationExtensionRequest(self.receivedRequest, with: self.bestAttemptContent)
                contentHandler(bestAttemptContent)
            }
        }
    
        override func serviceExtensionTimeWillExpire() {
            // Called just before the extension will be terminated by the system.
            // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
            if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
                OneSignal.serviceExtensionTimeWillExpireRequest(self.receivedRequest, with: self.bestAttemptContent)
                contentHandler(bestAttemptContent)
            }
        }
    
    }
    

    Eche un vistazo al paso 4.3.6 en las instrucciones de configuración y continúe desde allí para asegurarse de haber configurado todo correctamente.

    Espero que esto ayude. Salud

    Gracias por la respuesta.

    Estoy usando el archivo Objective-C. ¿Debería usar el rápido?

    Pensé que estabas usando Swift. Si está usando Obj-C, use el Objective C. ¡Disfrutar!

    También tengo algunos problemas con Xcode 12

    Puedo construir con éxito el proyecto en Xcode 11. Sin embargo, tan pronto como abro Xcode12 y construyo el proyecto, aparece el siguiente error:

    ▸ Linking OneSignalNotificationServiceExtension
    
    ❌  clang: error: no such file or directory: '/Users/carloscuesta/project-folder/ios/build/project/Build/Products/Debug-iphonesimulator/libRCTOneSignal.a'
    

    Esto no parece un error del lado de OneSignal. Parece que hay algo extraño con la caché o algo así,
    cosas que probé:

    • Eliminar datos derivados de Xcode - rm -rf ~/Library/Developer/Xcode/DerivedData/
    • Borre las dependencias react-native, yarn cache y reinstale.
    • Restablecer los datos y el contenido del simulador
    • Reinicia la computadora

    No sé qué más debería probar, diría que todo está vinculado correctamente ya que la aplicación funciona bien en Producción y la compilación funciona con Xcode 11.

    Tengo la biblioteca vinculada manualmente usando la guía OneSignal, ¿alguna idea sobre cómo solucionar esto? 🙏🏼

    Por lo general, cuando recibí este problema, se resolvió limpiando DerivedData pero no puedo deshacerme del error 😞

    He descubierto algo raro

    Si intento construir la aplicación con Xcode 12, siempre falla. Sin embargo, si construyo la aplicación primero con Xcode 11 y luego abro Xcode 12 y construyo la aplicación, funciona 🤯

    Sin embargo, tan pronto como limpio la compilación e intento reconstruir nuevamente con Xcode 12, comienza a fallar con el mismo error nuevamente 😖

    El mismo error aquí con Xcode 12 y onesignal-react-native 3.9.1 :-(
    Los proyectos estaban funcionando antes de la actualización.

    Mismo error.
    SDK de una sola señal -> 2.15.2
    react-native-onesignal -> 3.9.1
    Funcionó bien en xCode 11.

    Hola,
    Eso es extraño @carloscuesta . ¿Ha intentado ver una diferencia entre el proyecto en Xcode 11 vs 12? Quizás 12 esté cambiando algunas configuraciones de compilación importantes por alguna razón.

    Tuve un problema similar cuando actualicé mi Xcode de 11 a 12 ..

    Hola @rgomezp

    Puedo confirmar que no hay cambios de Xcode 11 a Xcode 12. El git status del repositorio no está modificado.

    Sin embargo, todavía puedo reproducir la compilación fallida. Y cada vez que construyo en Xcode 11 y Xcode 12 after funciona por primera vez 😕

    Screenshot 2020-09-25 at 12 12 40

    Screenshot 2020-09-25 at 12 18 39

    Hola,
    Creo que esto está relacionado con el problema actual de aquí .

    Esto podría funcionar agregue x86_64 a VALID_ARCH si necesita ejecutar la aplicación en el simulador, por ejemplo, x86_64 arm64 arm64e

    Este desbordamiento de pila puede contener la solución que necesita.

    ¡Oye! Gracias por tu ayuda @rgomezp

    ¡Te contaré los resultados de mis experimentos!

    Agregar arquitecturas excluidas

    Presenté arm64 como se sugiere en la publicación de StackOverflow en Project > Architectures > Excluded Architectures .

    Screenshot 2020-09-28 at 13 40 32

    Esto no solucionó el problema. Tengo el mismo error quejándome de x86_64 .

    Screenshot 2020-09-28 at 13 39 50

    Así que seguí adelante y agregué x86_64 al Excluded Architectures .

    Screenshot 2020-09-28 at 13 41 12

    Después del siguiente cambio, el siguiente error parece estar solucionado. Sin embargo, tengo otro error con respecto al OneSignalNotificationServiceExtension.appex .

    Embedded binary is not signed with the same certificate as the parent app. Verify the embedded binary target's code sign settings match the parent app's.
    

    Sin embargo, no cambié nada relacionado con CodeSign 🤔 - La compilación Xcode11 funciona bien

    Screenshot 2020-09-28 at 11 36 29

    Después de limpiar la compilación DerivedData y reiniciar la computadora. Veo otro error: Link app (i386) .

    Si abro el error, veo que muchos archivos no se encuentran en la carpeta DerivedData . Ninguno de ellos relacionado con OneSignal. Sin embargo, no sé por qué esto está fallando si funciona correctamente en Xcode 11. Estoy tan confundido en este momento 😅

    Utilice VALID_ARCHS

    Esto tampoco me ha funcionado. También leí que esto está en desuso en Xcode 12 y que se debe usar Excluded Architectures su lugar.

    No tenía User-Defined Setting para esto. Como no estoy usando CocoaPods y tengo el módulo vinculado manualmente.

    Encontré un enlace interesante que habla sobre el error "mismo certificado" con Xcode después de excluir arm64 .

    Dice que las extensiones no deben excluir esas arquitecturas . El mismo error lamentablemente :(

    Estoy sin ideas por hoy 😅

    Puedo confirmar que la construcción y ejecución de la aplicación en un dispositivo real no arroja ningún error sin las modificaciones de "Arquitecturas excluidas".

    Entonces es algo 100% relacionado con la arquitectura del propio simulador.

    Screenshot 2020-09-29 at 09 17 24

    Hola Carlos,
    Gracias por la investigación detallada. Para mayor visibilidad, también encontré este hilo de desbordamiento de pila .

    Para resumir el tema de @carloscuesta ,

    1. El error Embedded binary is not signed with the same certificate as the parent app... se resuelve agregando arm64 y x86_64 a las Arquitecturas Excluidas , según las instrucciones para usar esto en ARCOS VÁLIDOS.
    2. La solución publicada en el repositorio de Cocoapods no funcionó para usted porque tiene la biblioteca vinculada manualmente.

    Carlos, en este punto no estoy seguro de qué más se puede hacer, ya que esto suena como un problema que no es de OneSignal.

    ¿Pueden otras personas confirmar que la solución de Cocoapods vinculada anteriormente funciona para ellos si _están_ usando Cocoapods?

    Hola @rgomezp

    Gracias por toda la ayuda que brindó.

    Carlos, en este punto no estoy seguro de qué más se puede hacer, ya que esto suena como un problema que no es de OneSignal.

    No estoy 100% seguro con esta declaración ya que si desvinculo toda la biblioteca OneSignal y elimino el OneSignalNotificationServiceExtension el proyecto se basa en Xcode12. No sé de dónde proviene el error, eso es seguro y tal vez ese sea un caso específico ya que la biblioteca está vinculada manualmente. Y no tengo que tocar nada relacionado con arquitecturas

    Pero sí, veamos si podemos encontrar otros casos de uso 👍🏼

    Parece compilación Xcode 12 para simulador con arquitectura: arm64, i386, x86_64 .

    Entonces mi solución alternativa es

    1. Agregue arm64 en la Arquitecturas excluidas de la construcción del proyecto
    2. Elimine ARCHOS VÁLIDOS de la
      (VAILD ARCHS se movió a Definido por el usuario de la configuración de compilación en Xcode 12)

    Funciona bien en mi proyecto.

    @stanleyctcl ¡ Tu solución funciona! : tada:

    No vi que el objetivo RCTOneSignal dentro de la biblioteca RCTOneSignal tuviera el VALID_ARCHS definido como una configuración User-Defined . ¡Esto es algo que deberíamos eliminar del lado de la biblioteca! ¡Voy a hacer un PR para solucionar el problema!

    Screenshot 2020-10-07 at 10 22 44

    Es por eso que todos mis cambios no funcionaron. Porque la biblioteca OneSignal tiene esta configuración de usuario definida.

    Hola, gracias @stanleyctcl
    Tu solución funcionó para mí.

    Anteriormente, fallaba mi compilación en el modo de lanzamiento para iOS Simulator. Recibí el error building for iOS Simulator, but linking in object file built for iOS, file onesignal . Pero puedo crear el modo de lanzamiento en un dispositivo real sin que aparezcan errores. La solución anterior resolvió este problema.

    Desafortunadamente, después de implementar su solución, no pude Archivar mi aplicación. Recibí este error.

    No architectures to compile for (ARCHS=arm64, VALID_ARCHS=arm64 arm64e armv7 armv7s, EXCLUDED_ARCHS=(
        arm64
    ))
    

    ¿Cualquier pista?

    @abdullahizzuddiin Asegúrese de que solo excluyó la arquitectura para simuladores de iOS

    Ah, mi mal. Olvidé el pequeño detalle. Gracias @carloscuesta por Excluded Architecture sin eliminar VALID ARCHS de la configuración de compilación del subproyecto RCTOneSignal . 🤔

    = = =
    Creo que tengo un error de diferencia. He archivado correctamente. Pero, después de elegir "Administrar firmas automáticamente", aparece este error.
    image

    Puedo implementar una aplicación en Appstore sin ningún problema en la versión anterior de Xcode. Anteriormente, usé 11.7. Ahora, usé 12.0 e instantáneamente obtuve este error sin ningún cambio en mi repositorio.

    //package.json
    react-native-onesignal: 3.8.1
    
    //Podfile
    pod 'OneSignal', '>= 2.14.2', '< 3.0'
    ...
    target 'OneSignalNotificationServiceExtension' do
      pod 'OneSignal', '>= 2.14.2', '< 3.0'
    end
    

    ¿Cualquier pista? ¿O debería crear un problema separado?

    PD:
    También envié mi problema al Foro de desarrolladores de Apple en caso de que no sea un problema de esta biblioteca.

    Estoy usando react-native-onesignal 3.9.1 en la versión React native 0.60.0 ... Puedo resolver este problema al incluir x86_64 dentro de la configuración definida por el usuario (VALID_ARCHS)

    Hola a todos,
    Creo que es seguro cerrar este problema, ya que no parece ser un problema de OneSignal.


    @abdullahizzuddiin
    (Problema diferente, considere abrir un boleto por separado)

    Para mayor visibilidad, publicaré una de las respuestas en el hilo del Foro de desarrollo de Apple :

    PROBLEMA:
    Intentar ejecutar la compilación en el dispositivo real falló, aunque la compilación se realizó correctamente en mi MacBook Pro.
    Se produjo el siguiente error con este mensaje:
    El perfil de aprovisionamiento "Perfil de aprovisionamiento del equipo iOS: com.xxxxxxxxxxxx.Name of -App" no incluye el dispositivo "iPhone" seleccionado actualmente (identificador 0000xxxx-000xxxxxxxxxxxxxxxxxx).

    Manual en línea de ayuda de Xcode

    Preferencias de cuentas
    Utilice las preferencias de Cuentas para administrar los activos de la cuenta de desarrollador (firma de certificados y perfiles de aprovisionamiento), agregar repositorios y agregar servidores.

    Para abrir las preferencias de Cuentas, elija Xcode> Preferencias y haga clic en Cuentas.
    Luego hice clic en, administro certificados y agregué un nuevo certificado haciendo clic en el símbolo más.

    PROBLEMA RESUELTO:
    Luego ejecuté mi compilación y mi error de firma desapareció, la aplicación se instaló en mi iPhone 11 Pro Max.
    Espero que esta solución te ayude.

    Hola @rgomezp

    Este problema fue una mezcla de diferentes problemas. El que está señalando no tiene nada que ver con el problema del Simulador en sí, eso es algo que tiene que ver con RCTOneSignal porque el uso de VALID_ARCHS

    No sé si deberíamos cerrar este problema por completo hasta que se resuelva el del simulador.

    Hola @rgomezp

    Seguí la sugerencia del Apple Dev Forum que extrajo anteriormente. Pero no resolvió mi problema.

    Temporalmente, bajé la versión de Xcode a 11.7 y pude compilar, ejecutar y archivar con éxito. Pero, todavía puedo hacer esos actos en Xcode 12.0

    Dejaré esto abierto para que se cierre automáticamente por # 1053

    Parece compilación Xcode 12 para simulador con arquitectura: arm64, i386, x86_64 .

    Entonces mi solución alternativa es

    1. Add **arm64** in  **Excluded Architectures** of Project Build setting
    
    2. Remove **VALID ARCHS** from RCTOneSignal subproject build setting.
       **(VAILD ARCHS was moved to User-Defined of build setting in Xcode 12)**
    

    Funciona bien en mi proyecto.

    Esto funciona para mi. Recuerda eliminarlo. No solo dejarlo en blanco "", ya que no funcionaría

    editar:
    Mi proyecto utiliza la vinculación manual de una señal 3.2.12.
    react-nativo 0.59.9
    xcode 12

    Probé la solución stanleyctcl que funciona en el simulador para depurar y liberar compilación. Pero cuando construí para un dispositivo / archivo genérico, me enfrenté al mismo problema que abdullahizzuddiin

    No hay arquitecturas para compilar (ARCHS = arm64, VALID_ARCHS = arm64 arm64e armv7 armv7s, EXCLUDED_ARCHS = (
    arm64
    ))

    La solución que funcionó para mí es
    Aplicar esto solo

    2. Remove **VALID ARCHS** from RCTOneSignal subproject build setting.
       **(VAILD ARCHS was moved to User-Defined of build setting in Xcode 12)**
    

    Esto debería hacer que Archive funcione pero la liberación del simulador falle. Para arreglar eso. debe ir a Todos los objetivos del proyecto y el objetivo del pod -> Configuración de compilación -> Arquitectura -> Construir solo arquitectura activa -> Establecer 'Sí' para el modo de lanzamiento

    Explicación y pasos en: https://stackoverflow.com/a/64139830/9232424.
    Más información: https://medium.com/macoclock/deep-drive-xcode-build-settings-827c3ce4811c.

    Ah, mi mal. Olvidé el pequeño detalle. Gracias @carloscuesta por Excluded Architecture sin eliminar VALID ARCHS de la configuración de compilación del subproyecto RCTOneSignal . 🤔

    = = =
    Creo que tengo un error de diferencia. He archivado correctamente. Pero, después de elegir "Administrar firmas automáticamente", aparece este error.
    image

    Puedo implementar una aplicación en Appstore sin ningún problema en la versión anterior de Xcode. Anteriormente, usé 11.7. Ahora, usé 12.0 e instantáneamente obtuve este error sin ningún cambio en mi repositorio.

    //package.json
    react-native-onesignal: 3.8.1
    
    //Podfile
    pod 'OneSignal', '>= 2.14.2', '< 3.0'
    ...
    target 'OneSignalNotificationServiceExtension' do
      pod 'OneSignal', '>= 2.14.2', '< 3.0'
    end
    

    ¿Cualquier pista? ¿O debería crear un problema separado?

    PD:
    También envié mi problema al Foro de desarrolladores de Apple en caso de que no sea un problema de esta biblioteca.

    El mismo problema sucedió conmigo en xcode 12, ¿resolvió el problema? @abdullahizzuddiin o

    gracias

    Para ejecutar en el simulador, tengo que agregar " arm64 " en " Arquitecturas excluidas ".
    Pero, para ejecutar la aplicación en un dispositivo real, tengo que dejarla sin las modificaciones de " Arquitecturas excluidas ".
    Así que tengo que hacer este cambio cada vez que corro.

    Espero que esto ayude.

    El mismo problema aquí, volvió.

    Mismo

    Mismo

    ¿Fue útil esta página
    0 / 5 - 0 calificaciones