diff --git a/dotnet/targets/Xamarin.Shared.Sdk.targets b/dotnet/targets/Xamarin.Shared.Sdk.targets index b1b307862a84..61b32c561f43 100644 --- a/dotnet/targets/Xamarin.Shared.Sdk.targets +++ b/dotnet/targets/Xamarin.Shared.Sdk.targets @@ -1625,13 +1625,19 @@ + + + + <_UseClassicLinker Condition="'$(_UseClassicLinker)' == '' And $([MSBuild]::VersionGreaterThanOrEquals('$(_XcodeVersion)', '16.0'))">false + <_UseClassicLinker Condition="'$(_UseClassicLinker)' == '' And $([MSBuild]::VersionGreaterThanOrEquals('$(_XcodeVersion)', '15.0'))">true + + <_AllLinkerFlags Include="@(_AssemblyLinkerFlags);@(_MainLinkerFlags);@(_CustomLinkFlags)" /> <_AllLinkerFlags Condition="'$(_ExportSymbolsExplicitly)' != 'true'" Include="@(_ProcessedReferenceNativeSymbol->'-u%(Identity)')" /> - - <_AllLinkerFlags Condition="$([MSBuild]::VersionGreaterThanOrEquals('$(_XcodeVersion)', '15.0')) And '$(_UseClassicLinker)' != 'false'" Include="-Xlinker" /> - <_AllLinkerFlags Condition="$([MSBuild]::VersionGreaterThanOrEquals('$(_XcodeVersion)', '15.0')) And '$(_UseClassicLinker)' != 'false'" Include="-ld_classic" /> + <_AllLinkerFlags Condition="'$(_UseClassicLinker)' == 'true'" Include="-Xlinker" /> + <_AllLinkerFlags Condition="'$(_UseClassicLinker)' == 'true'" Include="-ld_classic" /> args) } } - // check if needs to be removed: https://github.com/xamarin/xamarin-macios/issues/18693 - if (Driver.XcodeVersion.Major >= 15 && !Application.DisableAutomaticLinkerSelection) { + // There are known bugs in the classic linker with Xcode 15, so keep use the classic linker in that case + // In Xcode 16 we don't know of any problems for now, so enable the new linker by default + if (Driver.XcodeVersion.Major >= 15 && Driver.XcodeVersion.Major < 16 && !Application.DisableAutomaticLinkerSelection) { args.Insert (0, "-Xlinker"); args.Insert (1, "-ld_classic"); }