MAUI应用无法在iPhone真机调试:xattr相关签名错误求助
代码在iOS模拟器上运行部署正常,但真机调试时触发签名错误,涉及com.apple.FinderInfo扩展属性,试过xattr相关命令无效,且在Visual Studio 2022(17.8.3)、Visual Studio Mac 17.6.7、带C#/MAUI扩展的VS Code中部署均出现该问题。
错误信息
file with invalid attached data: Disallowed xattr com.apple.FinderInfo found on /Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/bin/Debug/net8.0-ios/ios-arm64/RackEmAppMobile.app
/Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/bin/Debug/net8.0-ios/ios-arm64/RackEmAppMobile.app: resource fork, Finder information, or similar detritus not allowed
完整构建日志
Executing task: dotnet build -t:Build -p:Configuration=Debug -f net8.0-ios -r ios-arm64 -p:CustomAfterMicrosoftCSharpTargets="/Users/matthewwarr/.vscode/extensions/ms-dotnettools.dotnet-maui-0.6.54-darwin-x64/dist/resources/Custom.After.Microsoft.CSharp.targets" -p:MauiVSCodeBuildOutputFile=/var/folders/4w/v3kls4555054lhd1lf7xlftm0000gn/T/dotnet-maui/maui-vsc-b8bc33ff-c9cd-4c47-8557-affa02147dcb.json /Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/RackEmAppMobile.csproj MSBuild version 17.8.3+195e7f5a3 for .NET Determining projects to restore... All projects are up-to-date for restore. Detected signing identity: Code Signing Key: "Apple Development: Created via API (J24PJGDN53)" (71FEE428486C6D4BE68D38D17558BB6CF14EF568) Provisioning Profile: "VS: com.rackemapp.mobileapp Development" (709a66c7-a114-47c6-9ee6-e155a411d422) Bundle Id: com.rackemapp.mobileapp App Id: VV625DUX6E.com.rackemapp.mobileapp RackEmAppMobile -> /Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/bin/Debug/net8.0-ios/ios-arm64/RackEmAppMobile.dll Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink Tool /usr/bin/codesign execution finished (exit code = 1). file with invalid attached data: Disallowed xattr com.apple.FinderInfo found on /Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/bin/Debug/net8.0-ios/ios-arm64/RackEmAppMobile.app /Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/bin/Debug/net8.0-ios/ios-arm64/RackEmAppMobile.app: resource fork, Finder information, or similar detritus not allowed /usr/local/share/dotnet/packs/Microsoft.iOS.Sdk/17.0.8490/tools/msbuild/iOS/Xamarin.Shared.targets(2256,3): error : /usr/bin/codesign exited with code 1: [/Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/RackEmAppMobile.csproj::TargetFramework=net8.0-ios] /usr/local/share/dotnet/packs/Microsoft.iOS.Sdk/17.0.8490/tools/msbuild/iOS/Xamarin.Shared.targets(2256,3): error : /Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/bin/Debug/net8.0-ios/ios-arm64/RackEmAppMobile.app: resource fork, Finder information, or similar detritus not allowed [/Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/RackEmAppMobile.csproj::TargetFramework=net8.0-ios] /usr/local/share/dotnet/packs/Microsoft.iOS.Sdk/17.0.8490/tools/msbuild/iOS/Xamarin.Shared.targets(2256,3): error : Failed to codesign '/Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/bin/Debug/net8.0-ios/ios-arm64/RackEmAppMobile.app': /Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/bin/Debug/net8.0-ios/ios-arm64/RackEmAppMobile.app: resource fork, Finder information, or similar detritus not allowed [/Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/RackEmAppMobile.csproj::TargetFramework=net8.0-ios] /usr/local/share/dotnet/packs/Microsoft.iOS.Sdk/17.0.8490/tools/msbuild/iOS/Xamarin.Shared.targets(2256,3): error : [/Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/RackEmAppMobile.csproj::TargetFramework=net8.0-ios] /usr/local/share/dotnet/packs/Microsoft.iOS.Sdk/17.0.8490/tools/msbuild/iOS/Xamarin.Shared.targets(2256,3): error : [/Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/RackEmAppMobile.csproj::TargetFramework=net8.0-ios] Build FAILED.
解决办法
1. 递归清理构建输出目录的扩展属性
执行命令彻底删除bin目录下所有文件的扩展属性:
xattr -rc /Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/bin
如果需要保留部分属性,可仅删除com.apple.FinderInfo:
xattr -d com.apple.FinderInfo /Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/bin/Debug/net8.0-ios/ios-arm64/RackEmAppMobile.app
2. 清理obj目录后重新构建
删除临时构建目录,再重新恢复依赖并构建:
rm -rf /Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/obj dotnet restore dotnet build -t:Build -p:Configuration=Debug -f net8.0-ios -r ios-arm64
3. 检查并清理项目资源文件的属性
项目中从Finder复制的资源文件(如图片、配置文件)可能携带com.apple.FinderInfo,递归清理Resources目录:
xattr -rc /Users/matthewwarr/Documents/GitHub/RackEmApp_Mobile/RackEmAppMobile/Resources
4. 配置MSBuild自动清理属性
在项目的.csproj文件中添加以下目标,让构建过程在签名前自动清理扩展属性:
<Target Name="RemoveExtendedAttributes" BeforeTargets="_Codesign"> <Exec Command="xattr -rc "$(OutputPath)$(AssemblyName).app"" /> </Target>
内容的提问来源于stack exchange,提问作者Matthew Warr

