Facebook-sdk-for-unity: Símbolo indefinido: swiftCompatibility

Creado en 25 jun. 2020  ·  21Comentarios  ·  Fuente: facebook/facebook-sdk-for-unity

Lista de Verificación

Ambiente

Describe aquí tu entorno de desarrollo, dando tantos detalles como sea posible. Si los tiene, asegúrese de incluir:

  • Versión del editor de Unity: 2018.4.23
  • Versión del SDK de Unity: 7.21.0
  • Plataforma de instalación y versión: iOS

Metas

Quiero poder actualizar el SDK de Facebook sin tener que resolver problemas constantemente.

Resultados previstos

XCode compilaría limpiamente el cliente después de actualizar el SDK.

Resultados actuales

XCode no se puede construir

Pasos para reproducir

Actualizar desde 7.20.0 -> 7.21.0 y construir sobre XCode

Muestras de código y detalles

Mostrar mensajes recientes
Símbolo no definido: __swift_FORCE_LOAD _ $ _ swiftCompatibilityDynamicReplacements
Símbolo indefinido: __swift_FORCE_LOAD _ $ _ swiftCompatibility50

bug

Comentario más útil

@ Khaled-Wolf gracias por el código, eso es realmente útil, pero aún así, incluso si esto hace que el proyecto se compile, el marco no se incrusta en el binario automáticamente y la aplicación se bloquea al inicio como lo menciona @NumaNumaNuma. Intenté incrustar manualmente los marcos de FB en la compilación, pero honestamente no sé qué archivo de qué proyecto debo agregar a qué destino. Todos mis intentos fallaron ... ¿Alguna pista sobre eso? (y también, ¿alguna pista sobre cómo hacer que funcione usando un script de proceso posterior?)

Todos 21 comentarios

La solución alternativa actual es agregar use_framework! al Podfile en su proyecto XCode exportado

La solución alternativa actual es agregar use_framework! al Podfile en su proyecto XCode exportado

Gracias @KylinChang , ¡funcionó para mí!

Gracias @KylinChang ,
Sería útil si esto se agrega a las notas de la versión con errores en la página de descarga del SDK.

Vaya, muchas gracias, definitivamente deberías agregar algo al registro de cambios.
Además, es use_frameworks! (plural) 👍

después de agregar use_frameworks! el proyecto se compila, pero se bloquea al comenzar con este error:
[13858:5861271] Error loading /var/containers/Bundle/Application/59B84CDD-B5F4-4BEB-A75B-44DC54DE13E3/myProject.app/Frameworks/UnityFramework.framework/UnityFramework: dlopen(/var/containers/Bundle/Application/59B84CDD-B5F4-4BEB-A75B-44DC54DE13E3/myProject.app/Frameworks/UnityFramework.framework/UnityFramework, 265): Library not loaded: @rpath/FBSDKCoreKit.framework/FBSDKCoreKit Referenced from: /private/var/containers/Bundle/Application/59B84CDD-B5F4-4BEB-A75B-44DC54DE13E3/myProject.app/Frameworks/UnityFramework.framework/UnityFramework Reason: image not found

Agregarlo a la lista de marcos integrados no ayudó.

¿Algo más que deba hacer?

¡No está funcionando para mi! Agregué "use_frameworks!" pero la construcción aún falla. ¿Necesito algo más?

después de agregar use_frameworks! el proyecto se compila, pero se bloquea al comenzar con este error:
[13858:5861271] Error loading /var/containers/Bundle/Application/59B84CDD-B5F4-4BEB-A75B-44DC54DE13E3/myProject.app/Frameworks/UnityFramework.framework/UnityFramework: dlopen(/var/containers/Bundle/Application/59B84CDD-B5F4-4BEB-A75B-44DC54DE13E3/myProject.app/Frameworks/UnityFramework.framework/UnityFramework, 265): Library not loaded: @rpath/FBSDKCoreKit.framework/FBSDKCoreKit Referenced from: /private/var/containers/Bundle/Application/59B84CDD-B5F4-4BEB-A75B-44DC54DE13E3/myProject.app/Frameworks/UnityFramework.framework/UnityFramework Reason: image not found

