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

.NET MAUI打包Android时触发iOS Code Signing错误求助

打包Android App Bundle触发iOS签名错误的解决方法

我用C# 8.0开发.NET MAUI应用,首次打包被谷歌、苹果双双拒绝。调整配置后已经能生成符合要求的iOS .ipa文件,但现在打包Android App Bundle时失败。

操作步骤:选择实体Android设备为目标,切换到Release模式,右键项目选“Publish...”开始构建,目标平台显示Android,流程提示“Archiving App Bundle”,但构建失败,错误信息如下:

C:\Program Files\dotnet\packs\Microsoft.iOS.Sdk.net8.0_18.0\18.0.8303\tools\msbuild\iOS\Xamarin.Shared.targets(2901,3): error : Code signing must be enabled to create an Xcode archive.

明明是打包Android,为什么会触发iOS的Xcode签名错误?下面是脱敏后的项目文件:

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

    <PropertyGroup>
        <TargetFrameworks>net8.0-ios;net8.0-maccatalyst;net8.0-android34.0</TargetFrameworks>
        <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>

        <OutputType>Exe</OutputType>
        <RootNamespace>[MY APP NAME]</RootNamespace>
        <UseMaui>true</UseMaui>
        <SingleProject>true</SingleProject>
        <ImplicitUsings>disable</ImplicitUsings>
        <Nullable>enable</Nullable>

        <!-- Display name -->
        <ApplicationTitle>[MY APP NAME]</ApplicationTitle>

        <!-- App Identifier -->
        <ApplicationId>[MY APP IDENTIFIER]</ApplicationId>

        <!-- Versions -->
        <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
        <ApplicationVersion>1</ApplicationVersion>

        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">12.0</SupportedOSPlatformVersion>
        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">13.1</SupportedOSPlatformVersion>
        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">27.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)'=='net8.0-ios'">
        <ProvisioningType>manual</ProvisioningType>
        <CodesignKey>[MY VALID KEY]</CodesignKey>
        <CodesignProvision>[MY VALID PROVISION]</CodesignProvision>
    </PropertyGroup>

    <!-- iOS -->
    <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0-ios|AnyCPU'">
        <CodesignEntitlements>Platforms\iOS\Entitlements.plist</CodesignEntitlements>
        <ApplicationId>[MY APP IDENTIFIER]</ApplicationId>
        <CodesignResourceRules></CodesignResourceRules>

        <MtouchDebug>True</MtouchDebug>
        <ArchiveOnBuild>True</ArchiveOnBuild>
        <MtouchInterpreter>all</MtouchInterpreter>
        <PublishAot>False</PublishAot>
        <UseInterpreter>True</UseInterpreter>
    </PropertyGroup>

    <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-ios|AnyCPU'">
        <CodesignEntitlements>Platforms\iOS\Entitlements.plist</CodesignEntitlements>
        <ApplicationId>[MY APP IDENTIFIER]</ApplicationId>
        <CodesignResourceRules></CodesignResourceRules>

        <MtouchDebug>True</MtouchDebug>
        <ArchiveOnBuild>True</ArchiveOnBuild>
        <MtouchInterpreter>all</MtouchInterpreter>
        <PublishAot>False</PublishAot>
        <UseInterpreter>True</UseInterpreter>
    </PropertyGroup>

    <!-- Android -->
    <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-android34.0|AnyCPU'">
        <AndroidPackageFormat>aab</AndroidPackageFormat>
        <Debugger>Xamarin</Debugger>
        <EnableLLVM>False</EnableLLVM>
        <AndroidUseAapt2>True</AndroidUseAapt2>
        <AndroidCreatePackagePerAbi>False</AndroidCreatePackagePerAbi>
        <ApplicationId>[MY APP IDENTIFIER]</ApplicationId>

        <_MauiForceXamlCForDebug>True</_MauiForceXamlCForDebug>
        <UseInterpreter>False</UseInterpreter>
    </PropertyGroup>

    <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0-android34.0|AnyCPU'">
        <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
        <Debugger>Xamarin</Debugger>
        <EnableLLVM>False</EnableLLVM>
        <AndroidUseAapt2>True</AndroidUseAapt2>
        <AndroidCreatePackagePerAbi>False</AndroidCreatePackagePerAbi>
        <AndroidPackageFormat>aab</AndroidPackageFormat>
        <ApplicationId>[MY APP IDENTIFIER]</ApplicationId>

        <_MauiForceXamlCForDebug>True</_MauiForceXamlCForDebug>
        <UseInterpreter>False</UseInterpreter>
    </PropertyGroup>

    <!-- Mac Catalyst -->
    <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0-maccatalyst|AnyCPU'">
      <ApplicationId>[MY APP IDENTIFIER]</ApplicationId>
    </PropertyGroup>

    <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-maccatalyst|AnyCPU'">
        <ApplicationId>[MY APP IDENTIFIER]</ApplicationId>
    </PropertyGroup>

    <!-- Windows -->
    <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0-windows10.0.19041.0|AnyCPU'">
        <ApplicationId>[MY APP IDENTIFIER]</ApplicationId>
    </PropertyGroup>

    <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-windows10.0.19041.0|AnyCPU'">
      <ApplicationId>[MY APP IDENTIFIER]</ApplicationId>
    </PropertyGroup>

    <ItemGroup>
        <!-- App Icon -->
        <MauiIcon Include="Resources\AppIcon\appicon.svg" ForegroundFile="Resources\AppIcon\ourappicon.png" Color="#C7DCF9" />

        <!-- Splash Screen -->
        <MauiSplashScreen Include="Resources\Images\app_our_logo.png" Color="#C7DCF9" BaseSize="200,67" />

        <!-- Images -->
        <MauiImage Include="Resources\Images\*" />
        <MauiImage Update="Resources\Images\app_our_logo.png">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </MauiImage>

        <!-- 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="appsettings.json" />
    </ItemGroup>

    <ItemGroup>
        <EmbeddedResource Include="appsettings.json" />
    </ItemGroup>

    <ItemGroup Condition="$(TargetFramework.Contains('-ios'))">
        <CustomEntitlements Include="aps-environment" Type="string" Value="development" Condition="'$(Configuration)' == 'Debug'" />
        <CustomEntitlements Include="aps-environment" Type="string" Value="production" Condition="'$(Configuration)' == 'Release'" />
    </ItemGroup>
    <ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios' OR $([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">
        <BundleResource Include="Platforms\iOS\PrivacyInfo.xcprivacy" LogicalName="PrivacyInfo.xcprivacy" />
    </ItemGroup>

    <ItemGroup>
        <GoogleServicesJson Include="Platforms\Android\google-services.json" />
    </ItemGroup>

    <ItemGroup>
        <PackageReference Include="Camera.MAUI" Version="1.5.1" />
        <PackageReference Include="Camera.MAUI.ZXing" Version="1.0.0" />
        <PackageReference Include="CommunityToolkit.Maui" Version="9.0.3" />
        <PackageReference Include="CommunityToolkit.Maui.MediaElement" Version="4.1.1" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.8" />
        <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.2" />
        <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
        <PackageReference Include="Microsoft.Maui.Controls" Version="8.0.91" />
        <PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="8.0.91" />
        <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
        <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
        <PackageReference Include="Plugin.LocalNotification" Version="11.1.3" />
        <PackageReference Include="Shiny.Beacons" Version="3.3.3" />
        <PackageReference Include="Shiny.Hosting.Maui" Version="3.3.3" />
        <PackageReference Include="Shiny.Push" Version="3.3.3" />
    </ItemGroup>

    <ItemGroup>
        <!-- ... Here are two C# 8.0 library projects I am using ... -->
    </ItemGroup>

    <ItemGroup>
        <!-- ... All my non-image resources are here ... -->
    </ItemGroup>

    <ItemGroup>
        <MauiXaml Update="Resources\Styles\CommonStyles.xaml">
            <Generator>MSBuild:Compile</Generator>
        </MauiXaml>
    </ItemGroup>

    <ItemGroup>
        <!-- ... All my XAML files are here ... -->
    </ItemGroup>

    <ItemGroup Condition="'$(TargetFramework)' == 'net8.0-android34.0'">
        <PackageReference Include="Symbol.XamarinEMDK">
            <Version>8.0.0.9</Version>
        </PackageReference>
    </ItemGroup>

