Facebook-sdk-for-unity: رمز غير محدد: التوافق السريع

تم إنشاؤها على ٢٥ يونيو ٢٠٢٠  ·  21تعليقات  ·  مصدر: facebook/facebook-sdk-for-unity

قائمة تدقيق

بيئة

صِف بيئة التطوير الخاصة بك هنا ، مع إعطاء أكبر قدر ممكن من التفاصيل. إذا كان لديك ، فتأكد من تضمين:

  • إصدار محرر الوحدة: 2018.4.23
  • إصدار Unity SDK: 7.21.0
  • منصة التثبيت و Verison: iOS

الأهداف

أريد أن أكون قادرًا على تحديث Facebook SDK دون حل مشكلة مستمر.

نتائج متوقعة

سيقوم XCode ببناء العميل بشكل نظيف بعد تحديث SDK.

النتائج الفعلية

فشل إنشاء XCode

خطوات التكاثر

التحديث من 7.20.0 -> 7.21.0 والبناء على XCode

عينات وتفاصيل التعليمات البرمجية

إظهار الرسائل الأخيرة
رمز غير محدد: __swift_FORCE_LOAD _ $ _ swiftCompatibilityDynamicReplacements
رمز غير محدد: __swift_FORCE_LOAD _ $ _ swiftCompatibility50

bug

التعليق الأكثر فائدة

@ Khaled-Wolf شكرًا على الكود ، هذا مفيد حقًا ، ولكن لا يزال حتى لو أدى ذلك إلى تجميع المشروع ، فلن يتم تضمين إطار العمل في النظام الثنائي تلقائيًا ويتعطل التطبيق عند بدء التشغيل كما هو مذكور من قبلNumaNumaNuma. لقد حاولت تضمين أطر عمل FB يدويًا في الإنشاء ولكني بصراحة لا أعرف أي ملف من أي مشروع يجب أن أضيف إلى أي هدف. كل محاولاتي باءت بالفشل ... أي دليل على ذلك؟ (وأيضًا ، أي دليل حول كيفية جعله يعمل باستخدام برنامج نصي لعملية النشر؟)

ال 21 كومينتر

الحل الحالي هو إضافة use_framework! إلى Podfile في مشروع XCode الذي تم تصديره

الحل الحالي هو إضافة use_framework! إلى Podfile في مشروع XCode الذي تم تصديره

شكرا KylinChang عملت بالنسبة لي!

شكرا KylinChang ،
سيكون من المفيد إذا تمت إضافة هذا إلى ملاحظات الإصدار الخاصة بالنسخة التي بها أخطاء في صفحة تنزيل SDK.

واو ، شكرًا جزيلاً ، يجب عليك بالتأكيد إضافة شيء ما إلى سجل التغيير.
أيضًا ، إنه use_frameworks! (جمع) 👍

