Skip to content

[.NET 10] iOS App Extensions (UI/Non-UI) are not code-signed during build despite correct Provisioning settings #24469

@IgorStrekha

Description

@IgorStrekha

Description

I am experiencing an issue where iOS Wallet Extensions (a pair of UI and Non-UI extensions) are not being code-signed when migrating a .NET MAUI project from .NET 8 to .NET 10.

Current Behavior: When using .net10.0-ios, Visual Studio on Windows completes the build process, but the App Extensions are bundled without a valid signature. Even if I provide intentional nonsense/garbage values in or , the build still "succeeds" without throwing any signing errors, which indicates that the signing step for extensions is being skipped entirely in the .NET 10 SDK.

Expected Behavior: The build process should respect the CodesignKey and CodesignProvision properties for App Extensions, sign them correctly, and fail the build if the provisioning profile or certificate is invalid (as it correctly does in .NET 8).

Environment:

Framework: .NET 10.0 (Maui)

Target: net10.0-ios (arm64)

IDE: Visual Studio for Windows

Provisioning Type: Manual

Steps to Reproduce

Create a .NET MAUI solution targeting net10.0-ios.

Add two iOS App Extension projects (e.g., for Apple Wallet: one UI and one Non-UI).

Reference these extensions in the main MAUI project.

Configure Manual Provisioning in the .csproj of the Extension projects as follows:

csproj

 <Project Sdk="Microsoft.NET.Sdk">
	<PropertyGroup>
		<TargetFrameworks>net10.0-ios</TargetFrameworks>
		<OutputType>Library</OutputType>
		<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
		<Nullable>disable</Nullable>
		<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
		<ImplicitUsings>enable</ImplicitUsings>
		<SupportedOSPlatformVersion>18.0</SupportedOSPlatformVersion>
	</PropertyGroup>
	<PropertyGroup>
		<IsAppExtension>True</IsAppExtension>
		<IsWatchExtension>False</IsWatchExtension>
	</PropertyGroup>
	<PropertyGroup>
		<Registrar>static</Registrar>
	</PropertyGroup>
	<PropertyGroup Condition="'$(TargetFramework)'=='net10.0-ios'">
		<ProvisioningType>manual</ProvisioningType>
		<CodesignKey>iPhone Distribution: ACC************(M2)</CodesignKey>
		<CodesignProvision>Ac Wallet-NONUI</CodesignProvision>
		<EnableSGenConc>True</EnableSGenConc>
		<MtouchInterpreter>-all,System.Private.Windows.Core</MtouchInterpreter>
	</PropertyGroup>
	<ItemGroup>
		<IosInfoPlist Include="Info.plist" />
		<IosEntitlementsPlist Include="Entitlements.plist" />
	</ItemGroup>
</Project>

Perform a Build/Publish of the main project on a Windows machine connected to a Mac build host.

Inspect the resulting .ipa (or build artifacts).

Observation: The Extensions are NOT present in the Payload. Additionally, changing the CodesignKey to a random string does not trigger a build error, confirming the signing task is ignored.

Link to public reproduction project repository

No response

Version with bug

10.0.0

Is this a regression from previous behavior?

Yes, this used to work in .NET MAUI

Last version that worked well

.NET 8 (Please specify exact version)

Affected platforms

iOS

Affected platform versions

iOS extensions, Wallet, macios, MAUI

Did you find any workaround?

No response

Relevant log output

Metadata

Metadata

Assignees

No one assigned

    Labels

    app-extensionsneed-infoWaiting for more information before the bug can be investigated

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions