AppDynamics.Agent.Maui在M1 Mac iOS模拟器编译报错:x86_64符号缺失
问题说明
使用NuGet包AppDynamics.Agent.Maui 2023.2.0的MAUI应用,在Android平台、iOS物理设备、Intel处理器Mac的iOS模拟器上均可正常运行,但在M1芯片Mac的iOS模拟器编译时触发链接错误,提示x86_64架构下缺失ADEumAgentConfiguration等AppDynamics相关类的符号,推测是原生xcframework缺少对应架构支持导致。
解决办法
强制用Rosetta运行VS for Mac
M1 Mac的iOS模拟器默认以arm64架构运行,部分旧版NuGet包仅支持x86_64架构。右键点击「Visual Studio for Mac」应用选择「显示简介」,勾选「使用Rosetta打开」,重启VS后重新编译项目。修改iOS项目架构配置
打开MAUI项目属性,进入「iOS Build」选项卡,在「高级」设置中将「支持的架构」改为x86_64,同时关闭「使用现代编译器」选项,避免架构冲突。升级AppDynamics MAUI包版本
官方后续版本可能修复了M1模拟器的架构适配问题,尝试将AppDynamics.Agent.Maui升级到最新稳定版。手动调整NuGet包架构配置(若可操作包内容)
解压NuGet包,找到内部iOS绑定项目的.csproj文件,添加以下配置确保xcframework同时支持arm64和x86_64架构,重新打包后引用到项目:<PropertyGroup> <MTouchArch>x86_64;arm64</MTouchArch> </PropertyGroup>临时跳过模拟器环境的AppDynamics初始化
在MAUI的iOS入口代码中,判断当前是否为M1模拟器环境,仅在真机和Intel模拟器上启用AppDynamics初始化:#if DEBUG using ObjCRuntime; #endif public override bool FinishedLaunching(UIApplication app, NSDictionary options) { #if DEBUG if (Runtime.Arch == Arch.Arm64 && Runtime.IsSimulator) { return base.FinishedLaunching(app, options); } #endif ADEumInstrumentation.WithKey("你的密钥"); return base.FinishedLaunching(app, options); }
内容的提问来源于stack exchange,提问作者Maxime Esprit