Agregarlo a la lista de marcos integrados no ayudó.

¿Algo más que deba hacer?

Me sale lo mismo: /

@KylinChang, ¿puedes compartir cómo se ve tu podfile, por favor?

Pude construirlo ahora, pero falla con el mismo error cuando se ejecuta. ¿Alguien pudo hacerlo funcionar?

El mismo problema aquí con Unity 2019.4.1, Facebook SDK 7.21.1.

El uso de use_frameworks! solo usará las bibliotecas dinámicas en lugar de las estáticas. Compila, por supuesto, pero luego esos marcos deben integrarse de alguna manera. Todavía estoy investigando esto, pero en cualquier caso necesito que el espacio de trabajo / proyecto XCode generado por Unity ya esté configurado o nuestro sistema CI fallará ...

Tener que modificar manualmente el podfile y luego el proyecto es algo que no deberíamos tener que hacer para una tarea tan sencilla como simplemente integrar el SDK de Facebook ...

El mismo problema aquí con Unity 2019.4.1, Facebook SDK 7.21.1.

El uso de use_frameworks! solo usará las bibliotecas dinámicas en lugar de las estáticas. Compila, por supuesto, pero luego esos marcos deben integrarse de alguna manera. Todavía estoy investigando esto, pero en cualquier caso necesito que el espacio de trabajo / proyecto XCode generado por Unity ya esté configurado o nuestro sistema CI fallará ...

Tener que modificar manualmente el podfile y luego el proyecto es algo que no deberíamos tener que hacer para una tarea tan sencilla como simplemente integrar el SDK de Facebook ...

Aquí puede configurar un simple script de compilación posterior para modificar el podfile programáticamente, lo uso en mi proyecto y funciona bien
Cree un nuevo archivo MonoBehaviour (por ejemplo: PostProcessBuild_Podfile.cs) y colóquelo en la carpeta Assets / Editor

usando System.Collections;
utilizando System.Linq;
usando System.Collections.Generic;
usando UnityEngine;
usando UnityEditor;
usando UnityEditor.Callbacks;
usando System.IO;

PostProcessBuild_Podfile de clase pública: MonoBehaviour
{
[PostProcessBuildAttribute (45)] // debe estar entre 40 y 50 para asegurarse de que no sea anulado por la generación de Podfile (40) y que se agregue antes de "pod install" (50)
PostProcessBuild_iOS vacío estático privado (destino BuildTarget, cadena buildPath)
{
si (objetivo == BuildTarget.iOS)
{
var fileName = buildPath + "/ Podfile";
var endTag = "plataforma: ios, '9.0'";
var lineToAdd = "use_frameworks!";

        Debug.Log("PostProcess: Adding use_frameworks! to podfile, this fix for new Facebook SDK");
        var txtLines = File.ReadAllLines(fileName).ToList();
        txtLines.Insert(txtLines.IndexOf(endTag)+1, lineToAdd);
        File.WriteAllLines(fileName, txtLines);
        Debug.Log("PostProcess: Adding use_frameworks! to podfile Completed successfully!");
    }
}

}

image

@ Khaled-Wolf gracias por el código, eso es realmente útil, pero aún así, incluso si esto hace que el proyecto se compile, el marco no se incrusta en el binario automáticamente y la aplicación se bloquea al inicio como lo menciona @NumaNumaNuma. Intenté incrustar manualmente los marcos de FB en la compilación, pero honestamente no sé qué archivo de qué proyecto debo agregar a qué destino. Todos mis intentos fallaron ... ¿Alguna pista sobre eso? (y también, ¿alguna pista sobre cómo hacer que funcione usando un script de proceso posterior?)

He vuelto a usar una versión anterior del SDK por ahora (7.19.2 es la más reciente que no usa el SDK 7.0 rápido de iOS).