بعد إضافة use_frameworks! يبني المشروع ، لكنه يتعطل عند البدء بهذا الخطأ:
[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

لم تساعد إضافته إلى قائمة الأطر المضمنة.

أي شيء آخر يجب أن أفعله؟

لا يعمل بالنسبة لي! أضفت "use_frameworks!" لكن البناء لا يزال يفشل. هل أحتاج شيئًا آخر؟

بعد إضافة use_frameworks! يبني المشروع ، لكنه يتعطل عند البدء بهذا الخطأ:
[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

لم تساعد إضافته إلى قائمة الأطر المضمنة.

أي شيء آخر يجب أن أفعله؟

أحصل على نفس الشيء :/

KylinChang هل يمكنك مشاركة شكل ملف podfile الخاص بك من فضلك؟

لقد تمكنت من إنشائه الآن ، لكنه فشل مع نفس الخطأ عند التشغيل. أي شخص كان قادرا على جعلها تعمل؟

نفس المشكلة هنا مع Unity 2019.4.1 ، Facebook SDK 7.21.1.

باستخدام use_frameworks! سيستخدم المكتبات الديناميكية فقط بدلاً من المكتبات الثابتة. إنه يجمع ، بالطبع ، ولكن بعد ذلك يجب تضمين تلك الأطر بطريقة ما. ما زلت أبحث في هذا الأمر ، ولكن على أي حال ، أحتاج إلى مساحة عمل / مشروع XCode الذي تم إنشاؤه من Unity ليتم إعداده بالفعل وإلا سيفشل نظام CI الخاص بنا ...

الاضطرار إلى تعديل ملف podfile يدويًا ثم المشروع هو شيء لا ينبغي علينا القيام به لمهمة سهلة مثل دمج Facebook SDK ...

نفس المشكلة هنا مع Unity 2019.4.1 ، Facebook SDK 7.21.1.

باستخدام use_frameworks! سيستخدم المكتبات الديناميكية فقط بدلاً من المكتبات الثابتة. إنه يجمع ، بالطبع ، ولكن بعد ذلك يجب تضمين تلك الأطر بطريقة ما. ما زلت أبحث في هذا الأمر ، ولكن على أي حال ، أحتاج إلى مساحة عمل / مشروع XCode الذي تم إنشاؤه من Unity ليتم إعداده بالفعل وإلا سيفشل نظام CI الخاص بنا ...

الاضطرار إلى تعديل ملف podfile يدويًا ثم المشروع هو شيء لا ينبغي علينا القيام به لمهمة سهلة مثل دمج Facebook SDK ...

هنا يمكنك إعداد نص بسيط لإنشاء منشور لتعديل ملف podfile برمجيًا ، وأنا أستخدمه في مشروعي ويعمل بشكل جيد
قم بإنشاء ملف MonoBehaviour جديد (على سبيل المثال: PostProcessBuild_Podfile.cs) وضعه في مجلد الأصول / المحرر

باستخدام System.Collections.
باستخدام System.Linq ؛
باستخدام System.Collections.Generic ؛
باستخدام UnityEngine ؛
باستخدام UnityEditor ؛
باستخدام UnityEditor.Callbacks ؛
باستخدام System.IO ؛

فئة عامة PostProcessBuild_Podfile: MonoBehaviour
{
[PostProcessBuildAttribute (45)] // يجب أن يكون بين 40 و 50 للتأكد من أنه لم يتم تجاوزه من خلال إنشاء Podfile (40) وأنه تمت إضافته قبل "تثبيت pod" (50)
PostProcessBuild_iOS الخاصة باطلة ثابتة (هدف BuildTarget ، سلسلة buildPath)
{
إذا (الهدف == BuildTarget.iOS)
{
var fileName = buildPath + "/ Podfile" ؛
var endTag = "النظام الأساسي: 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 شكرًا على الكود ، هذا مفيد حقًا ، ولكن لا يزال حتى لو أدى ذلك إلى تجميع المشروع ، فلن يتم تضمين إطار العمل في النظام الثنائي تلقائيًا ويتعطل التطبيق عند بدء التشغيل كما هو مذكور من قبلNumaNumaNuma. لقد حاولت تضمين أطر عمل FB يدويًا في الإنشاء ولكني بصراحة لا أعرف أي ملف من أي مشروع يجب أن أضيف إلى أي هدف. كل محاولاتي باءت بالفشل ... أي دليل على ذلك؟ (وأيضًا ، أي دليل حول كيفية جعله يعمل باستخدام برنامج نصي لعملية النشر؟)

لقد عدت إلى استخدام إصدار أقدم من sdk في الوقت الحالي (7.19.2 هو الأحدث الذي لا يستخدم 7.0 swift iOS sdk).

لقد عدت أيضًا إلى 7.19.2 كـ use_frameworks! يبدو أنه تسبب في حدوث مشكلات مع البودات الأخرى التي أستخدمها.
سننتظر تحديث Facebook SDK للمحاولة مرة أخرى :(

NumaNumaNuma نعم يبدو أنه الخيار الوحيد في الوقت الحالي ، فهو يجمع ويعمل دون مشاكل! شكرا لتقاسم هذا!

الحل الحالي هنا هو إضافة "use_frameworks!" إلى Podfile أو إضافة ملف سريع فارغ لمشروع iOS المُصدَّر. تم إصلاح المشكلة في https://github.com/facebook/facebook-sdk-for-unity/commit/8fdb57a76d2f5a14c168e91663280d40f274c74c وسيتم شحنها في الإصدار التالي.

KylinChang وهذه 6 أيام بالفعل من هذا الالتزام ، ماذا حدث؟ لماذا لا يزال هناك خطأ في ترافيس ولماذا لم يتم إصداره بعد؟

Thaina إذا كنت في عجلة من إصلاحه يدويًا. إذا نظرت إلى الالتزام ، فإنه تغيير صغير جدًا يمكنك محاولة تنفيذه بنفسك. أضف ملف swift الفارغ وخصائص البناء 2 إلى مشروع xcode الخاص بك في نص ما بعد الإنشاء في الوحدة. تمتص الاضطرار إلى القيام بذلك يدويًا ، ولكن قد يوفر عليك بضعة أيام (أسابيع؟) أثناء إطلاقه.
أو ربما يقومون بإصدارات أسبوعية وستخرج غدًا: د

NumaNumaNuma أولاً ، لأن هذا لا يعمل

لذلك لا أعرف في الواقع أنني أفعل شيئًا خاطئًا أو أن الإصلاح لا يعمل حقًا في المقام الأول. أو لديها بعض المتطلبات التي يجب أو يجب أن تكون إصلاحًا من حزمة facebook SDK مباشرة أو لأي سبب آخر

ثانيًا ، إنه ليس رسميًا ، لذا فهو يلوث الكود الخاص بي ويحتاج إلى إزالته فعليًا في المستقبل عند ظهور الإصلاح الحقيقي ، لذا أحاول تجنب ذلك. ولهذا السبب لا أحب أن أفعل ذلك قبل أن أؤكد أن فيسبوك لن يصدره قريبًا

ثالثًا ، لم ينجح الأمر حقًا ، على الأقل في وحدة 2020

  • أن .swift لا يمكن أن تكون موجودة في Editor مجلد وإلا لن يتم نسخها إلى مشروع Xcode الفعلي
  • في عام 2019.3 وما بعده ، قامت الوحدة بتغيير هيكل بنائها إلى رئيسي وإطار عمل

    • لذا ، ما عليك سوى تعيين ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES على YES في هدف رئيسي واحد فقط وهو عدم حل المشكلة

    • تعيين لكلا الهدف سبب الخطأ أن Invalid bundle… contains disallowed file 'frameworks'

في حالتي ، أحتاج إلى نقل هذا .swift إلى الخارج إلى المجلد Assets . ثم جعل عملية البناء مثل هذا

ج #

إذا UNITY_2019_3_OR_NEWER

    string target = proj.GetUnityMainTargetGuid();

آخر

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

إنهاء إذا

////

إذا UNITY_2019_3_OR_NEWER

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

آخر

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

إنهاء إذا

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

""

الحل الحالي هنا هو إضافة "use_frameworks!" إلى Podfile أو إضافة ملف سريع فارغ لمشروع iOS المُصدَّر. تم إصلاح المشكلة في 8fdb57a وسيتم شحنها في الإصدار التالي.

أهلا! هل تريد أن تقول جودًا عندما تنوي إصدار الإصلاح؟

KylinChang الإصلاح صحيح للإصدارات الأقدم من Unity ، لكن Unity 2019.3 والإصدارات الأحدث تتطلب هدفًا مختلفًا ليتم "إصلاحه":
https://github.com/YousicianGit/facebook-sdk-for-unity/commit/878fc7b73d9a2c3751bb36792f0276cdfacf9495

سأرسل الإصلاح في العلاقات العامة قريبًا.

تم إصلاح المشكلة في أحدث إصدار

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات