You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI iOS应用因PNG图标加载失败启动崩溃求助

.NET MAUI iOS应用TestFlight启动崩溃:Flyout PNG图标加载失败排查

我将.NET MAUI应用的字体图标替换为PNG文件,存放于Resources>Images目录,同时将应用升级为.NET 7版本。成功打包并上传至TestFlight后,应用启动即崩溃,崩溃日志显示无法加载Flyout(汉堡菜单)对应的PNG图标。我原以为发布流程会将该目录下的PNG图片加入ipa包,请问可能的问题是什么?

异常截图

附MyApp.csproj代码:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFrameworks>net7.0-android;net7.0-ios;net7.0-maccatalyst</TargetFrameworks>
        <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net7.0-windows10.0.19041.0</TargetFrameworks>
        <OutputType>Exe</OutputType>
        <RootNamespace>MyApp</RootNamespace>
        <UseMaui>true</UseMaui>
        <SingleProject>true</SingleProject>
        <ImplicitUsings>enable</ImplicitUsings>

        <!-- Display name -->
        <ApplicationTitle>MyApp</ApplicationTitle>

        <!-- App Identifier -->
        <ApplicationId>com.mycompany.myapp</ApplicationId>
        <ApplicationIdGuid>0636ab8b-e4f3-4c11-83e5-b809594a10b5</ApplicationIdGuid>

        <!-- Versions -->
        <ApplicationDisplayVersion>1.2</ApplicationDisplayVersion>
        <ApplicationVersion>68</ApplicationVersion>

        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">11.0</SupportedOSPlatformVersion>
        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">13.1</SupportedOSPlatformVersion>
        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>
        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>
        <TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion>
        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tizen'">6.5</SupportedOSPlatformVersion>
    </PropertyGroup>

    <PropertyGroup Condition="'$(TargetFramework)'=='net7.0-ios'">
      <CodesignKey>Apple Development: Samuel Uresin (3YQ4LF4U5J)</CodesignKey>
      <CodesignProvision>VS: llc.iquest.ingrid.connect Development</CodesignProvision>
    </PropertyGroup>

    <ItemGroup>
        <!-- App Icon -->
        <MauiIcon Include="Resources\AppIcon\appicon.png" />

        <!-- Splash Screen -->
        <MauiSplashScreen Include="Resources\Splash\splash.png" Color="#262627" />

        <!-- Images -->
        <MauiImage Include="Resources\Images\*" />
        <MauiImage Update="Resources\Images\dotnet_bot.svg" BaseSize="168,208" />

        <!-- Custom Fonts -->
        <MauiFont Include="Resources\Fonts\*" />

        <!-- Raw Assets (also remove the "Resources\Raw" prefix) -->
        <MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
    </ItemGroup>

    <ItemGroup>
      <None Remove="Resources\Images\about_graphite.png" />
      <None Remove="Resources\Images\badge_graphite.png" />
      <None Remove="Resources\Images\biz_profile_graphite.png" />
      <None Remove="Resources\Images\coupons_graphite.png" />
      <None Remove="Resources\Images\customers_graphite.png" />
      <None Remove="Resources\Images\dashboard_graphite.png" />
      <None Remove="Resources\Images\feed_graphite.png" />
      <None Remove="Resources\Images\hamburger_manu_graphite.png" />
      <None Remove="Resources\Images\intercom_graphite.png" />
      <None Remove="Resources\Images\plus_graphite.png" />
      <None Remove="Resources\Images\power_graphite.png" />
      <None Remove="Resources\Images\qr_scan_graphite.png" />
      <None Remove="Resources\Images\qr_scan_large_graphite.png" />
      <None Remove="Resources\Images\search_graphite.png" />
      <None Remove="Resources\Images\settings_graphite.png" />
      <None Remove="Resources\Images\shop_graphite.png" />
      <None Remove="Resources\Images\single_user_graphite.png" />
      <None Remove="Resources\Images\subscriptions_graphite.png" />
      <None Remove="Resources\Images\user_profile_graphite.png" />
    </ItemGroup>

    <ItemGroup>
        <PackageReference Include="Azure.Storage.Blobs" Version="12.14.1" />
        <PackageReference Include="CommunityToolkit.Maui" Version="3.0.0" />
        <PackageReference Include="CommunityToolkit.Mvvm" Version="8.0.0" />
        <PackageReference Include="Ingrid.Aurora" Version="1.5.1" />
        <PackageReference Include="Ingrid.Core" Version="1.5.1" />
        <PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="7.0.0" />
        <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="7.0.0" />
        <PackageReference Include="MonkeyCache.FileStore" Version="1.6.3" />
        <PackageReference Include="Plugin.InAppBilling" Version="6.7.0" />
        <PackageReference Include="Plugin.Maui.Audio" Version="0.1.0-preview1" />
        <PackageReference Include="Sentry.Maui" Version="3.23.1-preview.3" />
        <PackageReference Include="Syncfusion.Maui.Barcode" Version="20.3.56" />
        <PackageReference Include="ZXing.Net.Maui.Controls" Version="0.2.0-preview.2" />
    </ItemGroup>

    <ItemGroup>
        <PackageReference Include="sqlite-net-pcl" Version="1.8.116" />
        <PackageReference Include="SQLitePCLRaw.core" Version="2.1.0" />
        <PackageReference Include="SQLitePCLRaw.bundle_green" Version="2.1.0" />
        <PackageReference Include="SQLitePCLRaw.provider.dynamic_cdecl" Version="2.1.0" />
        <PackageReference Include="SQLitePCLRaw.provider.sqlite3" Version="2.1.0" />
    </ItemGroup>

</Project>

可能的问题及解决办法:

  1. 文件名拼写错误
    从csproj的<None Remove>项里看到,汉堡菜单图标文件名是hamburger_manu_graphite.png,这里的manu是拼写错误(应为menu)。如果代码里引用的是hamburger_menu_graphite.png,就会找不到文件导致崩溃。

    • 修正文件名拼写,确保和代码中的引用完全一致。
  2. 资源生成配置冲突
    虽然你用<MauiImage Include="Resources\Images\*" />包含了所有图片,但后续的<None Remove>操作可能干扰了MSBuild对资源的识别。另外,需要确认目标图片的生成操作是否为MauiImage:

    • 右键目标PNG文件→属性,将“生成操作”设置为MauiImage。
    • 删除整个<None Remove>的ItemGroup,<MauiImage>已经负责包含图片资源,无需额外移除None项。
  3. iOS大小写敏感问题
    iOS系统对文件名大小写严格区分,如果代码中引用的图标文件名大小写和实际文件不一致,也会导致加载失败。

    • 确保代码引用的文件名和实际文件的大小写完全匹配。
  4. 显式指定目标资源
    可以尝试在csproj中单独显式包含汉堡菜单图标,避免通配符包含的潜在问题:

    <MauiImage Include="Resources\Images\hamburger_menu_graphite.png" />
    
  5. 验证打包资源
    本地生成ipa包后,解压查看Payload/MyApp.app/Resources目录,确认目标PNG是否存在。如果不存在,说明打包过程中未包含该资源,需要重新检查配置。


内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:25:20