在此处描述您的开发环境,并提供尽可能多的详细信息。 如果有它们,请确保包括:
2018.4.23
7.21.0
我希望能够在不不断解决问题的情况下更新Facebook SDK。
XCode将在更新SDK后干净地构建客户端。
XCode 无法构建
从 7.20.0 -> 7.21.0 更新并在 XCode 上构建
显示最近的消息
未定义符号:__swift_FORCE_LOAD_$_swiftCompatibilityDynamicReplacements
未定义符号:__swift_FORCE_LOAD_$_swiftCompatibility50
当前解决方法是在导出的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!");
}
}
}
@ 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 项目中ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
为YES
并不能解决问题Invalid bundle… contains disallowed file 'frameworks'
在我的情况下,我需要将.swift
外部移动到Assets
文件夹中。 然后进行了这样的构建过程
```C#
string target = proj.GetUnityMainTargetGuid();
string targetName = PBXProject.GetUnityTargetName();
string target = proj.TargetGuidByName(targetName);
////
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 中提交修复。
该问题已在最新版本中修复
最有用的评论
@ Khaled-Wolf感谢您的代码,这确实很有用,但是即使这样可以使项目编译,框架也不会自动嵌入二进制文件中,并且应用程序在启动时崩溃,如@NumaNumaNuma所述。 我试图手动将 FB 框架嵌入到构建中,但老实说,我不知道应该将哪个项目中的哪个文件添加到哪个目标。 我所有的尝试都失败了……有什么线索吗? (还有,关于如何使用后期处理脚本使其工作的任何线索?)