愚头的博客

一位图形学爱好者的唠叨

修复UE4在macOS Big Sur上的编译问题

发现问题

一个月前打开我的macmini想着升级一下里面的软件,发现可以安装Big Sur了。一时兴起就把能更新的都更新了。经过漫长的安装后,稍微使用了一下Big Sur,感觉怎么那么像iOS?当然我使用的主要目的是为了检查这个打包机的编译环境还是否正常,发现没有什么问题就关机睡觉了。

几天后我对UE4插件glTF for UE4进行了一些修改,就在我准备发布时打包出错了,而且只是UE4.24和4.25的macOS下,提示的内容是“无法找到/System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/Current/MultitouchSupport”,在系统中的确不存在此文件或目录。由于对macOS开发不是很熟悉所以过了几天都没有找到问题,最后决定放弃对4.24和4.25的macOS支持。

最近插件修复了一些问题,又准备要更新了。再次看到macOS上的打包问题,决定这次一定要解决掉。在网上经过一番查找发现很早之前就已经有人遇到了这个问题并在Apple开发者论坛上提出,不过最近才有人提供了解决方案。而令我惊喜的是解决方案居然是借用UE4.26的一次提交,这个方案不正是我想要的吗。

解决方法

根据UE官方提交的代码对4.24和4.25进行修改:

将引擎目录下Engine/Source/Runtime/ApplicationCore/ApplicationCore.Build.csEngine/Source/Runtime/Core/Core.Build.cs两个文件中:

PublicAdditionalLibraries.Add("/System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/Current/MultitouchSupport");

替换成

string SDKROOT = Utils.RunLocalProcessAndReturnStdOut("/usr/bin/xcrun", "--sdk macosx --show-sdk-path");
PublicAdditionalLibraries.Add(SDKROOT + "/System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/Current/MultitouchSupport.tbd");

即可。

总结

这下终于明白了为什么4.26正常但4.24和4.25出错,因为Big Sur对一些开发库的目录进行了变更,而只有最新的4.26对此变更进行了修复。其实UE4除了4.25和4.24存在该错误,其它版本肯定也存在相同的问题,因为之前的引擎版本在调用MultitouchSupport库时都使用了固定的目录😕,这样才导致系统更新后打包失败。我想UE官方也不会就此更新老版引擎了,所以写此篇文章提供解决方案。

另外,推荐大家使用glTF for UE4来导入glTF文件,因为它与官方那个glTF导入插件比起来要更好用更稳定👍。同时也欢迎大家提意见,交流一下使用感受和想法。