.NET 8迁移.NET 9时NET-iOS.Naxam.FSCalendar库链接错误求助
.NET 9迁移后NET-iOS.Naxam.FSCalendar构建报错:iOS模拟器与库架构不匹配
错误信息
/usr/local/share/dotnet/packs/Microsoft.iOS.Sdk.net8.0_18.0/18.0.8314/targets/Xamarin.Shared.Sdk.targets(1648,3): error :clang++ exited with code 1:ld: building for 'iOS-simulator', but linking in dylib (/Users/admin/.nuget/packages/net-ios.naxam.fscalendar/2.8.3.1/lib/net7.0-ios16.1/Naxam.FSCalendar.iOS.resources/FSCalendar.framework/FSCalendar) built for 'iOS'clang++: error: linker command failed with exit code 1 (use -v to see invocation)
问题原因
该错误属于架构不兼容问题:当前构建的是iOS模拟器目标,但引用的NET-iOS.Naxam.FSCalendar库仅包含iOS真机(arm64)架构的二进制文件,缺少模拟器所需的x86_64/arm64模拟器架构,导致链接器无法匹配目标架构。
解决方案
- 升级库版本:当前使用的
net-ios.naxam.fscalendar/2.8.3.1是针对.NET 7/iOS 16.1编译的,检查该库的最新版本,确认是否已适配.NET 9并提供多架构(真机+模拟器)支持。 - 强制指定模拟器架构:
在项目的.csproj文件中添加以下配置,根据你的Mac芯片类型指定对应架构:<!-- Apple Silicon芯片 --> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|iPhoneSimulator'"> <RuntimeIdentifier>ios-simulator-arm64</RuntimeIdentifier> <MtouchArch>arm64</MtouchArch> </PropertyGroup> <!-- Intel芯片 --> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|iPhoneSimulator'"> <RuntimeIdentifier>ios-simulator-x64</RuntimeIdentifier> <MtouchArch>x86_64</MtouchArch> </PropertyGroup> - 合并多架构二进制(临时应急):
若找不到适配版本,可通过lipo命令合并真机和模拟器版本的FSCalendar二进制,生成通用架构文件后替换Nuget包内的对应文件:
注意:此方法可能引发版本冲突或稳定性问题,仅作为临时方案。lipo -create /path/to/ios-device/FSCalendar /path/to/ios-simulator/FSCalendar -output /path/to/universal/FSCalendar - 替换为维护活跃的库:如果该库长期未更新,无法适配.NET 9,建议改用原生
UICollectionView自定义实现日历,或选择其他活跃维护的第三方iOS日历组件。
内容的提问来源于stack exchange,提问作者Sagar Khatis
相关产品推荐
相关产品推荐

