Facebook-sdk-for-unity: Simbol tidak terdefinisi: swiftCompatibility

Dibuat pada 25 Jun 2020  ·  21Komentar  ·  Sumber: facebook/facebook-sdk-for-unity

Daftar periksa

Lingkungan Hidup

Jelaskan lingkungan dev Anda di sini, berikan detail sebanyak mungkin. Jika Anda memilikinya, pastikan untuk menyertakan:

  • Versi Editor Unity: 2018.4.23
  • Versi SDK Unity: 7.21.0
  • Platform & Versi Instalasi: iOS

Gol

Saya ingin dapat memperbarui SDK Facebook tanpa pemecahan masalah yang konstan.

Hasil yang diharapkan

XCode akan dengan rapi membangun klien setelah memperbarui SDK.

Hasil nyata

XCode gagal untuk membangun

Langkah-langkah untuk Reproduksi

Perbarui dari 7.20.0 -> 7.21.0 dan bangun di atas XCode

Contoh & Detail Kode

Menampilkan Pesan Terbaru
Simbol tidak terdefinisi: __swift_FORCE_LOAD_$_swiftCompatibilityDynamicReplacements
Simbol tidak terdefinisi: __swift_FORCE_LOAD_$_swiftCompatibility50

bug

Komentar yang paling membantu

@Khaled-Wolf terima kasih atas kodenya, itu sangat berguna, tetapi tetap saja ini membuat proyek dikompilasi maka kerangka kerja tidak tertanam dalam biner secara otomatis dan aplikasi macet saat startup seperti yang disebutkan oleh @NumaNumaNuma. Saya telah mencoba menyematkan kerangka kerja FB secara manual ke build tetapi sejujurnya saya tidak tahu file mana dari proyek mana yang harus saya tambahkan ke target mana. Semua usaha saya gagal... Ada petunjuk tentang itu? (dan juga, ada petunjuk tentang cara membuatnya bekerja menggunakan skrip proses pasca?)

Semua 21 komentar

Solusi saat ini adalah menambahkan use_framework! ke Podfile di proyek XCode yang Anda ekspor

Solusi saat ini adalah menambahkan use_framework! ke Podfile di proyek XCode yang Anda ekspor

Terima kasih @KylinChang itu berhasil untuk saya!

Terima kasih @KylinChang ,
Akan sangat membantu jika ini ditambahkan ke catatan rilis versi yang disadap di halaman unduhan SDK.

Wow terima kasih banyak, Anda pasti harus menambahkan sesuatu ke log perubahan.
Juga, itu use_frameworks! (jamak)👍

