Facebook-sdk-for-unity: Symbole non défini : swiftCompatibilité

Créé le 25 juin 2020  ·  21Commentaires  ·  Source: facebook/facebook-sdk-for-unity

Liste de contrôle

Environnement

Décrivez votre environnement de développement ici, en donnant autant de détails que possible. Si vous en avez, assurez-vous d'inclure :

  • Version de l'éditeur Unity : 2018.4.23
  • Version du SDK Unity : 7.21.0
  • Plateforme et version d'installation : iOS

Buts

Je veux pouvoir mettre à jour le SDK Facebook sans résolution de problèmes constante.

Résultats attendus

XCode construirait proprement le client après la mise à jour du SDK.

Résultats actuels

XCode ne parvient pas à se construire

Étapes pour reproduire

Mettre à jour de 7.20.0 -> 7.21.0 et construire sur XCode

Exemples de code et détails

Affichage des messages récents
Symbole non défini : __swift_FORCE_LOAD_$_swiftCompatibilityDynamicReplacements
Symbole non défini : __swift_FORCE_LOAD_$_swiftCompatibility50

bug

Commentaire le plus utile

@Khaled-Wolf merci pour le code, c'est vraiment utile, mais même si cela rend le projet compilé, le framework n'est pas automatiquement intégré dans le binaire et l'application se bloque au démarrage comme mentionné par @NumaNumaNuma. J'ai essayé d'intégrer manuellement les frameworks FB à la construction, mais honnêtement, je ne sais pas quel fichier à partir de quel projet je dois ajouter à quelle cible. Toutes mes tentatives ont échoué... Une idée là-dessus ? (et aussi, une idée sur la façon de le faire fonctionner à l'aide d'un script de post-traitement ?)

Tous les 21 commentaires

La solution de contournement actuelle consiste à ajouter use_framework! au fichier Podfile dans votre projet XCode exporté

La solution de contournement actuelle consiste à ajouter use_framework! au fichier Podfile dans votre projet XCode exporté

Merci @KylinChang ça a marché pour moi !

Merci @KylinChang ,
Il serait utile que cela soit ajouté aux notes de version de la version boguée dans la page de téléchargement du SDK.

Wow merci beaucoup, vous devriez certainement ajouter quelque chose au journal des modifications.
Aussi, c'est use_frameworks! (pluriel)👍