¡También volví a 7.19.2 como use_frameworks! Parece haber causado problemas con otros pods que estoy usando.
Esperaremos un SDK de Facebook actualizado para volver a intentarlo :(

@NumaNumaNuma sí, esa parece ser la única opción por ahora, ¡se compila y se ejecuta sin problemas! ¡Gracias por compartir esto!

La solución actual aquí es agregar "use_frameworks!" a Podfile o agregue un archivo rápido vacío al proyecto iOS exportado. El problema se solucionó en https://github.com/facebook/facebook-sdk-for-unity/commit/8fdb57a76d2f5a14c168e91663280d40f274c74c y se enviará en la próxima versión.

@KylinChang Y ya son 6 días desde ese compromiso, ¿qué pasa? ¿Por qué todavía tiene error en travis y por qué aún no se ha lanzado?

@Thaina Si tienes prisa, tal vez puedas intentar arreglarlo manualmente. Si observa el compromiso, es un cambio muy pequeño que podría intentar implementar usted mismo. Agregue ese archivo rápido en blanco y las 2 propiedades de compilación a su proyecto xcode en un script posterior a la compilación en la unidad. Apesta tener que hacerlo manualmente, pero podría ahorrarle unos días (¿semanas?) Mientras lo lanzan.
O tal vez hagan lanzamientos semanales y saldrá mañana: D

@NumaNumaNuma Primero, porque eso no funciona

Así que en realidad no sé si hago algo mal o la solución no funciona en primer lugar. O tiene algún requisito de que debería o debe ser una solución del paquete SDK de Facebook directamente o por cualquier otro motivo

En segundo lugar, no es oficial, por lo que contamina mi código y necesito eliminarlo en el futuro cuando salga la solución real, así que trato de evitarlo. Y es por eso que no me gusta hacer eso antes de confirmar que Facebook no lo lanzará pronto.

En tercer lugar, realmente no funcionó, al menos en la unidad 2020.2

  • Ese .swift no puede existir en la carpeta Editor o de lo contrario no se copiaría en el proyecto xcode real
  • En 2019.3 y posteriores, la unidad cambió su estructura de construcción a principal y marco.

    • Entonces, simplemente configure ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES en YES en un solo objetivo principal no soluciona el problema

    • Establecer en ambos objetivos de causa de error que Invalid bundle… contains disallowed file 'frameworks'

En mi caso, necesito mover ese .swift afuera a la carpeta Assets . Luego hizo un proceso de construcción como este

`` C #

si UNITY_2019_3_OR_NEWER

    string target = proj.GetUnityMainTargetGuid();

demás

    string targetName = PBXProject.GetUnityTargetName();
    string target = proj.TargetGuidByName(targetName);

terminara si

////

si UNITY_2019_3_OR_NEWER

    foreach(var framework in new [] { target,proj.GetUnityFrameworkTargetGuid() })

demás

    foreach(var framework in new [] { target })

terminara si

    {
        proj.SetBuildProperty(framework, "ENABLE_BITCODE", "NO");
        proj.SetBuildProperty(framework, "EMBEDDED_CONTENT_CONTAINS_SWIFT", "YES");
        proj.SetBuildProperty(framework, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "NO");
        proj.SetBuildProperty(framework, "SWIFT_VERSION", "5.0");
    }

''

La solución actual aquí es agregar "use_frameworks!" a Podfile o agregue un archivo rápido vacío al proyecto iOS exportado. El problema se solucionó en 8fdb57a y se enviará en la próxima versión.

¡Hola! ¿Podrías decir cuándo vas a lanzar el arreglo?

@KylinChang La corrección es correcta para las versiones anteriores de Unity, pero Unity 2019.3 y las más recientes requieren que se "arregle" un objetivo diferente:
https://github.com/YousicianGit/facebook-sdk-for-unity/commit/878fc7b73d9a2c3751bb36792f0276cdfacf9495

Enviaré la corrección en un PR pronto.

El problema se solucionó en la última versión.

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