Facebook-sdk-for-unity: 未定义符号:swiftCompatibility

创建于 2020-06-25  ·  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条评论

当前解决方法是在导出的XCode项目中的Podfile中添加use_framework!

当前解决方法是在导出的XCode项目中的Podfile中添加use_framework!

谢谢@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!只会使用动态库而不是静态库。 当然,它可以编译,但是必须以某种方式嵌入这些框架。 仍在研究这一点,但无论如何我需要已经设置 Unity 生成的 XCode 工作区/项目,否则我们的 CI 系统将失败......

对于像简单地集成 Facebook SDK 这样简单的任务,必须手动修改 podfile 然后项目是我们不应该做的事情......

Unity 2019.4.1、Facebook SDK 7.21.1 也有同样的问题。

使用use_frameworks!只会使用动态库而不是静态库。 当然,它可以编译,但是必须以某种方式嵌入这些框架。 仍在研究这一点,但无论如何我需要已经设置 Unity 生成的 XCode 工作区/项目,否则我们的 CI 系统将失败......

对于像简单地集成 Facebook SDK 这样简单的任务,必须手动修改 podfile 然后项目是我们不应该做的事情......

在这里你可以设置一个简单的后期构建脚本来以编程方式修改 podfile,我在我的项目中使用它并且它工作得很好
创建一个新的 MonoBehaviour 文件(例如:PostProcessBuild_Podfile.cs)并将其放在 Assets/Editor 文件夹中

使用 System.Collections;
使用 System.Linq;
使用 System.Collections.Generic;
使用 UnityEngine;
使用 UnityEditor;
使用 UnityEditor.Callbacks;
使用 System.IO;

公共类 PostProcessBuild_Podfile : MonoBehaviour
{
[PostProcessBuildAttribute(45)]//必须在 40 到 50 之间,以确保它不会被 Podfile 生成 (40) 覆盖,并且它是在“pod install”之前添加的 (50)
private static void PostProcessBuild_iOS(BuildTarget target, string 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! 似乎导致我正在使用的其他 pod 出现问题。
我们将等待更新的 Facebook SDK 再试一次:(

@NumaNumaNuma是的,这似乎是目前唯一的选择,它可以毫无问题地编译和运行! 感谢分享!

当前的解决方法是添加“use_frameworks!” 到 Podfile 或将一个空的 swift 文件添加到导出的 iOS 项目。 该问题已在https://github.com/facebook/facebook-sdk-for-unity/commit/8fdb57a76d2f5a14c168e91663280d40f274c74c中修复,并将在下一个版本中发布。

@KylinChang从那个提交到现在已经 6 天了,会发生什么? 为什么它在 travis 中仍然有错误,为什么它还没有发布?

@Thaina如果您赶时间,也许您可​​以尝试手动修复它。 如果您查看提交,这是一个非常小的更改,您可以尝试自己实现。 将空白的 swift 文件和 2 个构建属性统一添加到构建后脚本中的 xcode 项目中。 不得不手动完成它很糟糕,但它可能会在他们发布时为您节省几天(几周?)。
或者也许他们每周发布一次,明天就会发布:D

@NumaNumaNuma首先,因为那不起作用

所以我实际上并不知道我做错了什么,或者修复一开始就没有真正起作用。 或者它有一些要求它应该或必须是直接从 facebook SDK 包或任何其他原因修复

其次,它不是官方的,所以它污染了我的代码,并且需要在未来真正的修复出来时实际删除它,所以我尽量避免这种情况。 这就是为什么我不喜欢在确认 facebook 不会很快发布之前这样做

三、确实不行,至少unity 2020.2

  • .swift不能存在于Editor文件夹中,否则它不会被复制到实际的 xcode 项目中
  • 在 2019.3 及之后,unity 将其构建结构更改为 main 和 framework

    • 因此,仅在一个主要目标中将ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESYES并不能解决问题

    • 设置为两个目标会导致Invalid bundle… contains disallowed file 'frameworks'

在我的情况下,我需要将.swift外部移动到Assets文件夹中。 然后进行了这样的构建过程

```C#

如果 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 或将一个空的 swift 文件添加到导出的 iOS 项目。 该问题已在8fdb57a

你好! 你能说一下你什么时候发布修复吗?

@KylinChang修复对于旧版本的 Unity 是正确的,但 Unity 2019.3 及更高版本需要“修复”不同的目标:
https://github.com/YousicianGit/facebook-sdk-for-unity/commit/878fc7b73d9a2c3751bb36792f0276cdfacf9495

我很快就会在 PR 中提交修复。

该问题已在最新版本中修复

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

SeriouslySam picture SeriouslySam  ·  6评论

MorganMoon picture MorganMoon  ·  7评论

pvalium picture pvalium  ·  6评论

laijingfeng picture laijingfeng  ·  6评论

derwaldgeist picture derwaldgeist  ·  4评论