setelah menambahkan use_frameworks! proyek dibangun, tetapi mogok saat dimulai dengan kesalahan ini:
[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

Menambahkannya ke daftar framework yang disematkan tidak membantu.

Ada lagi yang perlu saya lakukan?

Ini tidak bekerja untuk saya! Saya menambahkan "use_frameworks!" tapi buildnya masih gagal. Apakah saya perlu sesuatu yang lain?

setelah menambahkan use_frameworks! proyek dibangun, tetapi mogok saat dimulai dengan kesalahan ini:
[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

Menambahkannya ke daftar framework yang disematkan tidak membantu.

Ada lagi yang perlu saya lakukan?

Saya mendapatkan hal yang sama :/

@KylinChang dapatkah Anda membagikan seperti apa podfile Anda?

Saya dapat membuatnya sekarang, tetapi gagal dengan kesalahan yang sama saat dijalankan. Ada yang bisa membuatnya bekerja?

Masalah yang sama di sini dengan Unity 2019.4.1, Facebook SDK 7.21.1.

Menggunakan use_frameworks! hanya akan menggunakan pustaka dinamis alih-alih yang statis. Itu mengkompilasi, tentu saja, tetapi kemudian kerangka kerja itu harus disematkan entah bagaimana. Masih mencari ini, tetapi dalam hal apa pun saya perlu ruang kerja / proyek XCode yang dihasilkan Unity untuk sudah disiapkan atau sistem CI kami akan gagal ...

Harus memodifikasi podfile secara manual dan kemudian proyek adalah sesuatu yang seharusnya tidak kita lakukan untuk tugas yang mudah seperti hanya mengintegrasikan SDK Facebook ...

Masalah yang sama di sini dengan Unity 2019.4.1, Facebook SDK 7.21.1.

Menggunakan use_frameworks! hanya akan menggunakan pustaka dinamis alih-alih yang statis. Itu mengkompilasi, tentu saja, tetapi kemudian kerangka kerja itu harus disematkan entah bagaimana. Masih mencari ini, tetapi dalam hal apa pun saya perlu ruang kerja / proyek XCode yang dihasilkan Unity untuk sudah disiapkan atau sistem CI kami akan gagal ...

Harus memodifikasi podfile secara manual dan kemudian proyek adalah sesuatu yang seharusnya tidak kita lakukan untuk tugas yang mudah seperti hanya mengintegrasikan SDK Facebook ...

Di sini Anda dapat mengatur skrip pembuatan posting sederhana untuk memodifikasi podfile secara terprogram, saya menggunakannya dalam proyek saya dan berfungsi dengan baik
Buat file MonoBehaviour baru (misalnya: PostProcessBuild_Podfile.cs) dan taruh di folder Assets/Editor

menggunakan System.Collections;
menggunakan System.Linq;
menggunakan System.Collections.Generic;
menggunakan UnityEngine;
menggunakan UnityEditor;
menggunakan UnityEditor.Callbacks;
menggunakan System.IO;

PostProcessBuild_Podfile kelas publik : MonoBehaviour
{
[PostProcessBuildAttribute (45)] // harus antara 40 dan 50 untuk memastikan bahwa itu tidak diganti oleh pembuatan Podfile (40) dan ditambahkan sebelum "pod install" (50)
private static void PostProcessBuild_iOS (target BuildTarget, string buildPath)
{
jika (target == BuildTarget.iOS)
{
var namafile = buildPath + "/Podfile";
var endTag = "platform :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 terima kasih atas kodenya, itu sangat berguna, tetapi tetap saja ini membuat proyek dikompilasi maka kerangka kerja tidak tertanam dalam biner secara otomatis dan aplikasi macet saat startup seperti yang disebutkan oleh @NumaNumaNuma. Saya telah mencoba menyematkan kerangka kerja FB secara manual ke build tetapi sejujurnya saya tidak tahu file mana dari proyek mana yang harus saya tambahkan ke target mana. Semua usaha saya gagal... Ada petunjuk tentang itu? (dan juga, ada petunjuk tentang cara membuatnya bekerja menggunakan skrip proses pasca?)

Saya telah kembali menggunakan versi sdk yang lebih lama untuk saat ini (7.19.2 adalah yang terbaru yang tidak menggunakan sdk iOS cepat 7.0).

Saya juga kembali ke 7.19.2 sebagai use_frameworks! Tampaknya telah menyebabkan masalah dengan pod lain yang saya gunakan.
Kami akan menunggu Facebook SDK yang diperbarui untuk mencoba lagi :(

@NumaNumaNuma ya itu sepertinya satu-satunya pilihan untuk saat ini, ini dikompilasi dan berjalan tanpa masalah! Terima kasih telah berbagi ini!

Solusi saat ini di sini adalah dengan menambahkan "use_frameworks!" ke Podfile atau tambahkan file swift kosong ke proyek iOS yang diekspor. Masalah ini diperbaiki di https://github.com/facebook/facebook-sdk-for-unity/commit/8fdb57a76d2f5a14c168e91663280d40f274c74c dan akan dikirimkan pada rilis berikutnya.

@KylinChang Dan ini sudah 6 hari sejak komit itu, apa yang terjadi? Mengapa masih ada kesalahan di travis dan mengapa belum dirilis?

@Thaina Jika Anda sedang terburu-buru mungkin Anda bisa mencoba dan memperbaikinya secara manual. Jika Anda melihat komit itu adalah perubahan yang sangat kecil, Anda dapat mencoba mengimplementasikannya sendiri. Tambahkan file Swift kosong itu dan 2 properti build ke proyek xcode Anda dalam skrip post-build dalam kesatuan. Menyebalkan karena harus melakukannya secara manual, tetapi mungkin menghemat beberapa hari (minggu?) saat mereka merilisnya.
Atau mungkin mereka melakukan rilis mingguan dan akan keluar besok :D

@NumaNumaNuma Pertama, karena itu tidak berhasil

Jadi saya sebenarnya tidak tahu saya melakukan sesuatu yang salah atau perbaikannya tidak benar-benar berfungsi. Atau memiliki beberapa persyaratan yang harus atau harus diperbaiki dari paket SDK facebook secara langsung atau alasan lainnya

Kedua, itu tidak resmi sehingga mencemari kode saya dan harus benar-benar menghapusnya di masa mendatang ketika perbaikan sebenarnya keluar, jadi saya mencoba menghindarinya. Dan itulah mengapa saya tidak suka melakukan itu sebelum mengkonfirmasi bahwa facebook tidak akan segera merilisnya

Ketiga, itu benar-benar tidak berhasil, setidaknya di unity 2020.2

  • .swift tidak dapat ada di folder Editor atau jika tidak, itu tidak akan disalin ke proyek xcode yang sebenarnya
  • Pada 2019.3 dan setelahnya, unity mengubah struktur build mereka menjadi main dan framework

    • Jadi setel ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES ke YES hanya dalam satu target utama tidak memperbaiki masalah

    • Setel ke kedua target yang menyebabkan kesalahan bahwa Invalid bundle… contains disallowed file 'frameworks'

Dalam kasus saya, saya perlu memindahkan .swift ke luar ke dalam folder Assets . Kemudian buat proses build seperti ini

```C#

jika UNITY_2019_3_OR_NEWER

    string target = proj.GetUnityMainTargetGuid();

lain

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

berakhir jika

////

jika UNITY_2019_3_OR_NEWER

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

lain

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

berakhir jika

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

``

Solusi saat ini di sini adalah dengan menambahkan "use_frameworks!" ke Podfile atau tambahkan file swift kosong ke proyek iOS yang diekspor. Masalah telah diperbaiki di 8fdb57a dan akan dikirimkan pada rilis berikutnya.

Hai! Bisakah Anda memberi tahu kapan Anda akan merilis perbaikan?

@KylinChang Perbaikannya benar untuk versi Unity yang lebih lama, tetapi Unity 2019.3 dan yang lebih baru memerlukan target yang berbeda untuk "diperbaiki":
https://github.com/YousicianGit/facebook-sdk-for-unity/commit/878fc7b73d9a2c3751bb36792f0276cdfacf9495

Saya akan mengirimkan perbaikan dalam PR segera.

Masalah ini diperbaiki dalam rilis terbaru

Apakah halaman ini membantu?
0 / 5 - 0 peringkat