.NET MAUI Mac Catalyst发布后应用无图标问题求助
问题场景
使用以下Ad Hoc或App Store发布命令执行dotnet publish时,生成的ChronoWiz.app无图标,但使用dotnet build ChronoWiz/ChronoWiz.csproj -f net8.0-maccatalyst构建的应用图标显示正常。
Ad Hoc发布命令
dotnet publish ChronoWiz/ChronoWiz.csproj -f net8.0-maccatalyst -c Release -p:MtouchLink=SdkOnly -p:CreatePackage=true -p:EnableCodeSigning=true -p:CodesignKey="Apple Development: Eigil Krogh (M39X...)" -p:CodesignProvision="ChronoWiz Profile Development MAC" -p:CodesignEntitlements="Platforms\MacCatalyst\Entitlements.Release.plist" -p:UseHardenedRuntime=true -o "/Applications"
App Store发布命令
dotnet publish ChronoWiz/ChronoWiz.csproj -f net8.0-maccatalyst -c Release -p:MtouchLink=SdkOnly -p:CreatePackage=true -p:EnableCodeSigning=true -p:EnablePackageSigning=true -p:CodesignKey="Apple Distribution: Eigil Krogh (4657Q2...)" -p:CodesignProvision="ChronoWiz Profile App Store MAC" -p:CodesignEntitlements="Platforms\MacCatalyst\Entitlements.Release.plist" -p:PackageSigningKey="3rd Party Mac Developer Installer: Eigil Krogh (4657Q...)" -o "/Applications"
可能的原因及解决方案
链接优化误删图标资源
Release模式下启用的MtouchLink=SdkOnly会执行严格的链接优化,可能将图标资源判定为未使用而剔除。可以尝试替换为-p:LinkerBehavior=LinkOnlyAssemblies,或者在项目文件中为图标资源添加以下配置强制保留:<ItemGroup> <BundleResource Include="Resources/AppIcon.appiconset/**/*" CopyToOutputDirectory="PreserveNewest" /> </ItemGroup>硬化运行时或签名导致资源异常
发布命令中启用的UseHardenedRuntime=true和代码签名流程,可能修改了应用包内图标文件的权限或结构。先尝试移除-p:UseHardenedRuntime=true参数发布测试,若图标恢复正常,再重新配置硬化运行时的权限,确保图标文件的读取权限未被限制。路径格式错误导致资源关联失败
命令中CodesignEntitlements使用了Windows风格的反斜杠\,在Mac环境下需改为正斜杠/,即Platforms/MacCatalyst/Entitlements.Release.plist。路径解析错误可能导致签名过程中资源关联异常,间接影响图标加载。Release配置下图标引用缺失
检查项目文件的Release配置节点,确保正确指定了图标路径:<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-maccatalyst|AnyCPU'"> <Icon>Resources/AppIcon.appiconset</Icon> </PropertyGroup>dotnet build默认使用Debug配置,可能Debug配置中图标引用正常,但Release配置遗漏了该设置。
内容的提问来源于stack exchange,提问作者Eigil Krogh Sorensen

