Facebook-sdk-for-unity: Undefiniertes Symbol: SwiftKompatibilität

Erstellt am 25. Juni 2020  ·  21Kommentare  ·  Quelle: facebook/facebook-sdk-for-unity

Checkliste

Umgebung

Beschreiben Sie hier Ihre Entwicklungsumgebung und geben Sie so viele Details wie möglich an. Wenn Sie sie haben, stellen Sie sicher, dass Sie Folgendes angeben:

  • Unity-Editor-Version: 2018.4.23
  • Unity SDK-Version: 7.21.0
  • Installationsplattform & Version: iOS

Tore

Ich möchte in der Lage sein, das Facebook SDK ohne ständige Problemlösung zu aktualisieren.

erwartete Ergebnisse

XCode würde den Client nach der Aktualisierung des SDK sauber erstellen.

Tatsächliche Ergebnisse

XCode kann nicht erstellt werden

Schritte zum Reproduzieren

Update von 7.20.0 -> 7.21.0 und auf XCode aufbauen

Codebeispiele & Details

Aktuelle Nachrichten anzeigen
Undefiniertes Symbol: __swift_FORCE_LOAD_$_swiftCompatibilityDynamicReplacements
Undefiniertes Symbol: __swift_FORCE_LOAD_$_swiftCompatibility50

bug

Hilfreichster Kommentar

@Khaled-Wolf danke für den Code, der ist wirklich nützlich, aber selbst wenn das Projekt dadurch kompiliert wird, wird das Framework nicht automatisch in die Binärdatei eingebettet und die App stürzt beim Start ab, wie von @NumaNumaNuma erwähnt. Ich habe versucht, die FB-Frameworks manuell in den Build einzubetten, weiß aber ehrlich gesagt nicht, welche Datei aus welchem ​​Projekt ich zu welchem ​​Ziel hinzufügen soll. Alle meine Versuche sind fehlgeschlagen ... Gibt es einen Hinweis darauf? (und auch einen Hinweis, wie man es mit einem Post-Process-Skript zum Laufen bringt?)

Alle 21 Kommentare

Die aktuelle Problemumgehung ist das Hinzufügen von use_framework! zur Poddatei in Ihrem exportierten XCode-Projekt

Die aktuelle Problemumgehung ist das Hinzufügen von use_framework! zur Poddatei in Ihrem exportierten XCode-Projekt

Danke @KylinChang , bei mir hat es funktioniert!

Danke @KylinChang ,
Es wäre hilfreich, wenn dies den Versionshinweisen der fehlerhaften Version auf der SDK-Downloadseite hinzugefügt würde.

Wow, vielen Dank, Sie sollten auf jeden Fall etwas zum Änderungsprotokoll hinzufügen.
Außerdem ist es use_frameworks! (Plural)👍

nach dem Hinzufügen von use_frameworks! Das Projekt wird erstellt, stürzt jedoch beim Start mit folgendem Fehler ab:
[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

Das Hinzufügen zur Liste der eingebetteten Frameworks hat nicht geholfen.

Was muss ich sonst noch tun?

Bei mir funktioniert es nicht! Ich habe "use_frameworks!" hinzugefügt. aber der aufbau schlägt immer noch fehl. Brauche ich noch etwas?

nach dem Hinzufügen von use_frameworks! Das Projekt wird erstellt, stürzt jedoch beim Start mit folgendem Fehler ab:
[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

Das Hinzufügen zur Liste der eingebetteten Frameworks hat nicht geholfen.

Was muss ich sonst noch tun?

Mir geht es genauso :/

@KylinChang kannst du bitte teilen, wie dein Podfile aussieht?

Ich konnte es jetzt erstellen, aber es schlägt mit dem gleichen Fehler beim Ausführen fehl. Hat es jemand geschafft, dass es funktioniert?

Gleiches Problem hier mit Unity 2019.4.1, Facebook SDK 7.21.1.

Wenn Sie use_frameworks! werden nur die dynamischen Bibliotheken anstelle der statischen verwendet. Es kompiliert natürlich, aber dann müssen diese Frameworks irgendwie eingebettet werden. Ich untersuche das immer noch, aber auf jeden Fall muss der von Unity generierte XCode-Workspace/das Projekt bereits eingerichtet sein, oder unser CI-System wird fehlschlagen ...

Das Podfile und dann das Projekt manuell ändern zu müssen, ist etwas, das wir für eine so einfache Aufgabe wie die einfache Integration des Facebook-SDK nicht tun sollten...

Gleiches Problem hier mit Unity 2019.4.1, Facebook SDK 7.21.1.

Wenn Sie use_frameworks! werden nur die dynamischen Bibliotheken anstelle der statischen verwendet. Es kompiliert natürlich, aber dann müssen diese Frameworks irgendwie eingebettet werden. Ich untersuche das immer noch, aber auf jeden Fall muss der von Unity generierte XCode-Workspace/das Projekt bereits eingerichtet sein, oder unser CI-System wird fehlschlagen ...

Das Podfile und dann das Projekt manuell ändern zu müssen, ist etwas, das wir für eine so einfache Aufgabe wie die einfache Integration des Facebook-SDK nicht tun sollten...

Hier können Sie ein einfaches Postbuild-Skript einrichten, um die Poddatei programmgesteuert zu ändern
Erstellen Sie eine neue MonoBehaviour-Datei (zum Beispiel: PostProcessBuild_Podfile.cs) und legen Sie sie in den Ordner Assets/Editor

Verwenden von System.Collections;
Verwenden von System.Linq;
using System.Collections.Generic;
mit UnityEngine;
mit UnityEditor;
Verwenden von UnityEditor.Callbacks;
Verwenden von System.IO;

öffentliche Klasse PostProcessBuild_Podfile: MonoBehaviour
{
[PostProcessBuildAttribute(45)]//muss zwischen 40 und 50 liegen, um sicherzustellen, dass es nicht von der Podfile-Generierung (40) überschrieben wird und vor der "Pod-Installation" (50) hinzugefügt wird.
private static void PostProcessBuild_iOS (BuildTarget-Ziel, Zeichenfolge buildPath)
{
if (target == BuildTarget.iOS)
{
var fileName = buildPath + "/ Podfile";
var endTag = "Plattform: 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 danke für den Code, der ist wirklich nützlich, aber selbst wenn das Projekt dadurch kompiliert wird, wird das Framework nicht automatisch in die Binärdatei eingebettet und die App stürzt beim Start ab, wie von @NumaNumaNuma erwähnt. Ich habe versucht, die FB-Frameworks manuell in den Build einzubetten, weiß aber ehrlich gesagt nicht, welche Datei aus welchem ​​Projekt ich zu welchem ​​Ziel hinzufügen soll. Alle meine Versuche sind fehlgeschlagen ... Gibt es einen Hinweis darauf? (und auch einen Hinweis, wie man es mit einem Post-Process-Skript zum Laufen bringt?)

Ich habe vorerst eine ältere Version des SDK verwendet (7.19.2 ist die neueste, die nicht das schnelle iOS-SDK 7.0 verwendet).

Ich habe auch als use_frameworks zu 7.19.2 zurückgekehrt! Scheint Probleme mit anderen Pods verursacht zu haben, die ich verwende.
Wir warten auf ein aktualisiertes Facebook SDK, um es erneut zu versuchen :(

@NumaNumaNuma ja das scheint im

Die aktuelle Problemumgehung hier ist das Hinzufügen von "use_frameworks!" in Podfile oder fügen Sie dem exportierten iOS-Projekt eine leere Swift-Datei hinzu. Das Problem wurde unter https://github.com/facebook/facebook-sdk-for-unity/commit/8fdb57a76d2f5a14c168e91663280d40f274c74c behoben und wird in der nächsten Version ausgeliefert.

@KylinChang Und das ist schon 6 Tage nach diesem Commit, was passiert? Warum hat es immer noch einen Fehler in Travis und warum wurde es noch nicht veröffentlicht?

@ Thaina Wenn Sie in Eile sind, können Sie vielleicht versuchen, es manuell zu beheben. Wenn Sie sich das Commit ansehen, ist es eine sehr kleine Änderung, die Sie versuchen könnten, selbst zu implementieren. Fügen Sie diese leere Swift-Datei und die 2 Build-Eigenschaften in einem Post-Build-Skript in Einheit zu Ihrem xcode-Projekt hinzu. Scheiße, dass Sie es manuell tun müssen, aber es könnte Ihnen ein paar Tage (Wochen?) Sparen, während sie es freigeben.
Oder vielleicht machen sie wöchentliche Veröffentlichungen und es wird morgen herauskommen: D.

@NumaNumaNuma Zuerst, weil das nicht funktioniert

Ich weiß also nicht, ob ich etwas falsch mache oder der Fix überhaupt nicht funktioniert. Oder es besteht eine Anforderung, dass es sich um einen Fix aus dem Facebook-SDK-Paket direkt oder aus einem anderen Grund handeln sollte oder muss

Zweitens ist es nicht offiziell, so dass es meinen Code verunreinigt und es in Zukunft tatsächlich entfernen muss, wenn der eigentliche Fix herauskam, also versuche ich, dies zu vermeiden. Und deshalb mache ich das nicht gerne, bevor ich bestätige, dass Facebook es nicht bald veröffentlichen wird

Drittens hat es wirklich nicht funktioniert, zumindest in Unity 2020.2

  • Dieses .swift kann nicht im Ordner Editor sonst würde es nicht in das eigentliche xcode-Projekt kopiert
  • Ab 2019.3 und später ändert Unity seine Build-Struktur in Main und Framework

    • Setzen Sie also einfach ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES auf YES in nur einem Hauptziel, um das Problem nicht zu beheben

    • Legen Sie beide Ziele fest, verursachen Sie den Fehler, dass Invalid bundle… contains disallowed file 'frameworks'

In meinem Fall muss ich .swift außen in den Ordner Assets . Dann einen Build-Prozess wie diesen gemacht

```C#

wenn UNITY_2019_3_OR_NEWER

    string target = proj.GetUnityMainTargetGuid();

sonst

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

endif

////

wenn UNITY_2019_3_OR_NEWER

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

sonst

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

endif

    {
        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");
    }

`` `

Die aktuelle Problemumgehung hier ist das Hinzufügen von "use_frameworks!" in Podfile oder fügen Sie dem exportierten iOS-Projekt eine leere Swift-Datei hinzu. Das Problem wurde in 8fdb57a behoben und wird in der nächsten Version ausgeliefert.

Hallo! Könnten Sie bitte sagen, wann Sie den Fix veröffentlichen werden?

@KylinChang Der Fix ist für ältere Versionen von Unity korrekt, aber Unity 2019.3 und neuer erfordern, dass ein anderes Ziel "fixiert" wird:
https://github.com/YousicianGit/facebook-sdk-for-unity/commit/878fc7b73d9a2c3751bb36792f0276cdfacf9495

Ich werde den Fix bald in einer PR einreichen.

Das Problem ist in der neuesten Version behoben

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen