Facebook-sdk-for-unity: Неопределенный символ: swiftCompatibility

Созданный на 25 июн. 2020  ·  21Комментарии  ·  Источник: facebook/facebook-sdk-for-unity

Контрольный список

Среда

Опишите здесь свою среду разработки, предоставив как можно больше подробностей. Если они у вас есть, обязательно включите:

  • Версия редактора Unity: 2018.4.23
  • Версия Unity SDK: 7.21.0
  • Платформа установки и версия: iOS

Цели

Я хочу иметь возможность обновлять Facebook SDK без постоянного решения проблем.

Ожидаемые результаты

XCode полностью построит клиент после обновления SDK.

Фактические результаты

XCode не может построить

Действия по воспроизведению

Обновление с 7.20.0 -> 7.21.0 и построение на XCode

Примеры кода и подробности

Отображение последних сообщений
Неопределенный символ: __swift_FORCE_LOAD _ $ _ swiftCompatibilityDynamicReplacements
Неопределенный символ: __swift_FORCE_LOAD _ $ _ swiftCompatibility50

Самый полезный комментарий

@ 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, не могли бы вы рассказать, как выглядит ваш подфайл?

Я смог построить его сейчас, но он не работает с той же ошибкой при запуске. Кто-нибудь смог заставить это работать?

Та же проблема здесь с Unity 2019.4.1, Facebook SDK 7.21.1.

Использование use_frameworks! будет использовать просто динамические библиотеки вместо статических. Конечно, он компилируется, но тогда эти фреймворки нужно как-то встроить. Все еще изучаю это, но в любом случае мне нужно, чтобы рабочая область / проект XCode, сгенерированная Unity, уже была настроена, иначе наша система CI выйдет из строя ...

Необходимость вручную изменять подфайл, а затем проект - это то, что нам не нужно делать для такой простой задачи, как простая интеграция Facebook SDK ...

Та же проблема здесь с Unity 2019.4.1, Facebook SDK 7.21.1.

Использование use_frameworks! будет использовать просто динамические библиотеки вместо статических. Конечно, он компилируется, но тогда эти фреймворки нужно как-то встроить. Все еще изучаю это, но в любом случае мне нужно, чтобы рабочая область / проект XCode, сгенерированная Unity, уже была настроена, иначе наша система CI выйдет из строя ...

Необходимость вручную изменять подфайл, а затем проект - это то, что нам не нужно делать для такой простой задачи, как простая интеграция Facebook SDK ...

Здесь вы можете настроить простой сценарий пост-сборки для программного изменения подфайла, я использую его в своем проекте, и он отлично работает.
Создайте новый файл MonoBehaviour (например: PostProcessBuild_Podfile.cs) и поместите его в папку Assets / Editor.

using System.Collections;
using System.Linq;
using System.Collections.Generic;
using UnityEngine;
с помощью UnityEditor;
using UnityEditor.Callbacks;
используя System.IO;

открытый класс PostProcessBuild_Podfile: MonoBehaviour
{
[PostProcessBuildAttribute (45)] // должно быть от 40 до 50, чтобы гарантировать, что он не переопределен генерацией Podfile (40) и что он добавлен перед "pod install" (50)
private static void 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 - самая последняя версия, которая не использует sdk 7.0 swift для iOS).

Я также вернулся к 7.19.2 как use_frameworks! Похоже, это вызвало проблемы с другими модулями, которые я использую.
Будем ждать обновленного Facebook SDK, чтобы попробовать еще раз :(

@NumaNumaNuma да, это

Текущий обходной путь здесь - добавить "use_frameworks!" в Podfile или добавьте пустой swift-файл в экспортированный проект iOS. Проблема исправлена ​​в https://github.com/facebook/facebook-sdk-for-unity/commit/8fdb57a76d2f5a14c168e91663280d40f274c74c и будет добавлена ​​в следующем выпуске.

@KylinChang И это уже 6 дней после этого коммита, что случилось? Почему у него все еще есть ошибка в travis и почему он еще не выпущен?

@Thaina Если вы спешите, возможно, вы могли бы попробовать исправить это вручную. Если вы посмотрите на коммит, это очень небольшое изменение, которое вы можете попробовать реализовать самостоятельно. Добавьте этот пустой быстрый файл и 2 свойства сборки в свой проект xcode в скрипте после сборки в единстве. Отстойно делать это вручную, но это может сэкономить вам несколько дней (недель?), Пока они его выпустят.
Или, может быть, они выпускают еженедельные релизы, и они выйдут завтра: D

@NumaNumaNuma Во-первых, потому что это не работает

Так что я на самом деле не знаю, что делаю что-то не так или исправление вообще не работает. Или у него есть какое-то требование, что оно должно или должно быть исправлением напрямую из пакета SDK facebook, или по любой другой причине

Во-вторых, он не является официальным, поэтому загрязняет мой код и должен фактически удалить его в будущем, когда будет выпущено настоящее исправление, поэтому я стараюсь этого избежать. И поэтому я не люблю делать это, пока не подтвердил, что facebook не выпустит его в ближайшее время.

В-третьих, это действительно не сработало, по крайней мере, в Unity 20202.

  • Этот .swift не может существовать в папке Editor иначе он не будет скопирован в настоящий проект xcode
  • В 2019.3 и позже Unity меняют свою структуру сборки на main и framework.

    • Поэтому просто установите 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);

endif

////

если UNITY_2019_3_OR_NEWER

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

еще

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

``

Текущий обходной путь здесь - добавить "use_frameworks!" в Podfile или добавьте пустой swift-файл в экспортированный проект iOS. Проблема исправлена ​​в 8fdb57a и будет

Привет! Скажите, пожалуйста, когда вы собираетесь выпустить исправление?

@KylinChang Исправление верно для более старых версий Unity, но Unity 2019.3 и новее требует, чтобы была "исправлена" другая цель:
https://github.com/YousicianGit/facebook-sdk-for-unity/commit/878fc7b73d9a2c3751bb36792f0276cdfacf9495

Я скоро отправлю исправление в PR.

Проблема исправлена ​​в последней версии.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги