Unreal 5.1.1 支援 Swift Framework
公司最近專案升級上 StoreKitV2 ,Unreal 這裡官方早期的 Install 並不支援 Swift,所以就來研究了一番。
原先使用的方式是修改引擎,但寫個 Plugin 還要改引擎,這樣使用 Plugin 的也要改引擎實在不是很好的方向。
後來看到 Unreal 5.2 內新增了 Swift Module
private static string GetSwiftStandardLibraryLinkPath(string PlatformPath)
{
string XcodeRoot = Utils.RunLocalProcessAndReturnStdOut("/usr/bin/xcode-select", "--print-path");
return $"{XcodeRoot}/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/{PlatformPath}";
}
Swift Module Build.cs function
他主要的邏輯在這裡,利用 Xcode 指令查出 Xcode Path 進而載入 Swift SDK,只要啟用 Module 應該就可以支援。
但我是製作 Plugin,所以我換了一個方式,在 Plugin Build.cs 內做類似的事情
// 添加 Swift SDK
if (Target.Platform == UnrealTargetPlatform.IOS || Target.Platform == UnrealTargetPlatform.Mac)
{
string SWIFT_SDKROOT = Utils.RunLocalProcessAndReturnStdOut("/usr/bin/xcrun", "--sdk iphoneos --show-sdk-path");
PublicSystemLibraryPaths.Add(SWIFT_SDKROOT + "/usr/lib/swift");
PublicSystemLibraryPaths.Add(SWIFT_SDKROOT + "../../../../../../Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos");
PublicSystemLibraryPaths.Add(SWIFT_SDKROOT + "../../../../../../Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.0/iphoneos");
PublicSystemLibraryPaths.Add(SWIFT_SDKROOT + "../../../../../../Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.5/iphoneos");
}
Plugin Build.cs
然後我在 iOS UPL 內複製到 Build Dir
<!-- 執行 Swift SDK 複製到 Build Dir -->
<prebuildCopies>
<log text="複製 Swift SDK"/>
<copyDir src="$S(EngineDir)/Intermediate/UnzippedFrameworks/swift_framework_dynamic/swift_framework_dynamic.embeddedframework/swift_framework_dynamic.framework" dst="$S(BuildDir)/Frameworks/swift_framework_dynamic.framework" />
</prebuildCopies>