diff --git a/dotnet/targets/Xamarin.Shared.Sdk.targets b/dotnet/targets/Xamarin.Shared.Sdk.targets index a64abd1d3bf3..908ee35001c6 100644 --- a/dotnet/targets/Xamarin.Shared.Sdk.targets +++ b/dotnet/targets/Xamarin.Shared.Sdk.targets @@ -942,11 +942,15 @@ <_AOTInputDirectory>$(_IntermediateNativeLibraryDir)aot-input/ <_AOTOutputDirectory>$(_IntermediateNativeLibraryDir)aot-output/ + + <_LibMonoLinkMode Condition="'$(_LibMonoLinkMode)' == '' And '$(_PlatformName)' == 'MacCatalyst'">static <_LibMonoLinkMode Condition="'$(_LibMonoLinkMode)' == '' And ('$(ComputedPlatform)' != 'iPhone' Or '$(_PlatformName)' == 'macOS')">dylib <_LibMonoLinkMode Condition="'$(_LibMonoLinkMode)' == ''">static <_LibMonoExtension Condition="'$(_LibMonoLinkMode)' == 'dylib'">dylib <_LibMonoExtension Condition="'$(_LibMonoLinkMode)' == 'static'">a + + <_LibXamarinLinkMode Condition="'$(_LibXamarinLinkMode)' == '' And '$(_PlatformName)' == 'MacCatalyst'">static <_LibXamarinLinkMode Condition="'$(_LibXamarinLinkMode)' == '' And '$(ComputedPlatform)' != 'iPhone' And '$(_PlatformName)' != 'macOS'">dylib <_LibXamarinLinkMode Condition="'$(_LibXamarinLinkMode)' == ''">static <_LibXamarinExtension Condition="'$(_LibXamarinLinkMode)' == 'dylib'">dylib diff --git a/tests/dotnet/UnitTests/ProjectTest.cs b/tests/dotnet/UnitTests/ProjectTest.cs index e6519346e31a..9a37b3c17a65 100644 --- a/tests/dotnet/UnitTests/ProjectTest.cs +++ b/tests/dotnet/UnitTests/ProjectTest.cs @@ -1209,14 +1209,6 @@ public void CustomizedCodeSigning (ApplePlatform platform, string runtimeIdentif var signedDylibs = new List { Path.Combine (sharedSupportDir, "app2.app", dylibDir, "lib2.dylib"), }; - if (platform == ApplePlatform.MacCatalyst) { - signedDylibs.Add (Path.Combine (dylibDir, "libSystem.IO.Compression.Native.dylib")); - signedDylibs.Add (Path.Combine (dylibDir, "libSystem.Native.dylib")); - signedDylibs.Add (Path.Combine (dylibDir, "libSystem.Net.Security.Native.dylib")); - signedDylibs.Add (Path.Combine (dylibDir, "libSystem.Security.Cryptography.Native.Apple.dylib")); - signedDylibs.Add (Path.Combine (dylibDir, "libmonosgen-2.0.dylib")); - signedDylibs.Add (Path.Combine (dylibDir, "libxamarin-dotnet-debug.dylib")); - } foreach (var dylib in signedDylibs) { var path = Path.Combine (appPath, dylib); diff --git a/tests/introspection/ApiPInvokeTest.cs b/tests/introspection/ApiPInvokeTest.cs index da18e985efc9..4566a6501ec0 100644 --- a/tests/introspection/ApiPInvokeTest.cs +++ b/tests/introspection/ApiPInvokeTest.cs @@ -222,7 +222,23 @@ protected void Check (Assembly a) path = null; break; case "libSystem.Native": - path += ".dylib"; + var staticallyLinked = false; +#if __MACCATALYST__ + // always statically linked + staticallyLinked = true; +#elif __IOS__ || __TVOS__ + // statically linked on device + staticallyLinked = Runtime.Arch == Arch.DEVICE; +#elif __MACOS__ + // never statically linked (by default) +#else +#error Unknown platform +#endif + if (staticallyLinked) { + path = null; + } else { + path += ".dylib"; + } break; #endif case "libc": diff --git a/tools/linker/MonoTouch.Tuner/ListExportedSymbols.cs b/tools/linker/MonoTouch.Tuner/ListExportedSymbols.cs index 52ae7cc09479..c6949dd2c9d1 100644 --- a/tools/linker/MonoTouch.Tuner/ListExportedSymbols.cs +++ b/tools/linker/MonoTouch.Tuner/ListExportedSymbols.cs @@ -189,6 +189,9 @@ bool ProcessMethod (MethodDefinition method) Where (v => v.EndsWith (".dylib", StringComparison.OrdinalIgnoreCase) || v.EndsWith (".a", StringComparison.OrdinalIgnoreCase)). Select (v => Path.GetFileNameWithoutExtension (v)). Select (v => v.StartsWith ("lib", StringComparison.OrdinalIgnoreCase) ? v.Substring (3) : v).ToHashSet (); +#if !__MACOS__ + monoLibraryVariations.Add ("System.Globalization.Native"); // System.Private.CoreLib has P/Invokes pointing to libSystem.Globalization.Native, but they're actually in libmonosgen-2.0 +#endif monoLibraryVariations.UnionWith (monoLibraryVariations.Select (v => "lib" + v).ToArray ()); monoLibraryVariations.UnionWith (monoLibraryVariations.Select (v => v + ".dylib").ToArray ()); // If the P/Invoke points to any of those libraries, then we add it as a P/Invoke symbol.