après avoir ajouté use_frameworks ! le projet se construit, mais plante au démarrage avec cette erreur :
[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

L'ajouter à la liste des frameworks intégrés n'a pas aidé.

Autre chose que je dois faire ?

Ça ne fonctionne pas pour moi! J'ai ajouté "use_frameworks!" mais la construction échoue toujours. Ai-je besoin d'autre chose ?

après avoir ajouté use_frameworks ! le projet se construit, mais plante au démarrage avec cette erreur :
[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

L'ajouter à la liste des frameworks intégrés n'a pas aidé.

Autre chose que je dois faire ?

J'obtiens la même chose :/

@KylinChang pouvez-vous partager à quoi ressemble votre fichier pod, s'il vous plaît ?

J'ai pu le construire maintenant, mais il échoue avec la même erreur lors de l'exécution. Quelqu'un a pu le faire fonctionner ?

Même problème ici avec Unity 2019.4.1, Facebook SDK 7.21.1.

L'utilisation de use_frameworks! n'utilisera que les bibliothèques dynamiques au lieu de celles statiques. Il compile, bien sûr, mais ensuite ces frameworks doivent être intégrés d'une manière ou d'une autre. J'étudie toujours cela, mais dans tous les cas, j'ai besoin que l'espace de travail / projet XCode généré par Unity soit déjà configuré ou notre système CI échouera ...

Devoir modifier manuellement le podfile puis le projet est quelque chose que nous ne devrions pas avoir à faire pour une tâche aussi simple que d'intégrer simplement le SDK Facebook...

Même problème ici avec Unity 2019.4.1, Facebook SDK 7.21.1.

L'utilisation de use_frameworks! n'utilisera que les bibliothèques dynamiques au lieu de celles statiques. Il compile, bien sûr, mais ensuite ces frameworks doivent être intégrés d'une manière ou d'une autre. J'étudie toujours cela, mais dans tous les cas, j'ai besoin que l'espace de travail / projet XCode généré par Unity soit déjà configuré ou notre système CI échouera ...

Devoir modifier manuellement le podfile puis le projet est quelque chose que nous ne devrions pas avoir à faire pour une tâche aussi simple que d'intégrer simplement le SDK Facebook...

Ici, vous pouvez configurer un script de post-construction simple pour modifier le podfile par programme, je l'utilise dans mon projet et cela fonctionne très bien
Créez un nouveau fichier MonoBehaviour (par exemple : PostProcessBuild_Podfile.cs) et placez-le dans le dossier Assets/Editor

en utilisant System.Collections ;
using System.Linq;
using System.Collections.Generic;
en utilisant UnityEngine ;
en utilisant UnityEditor ;
en utilisant UnityEditor.Callbacks;
en utilisant System.IO;

classe publique PostProcessBuild_Podfile : MonoBehaviour
{
[PostProcessBuildAttribute(45)]//doit être compris entre 40 et 50 pour s'assurer qu'il n'est pas remplacé par la génération Podfile (40) et qu'il est ajouté avant "pod install" (50)
vide statique privé PostProcessBuild_iOS (cible BuildTarget, chaîne buildPath)
{
if (cible == BuildTarget.iOS)
{
var fileName = buildPath + "/Podfile" ;
var endTag = "plateforme :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 merci pour le code, c'est vraiment utile, mais même si cela rend le projet compilé, le framework n'est pas automatiquement intégré dans le binaire et l'application se bloque au démarrage comme mentionné par @NumaNumaNuma. J'ai essayé d'intégrer manuellement les frameworks FB à la construction, mais honnêtement, je ne sais pas quel fichier à partir de quel projet je dois ajouter à quelle cible. Toutes mes tentatives ont échoué... Une idée là-dessus ? (et aussi, une idée sur la façon de le faire fonctionner à l'aide d'un script de post-traitement ?)

Je suis revenu à l'utilisation d'une ancienne version du SDK pour le moment (7.19.2 est la plus récente qui n'utilise pas le SDK iOS Swift 7.0).

Je suis également revenu à 7.19.2 en tant que use_frameworks ! Semble avoir causé des problèmes avec les autres pods que j'utilise.
Nous attendrons un SDK Facebook mis à jour pour réessayer :(

@NumaNumaNuma ouais cela semble être la seule option pour le moment, il se compile et s'exécute sans problème ! Merci d'avoir partagé ça!

La solution de contournement actuelle consiste à ajouter "use_frameworks!" vers Podfile ou ajoutez un fichier Swift vide au projet iOS exporté. Le problème est résolu dans https://github.com/facebook/facebook-sdk-for-unity/commit/8fdb57a76d2f5a14c168e91663280d40f274c74c et sera expédié dans la prochaine version.

@KylinChang Et cela fait déjà 6 jours après ce commit, que se passe-t-il? Pourquoi il y a toujours une erreur dans Travis et pourquoi il n'est pas encore sorti ?

@Thaina Si vous êtes pressé, vous pouvez peut-être essayer de le réparer manuellement. Si vous regardez le commit, c'est un très petit changement que vous pourriez essayer de mettre en œuvre vous-même. Ajoutez ce fichier Swift vierge et les 2 propriétés de build à votre projet xcode dans un script post-build dans l'unité. Ça craint d'avoir à le faire manuellement, mais cela pourrait vous faire gagner quelques jours (semaines ?) pendant qu'ils le libèrent.
Ou peut-être qu'ils font des sorties hebdomadaires et ça sortira demain :D

@NumaNumaNuma D'abord, parce que ça ne marche pas

Donc, je ne sais pas vraiment que je fais quelque chose de mal ou que le correctif ne fonctionne pas vraiment en premier lieu. Ou il a une certaine exigence qu'il devrait ou doit être un correctif du package facebook SDK directement ou pour toute autre raison

Deuxièmement, ce n'est pas officiel, donc cela pollue mon code et doit réellement le supprimer à l'avenir lorsque le vrai correctif est sorti, alors j'essaie d'éviter cela. Et c'est pourquoi je n'aime pas faire ça avant de confirmer que facebook ne le publiera pas bientôt

Troisièmement, cela n'a vraiment pas fonctionné, du moins dans l'unité 2020.2

  • Ce .swift ne peut pas exister dans le dossier Editor sinon il ne serait pas copié dans le projet xcode réel
  • Dans 2019.3 et après, unity change sa structure de build en main et framework

    • Donc, il suffit de définir ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES sur YES dans une seule cible principale ne résout pas le problème

    • Définir sur les deux cibles provoque une erreur que Invalid bundle… contains disallowed file 'frameworks'

Dans mon cas, je dois déplacer ce .swift extérieur dans le dossier Assets . Puis fait un processus de construction comme celui-ci

`` C #

si UNITY_2019_3_OR_NEWER

    string target = proj.GetUnityMainTargetGuid();

autre

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

fin si

////

si UNITY_2019_3_OR_NEWER

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

autre

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

fin 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 solution de contournement actuelle consiste à ajouter "use_frameworks!" vers Podfile ou ajoutez un fichier Swift vide au projet iOS exporté. Le problème est résolu dans 8fdb57a et sera livré dans la prochaine version.

Salut! Pourriez-vous s'il vous plaît dire quand vous allez publier le correctif ?

@KylinChang Le correctif est correct pour les anciennes versions de Unity, mais Unity 2019.3 et les versions plus récentes nécessitent qu'une cible différente soit "réparée":
https://github.com/YousicianGit/facebook-sdk-for-unity/commit/878fc7b73d9a2c3751bb36792f0276cdfacf9495

Je soumettrai le correctif dans un PR bientôt.

Le problème est résolu dans la dernière version

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

alchemyincarnate picture alchemyincarnate  ·  4Commentaires

JuGGerNaunT picture JuGGerNaunT  ·  3Commentaires

manofspirit picture manofspirit  ·  6Commentaires

yasuohasegawa picture yasuohasegawa  ·  4Commentaires

pvalium picture pvalium  ·  6Commentaires