diff --git a/dotnet/targets/Xamarin.Shared.Sdk.targets b/dotnet/targets/Xamarin.Shared.Sdk.targets index 876102b6b696..838c78154422 100644 --- a/dotnet/targets/Xamarin.Shared.Sdk.targets +++ b/dotnet/targets/Xamarin.Shared.Sdk.targets @@ -922,11 +922,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 47c52cc291ee..7aaee8b56108 100644 --- a/tests/dotnet/UnitTests/ProjectTest.cs +++ b/tests/dotnet/UnitTests/ProjectTest.cs @@ -1164,14 +1164,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 a6b23ddd68fa..ee226569771b 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 21d260f2947c..c77ce9bb470e 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.