朋友升级了 xcode 16.1 beta。在 iOS 项目中接入 unity 时,其中有一步需要设置 [ufw setExecuteHeader: &_mh_execute_header];
UnityFramework *UnityFrameworkLoad() {
NSString *bundlePath = nil;
bundlePath = [[NSBundle mainBundle] bundlePath];
bundlePath = [bundlePath stringByAppendingString: @"/Frameworks/UnityFramework.framework"];
NSBundle* bundle = [NSBundle bundleWithPath: bundlePath];
if ([bundle isLoaded] == false) [bundle load];
UnityFramework *ufw = [bundle.principalClass getInstance];
if (![ufw appController]) {
// 首次初始化 Unity
[ufw setExecuteHeader: &_mh_execute_header];
}
return ufw;
}
发现编译报错:
Undefined symbols for architecture arm64:
“__mh_execute_header”, referenced from:UnityFrameworkLoad() in PCAppDelegate.o
ld: symbol(s) not found for architecture arm64
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
__mh_execute_header
它为程序提供了一个访问其自身 Mach-O 头部的方式。在 Unity 的集成中,这个符号可能被用来帮助 Unity 框架定位和初始化它需要的资源和代码段。
尝试写个 demo 发现在 xcode 15、16 beta 上却都能编译通过。
另外也有 Apple Developer Forums 类似问题的相关讨论。