</Project>

问题原因

你的项目配置中,iOS的Release和Debug配置里都设置了<ArchiveOnBuild>True</ArchiveOnBuild>,这个属性会强制MSBuild在构建时执行Xcode归档操作。即使你选择的是Android目标,某些MSBuild任务可能会遍历所有目标框架的配置,触发iOS的归档逻辑,导致签名错误。另外,iOS Release配置中开启<MtouchDebug>True</MtouchDebug>也不符合发布版本的规范。

解决步骤

  1. 打开项目文件,找到iOS的Debug和Release配置段:
    • 将<ArchiveOnBuild>True</ArchiveOnBuild>改为<ArchiveOnBuild>False</ArchiveOnBuild>,或者直接删除该行。
    • 将iOS Release配置中的<MtouchDebug>True</MtouchDebug>改为<MtouchDebug>False</MtouchDebug>。

修改后的iOS配置段示例:

<!-- iOS -->
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0-ios|AnyCPU'">
    <CodesignEntitlements>Platforms\iOS\Entitlements.plist</CodesignEntitlements>
    <ApplicationId>[MY APP IDENTIFIER]</ApplicationId>
    <CodesignResourceRules></CodesignResourceRules>

    <MtouchDebug>True</MtouchDebug>
    <ArchiveOnBuild>False</ArchiveOnBuild>
    <MtouchInterpreter>all</MtouchInterpreter>
    <PublishAot>False</PublishAot>
    <UseInterpreter>True</UseInterpreter>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-ios|AnyCPU'">
    <CodesignEntitlements>Platforms\iOS\Entitlements.plist</CodesignEntitlements>
    <ApplicationId>[MY APP IDENTIFIER]</ApplicationId>
    <CodesignResourceRules></CodesignResourceRules>

    <MtouchDebug>False</MtouchDebug>
    <ArchiveOnBuild>False</ArchiveOnBuild>
    <MtouchInterpreter>all</MtouchInterpreter>
    <PublishAot>False</PublishAot>
    <UseInterpreter>True</UseInterpreter>
</PropertyGroup>
  1. 保存项目文件,重新尝试打包Android App Bundle。这样MSBuild就不会再触发iOS的归档流程,也就不会出现Xcode签名错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:50:54