diff --git a/Make.config b/Make.config
index 650413168b6a..8daac069c8b0 100644
--- a/Make.config
+++ b/Make.config
@@ -69,9 +69,10 @@ include $(TOP)/mk/mono.mk
MONO_HASH := $(NEEDED_MONO_VERSION)
# Minimum Mono version for building XI/XM
-MIN_MONO_VERSION=6.6.0.117
-MAX_MONO_VERSION=6.6.99
-MIN_MONO_URL=https://xamjenkinsartifact.azureedge.net/build-package-osx-mono/2019-08/117/617f399efca133f357cb8207bc7f58b1120f12f1/MonoFramework-MDK-6.6.0.117.macos10.xamarin.universal.pkg
+
+MIN_MONO_VERSION=6.8.0.0
+MAX_MONO_VERSION=6.8.99
+MIN_MONO_URL=https://xamjenkinsartifact.azureedge.net/build-package-osx-mono/2019-10/65/18920a83f423fb864a2263948737681968f5b2c8/MonoFramework-MDK-6.8.0.61.macos10.xamarin.universal.pkg
# Minimum Mono version for Xamarin.Mac apps using the system mono
MIN_XM_MONO_VERSION=6.4.0.94
diff --git a/builds/Makefile b/builds/Makefile
index 95e4d1532dd6..a34b888fbb0a 100644
--- a/builds/Makefile
+++ b/builds/Makefile
@@ -109,6 +109,9 @@ $(SDK_CONFIG):
echo "DISABLE_ANDROID=1" > $@
echo "DISABLE_DESKTOP=1" >> $@
echo "DISABLE_WASM=1" >> $@
+ echo "ENABLE_IOS=1" >> $@
+ echo "ENABLE_MAC=1" >> $@
+
ifdef DISABLE_BUILDS_MAKEFILE_DEP
BUILDS_MAKEFILE_DEP =
diff --git a/mk/mono.mk b/mk/mono.mk
index b6818f60c50d..33e19aff914e 100644
--- a/mk/mono.mk
+++ b/mk/mono.mk
@@ -1,5 +1,5 @@
-NEEDED_MONO_VERSION := 062f0ab8cae60d1d347e4d722884c065c9f34484
-NEEDED_MONO_BRANCH := 2019-08
+NEEDED_MONO_VERSION := 18920a83f423fb864a2263948737681968f5b2c8
+NEEDED_MONO_BRANCH := 2019-10
MONO_DIRECTORY := mono
MONO_MODULE := https://github.com/mono/mono
diff --git a/runtime/monotouch-main.m b/runtime/monotouch-main.m
index deb9e3ab04a2..f55e9a4a73bf 100644
--- a/runtime/monotouch-main.m
+++ b/runtime/monotouch-main.m
@@ -476,9 +476,7 @@ - (void) memoryWarning: (NSNotification *) sender
mono_domain_set_config (mono_domain_get (), base_dir, config_file_name);
- MONO_ENTER_GC_SAFE;
rv = xamarin_extension_main (argc, argv);
- MONO_EXIT_GC_SAFE;
break;
case XamarinLaunchModeApp:
rv = mono_jit_exec (mono_domain_get (), assembly, managed_argc, managed_argv);
diff --git a/src/CFNetwork/CFHTTPMessage.cs b/src/CFNetwork/CFHTTPMessage.cs
index ca6dd97339da..fa203df0d69f 100644
--- a/src/CFNetwork/CFHTTPMessage.cs
+++ b/src/CFNetwork/CFHTTPMessage.cs
@@ -80,9 +80,12 @@ static IntPtr GetVersion (Version version)
return _HTTPVersion1_1.Handle;
else if (version.Equals (HttpVersion.Version10))
return _HTTPVersion1_0.Handle;
- else if (version.Major == 2 && version.Minor == 0)
- return _HTTPVersion2_0.Handle;
- else
+ else if (version.Major == 2 && version.Minor == 0) {
+ if (_HTTPVersion2_0 != null && _HTTPVersion2_0.Handle != IntPtr.Zero)
+ return _HTTPVersion2_0.Handle;
+ // HTTP 2.0 requires OS X 10.11 or later.
+ return _HTTPVersion1_1.Handle;
+ } else
throw new ArgumentException ();
}
diff --git a/src/Foundation/NSUrlSessionHandler.cs b/src/Foundation/NSUrlSessionHandler.cs
index 20bb46b6f5c9..059b1ead0f12 100644
--- a/src/Foundation/NSUrlSessionHandler.cs
+++ b/src/Foundation/NSUrlSessionHandler.cs
@@ -831,7 +831,7 @@ protected override void Dispose (bool disposing)
base.Dispose (disposing);
}
- protected internal override Task SerializeToStreamAsync (Stream stream, TransportContext context)
+ protected override Task SerializeToStreamAsync (Stream stream, TransportContext context)
{
if (contentCopied) {
if (!content.CanSeek) {
diff --git a/src/System.Net.Http/CFContentStream.cs b/src/System.Net.Http/CFContentStream.cs
index 42f0142ed564..bdd3518ad57b 100644
--- a/src/System.Net.Http/CFContentStream.cs
+++ b/src/System.Net.Http/CFContentStream.cs
@@ -125,7 +125,7 @@ public void Close ()
data_event.Set ();
}
- protected internal override async Task SerializeToStreamAsync (Stream stream, TransportContext context)
+ protected override async Task SerializeToStreamAsync (Stream stream, TransportContext context)
{
while (data_event.WaitOne ()) {
data_mutex.WaitOne ();
diff --git a/src/System.Net.Http/CFNetworkHandler.cs b/src/System.Net.Http/CFNetworkHandler.cs
index 7af25c9628fc..edca57709388 100644
--- a/src/System.Net.Http/CFNetworkHandler.cs
+++ b/src/System.Net.Http/CFNetworkHandler.cs
@@ -358,7 +358,7 @@ void HandleHasBytesAvailableEvent (object sender, CFStream.StreamEventArgs e)
var key = entry.Key.ToString ();
var value = entry.Value == null ? string.Empty : entry.Value.ToString ();
HttpHeaders item_headers;
- if (HttpHeaders.GetKnownHeaderKind (key) == Headers.HttpHeaderKind.Content) {
+ if (HeaderDescriptor.TryGet (key, out var descriptor) && descriptor.HeaderType == HttpHeaderType.Content) {
item_headers = response_msg.Content.Headers;
} else {
item_headers = response_msg.Headers;
diff --git a/tests/bcl-test/common-monotouch_corlib_xunit-test.dll.ignore b/tests/bcl-test/common-monotouch_corlib_xunit-test.dll.ignore
index b9ef3636ed12..63c0968430d5 100644
--- a/tests/bcl-test/common-monotouch_corlib_xunit-test.dll.ignore
+++ b/tests/bcl-test/common-monotouch_corlib_xunit-test.dll.ignore
@@ -414,4 +414,13 @@ System.SpanTests.ReadOnlySpanTests.BinarySearch_Double
System.Reflection.Tests.MethodBaseTests.Test_GetCurrentMethod_Inlineable
# device issues, it was reported here: https://github.com/mono/mono/issues/14761
-System.Text.Tests.StringBuilderTests.Append_CharPointer_Null_ThrowsNullReferenceException
\ No newline at end of file
+System.Text.Tests.StringBuilderTests.Append_CharPointer_Null_ThrowsNullReferenceException
+
+# mono issue: https://github.com/mono/mono/issues/17752
+# Exception messages: System.OutOfMemoryException : Insufficient memory to continue the execution of the program.
+Platform32:System.Reflection.Tests.RuntimeReflectionExtensionsTests.GetRuntimeMethod
+
+# maccore issue: https://github.com/xamarin/maccore/issues/1659
+# random OOMs
+Platform32:System.Collections.Tests.HashtableTests.Ctor_Int_Int_GenerateNewPrime
+Platform32:System.Tests.BitConverterTests.ToString_ByteArrayTooLong_Throws
diff --git a/tests/bcl-test/macOSModern-xammac_net_4_5_System_xunit-test.dll.ignore b/tests/bcl-test/macOSModern-xammac_net_4_5_System_xunit-test.dll.ignore
index 9f6934406d85..fb99afd62156 100644
--- a/tests/bcl-test/macOSModern-xammac_net_4_5_System_xunit-test.dll.ignore
+++ b/tests/bcl-test/macOSModern-xammac_net_4_5_System_xunit-test.dll.ignore
@@ -115,4 +115,4 @@ System.Net.Security.Tests.ApmSslStreamSystemDefaultTest.ClientAndServer_OneOrBot
System.Net.Security.Tests.ClientDefaultEncryptionTest.ClientDefaultEncryption_ServerRequireEncryption_ConnectWithEncryption
System.Net.Security.Tests.ClientDefaultEncryptionTest.ClientDefaultEncryption_ServerAllowNoEncryption_ConnectWithEncryption
System.Net.Security.Tests.ServerAllowNoEncryptionTest.ServerAllowNoEncryption_ClientAllowNoEncryption_ConnectWithEncryption
-KLASS:System.Net.Security.Tests.SslStreamSniTest
\ No newline at end of file
+KLASS:System.Net.Security.Tests.SslStreamSniTest
diff --git a/tests/linker/ios/link sdk/HttpClientHandlerTest.cs b/tests/linker/ios/link sdk/HttpClientHandlerTest.cs
index e9f2e68461d0..6a347f65ed4e 100644
--- a/tests/linker/ios/link sdk/HttpClientHandlerTest.cs
+++ b/tests/linker/ios/link sdk/HttpClientHandlerTest.cs
@@ -30,7 +30,6 @@ public void HttpClient ()
Assert.That (handler.AutomaticDecompression, Is.EqualTo (DecompressionMethods.None), "AutomaticDecompression");
Assert.That (handler.ClientCertificateOptions, Is.EqualTo (ClientCertificateOption.Manual), "ClientCertificateOptions");
Assert.That (handler.MaxAutomaticRedirections, Is.EqualTo (50), "MaxAutomaticRedirections");
- Assert.That (handler.MaxRequestContentBufferSize, Is.EqualTo (Int32.MaxValue), "MaxRequestContentBufferSize");
Assert.Null (handler.Proxy, "Proxy");
Assert.True (handler.SupportsAutomaticDecompression, "SupportsAutomaticDecompression");
Assert.True (handler.SupportsProxy, "SupportsProxy");
diff --git a/tests/mmptest/src/MMPTest.cs b/tests/mmptest/src/MMPTest.cs
index c1e3d03c6389..ac7907feb299 100644
--- a/tests/mmptest/src/MMPTest.cs
+++ b/tests/mmptest/src/MMPTest.cs
@@ -474,9 +474,9 @@ public void HttpClientHandler (string mmpHandler, string expectedHandler)
References = " ",
TestCode = $@"
var client = new System.Net.Http.HttpClient ();
- var field = client.GetType ().BaseType.GetField (""handler"", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+ var field = client.GetType ().BaseType.GetField (""_handler"", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
if (field == null)
- throw new System.Exception (""Could not find the field 'handler' in HttpClient's base type (which should be 'HttpMessageInvoker')."");
+ throw new System.Exception (""Could not find the field '_handler' in HttpClient's base type (which should be 'HttpMessageInvoker')."");
var fieldValue = field.GetValue (client);
if (fieldValue == null)
throw new System.Exception (""Unexpected null value found in 'HttpMessageInvoker.handler' field."");
diff --git a/tests/mmptest/src/WarningTests.cs b/tests/mmptest/src/WarningTests.cs
index 19877da3baad..21d4cbace551 100644
--- a/tests/mmptest/src/WarningTests.cs
+++ b/tests/mmptest/src/WarningTests.cs
@@ -14,6 +14,8 @@ public void MM0135 ()
if (!Directory.Exists (oldXcode))
Assert.Ignore ("This test requires Xcode 9.4 (or updated to a newer one that still warns MM0135).");
+ else if (Environment.OSVersion.Version.Major >= 19 /* macOS 10.15+ */)
+ Assert.Ignore ("Xcode 9.4 does not work on Catalina or later."); // This can check can be removed after switching to a newer Xcode than 9.4.
MMPTests.RunMMPTest (tmpDir => {
TI.UnifiedTestConfig test = new TI.UnifiedTestConfig (tmpDir);
diff --git a/tests/monotouch-test/Network/NWEstablishmentReportTest.cs b/tests/monotouch-test/Network/NWEstablishmentReportTest.cs
index eaf28329c1f5..d1a9f7ff44cb 100644
--- a/tests/monotouch-test/Network/NWEstablishmentReportTest.cs
+++ b/tests/monotouch-test/Network/NWEstablishmentReportTest.cs
@@ -75,8 +75,8 @@ public void Init ()
[TestFixtureTearDown]
public void Dispose()
{
- report.Dispose ();
- connection.Dispose ();
+ report?.Dispose ();
+ connection?.Dispose ();
}
[Test]
diff --git a/tests/monotouch-test/Network/NWParametersTest.cs b/tests/monotouch-test/Network/NWParametersTest.cs
index 1cdc251c0424..e497944881e5 100644
--- a/tests/monotouch-test/Network/NWParametersTest.cs
+++ b/tests/monotouch-test/Network/NWParametersTest.cs
@@ -58,9 +58,11 @@ public void Init ()
[TestFixtureTearDown]
public void Dispose()
{
- connection.Dispose ();
- foreach (var i in interfaces)
- i.Dispose ();
+ connection?.Dispose ();
+ if (interfaces != null) {
+ foreach (var i in interfaces)
+ i.Dispose ();
+ }
}
[SetUp]
diff --git a/tests/monotouch-test/Network/NWProtocolIPOptionsTest.cs b/tests/monotouch-test/Network/NWProtocolIPOptionsTest.cs
index 23be8e9e4753..48293dee382c 100644
--- a/tests/monotouch-test/Network/NWProtocolIPOptionsTest.cs
+++ b/tests/monotouch-test/Network/NWProtocolIPOptionsTest.cs
@@ -66,8 +66,8 @@ public void Init ()
[TestFixtureTearDown]
public void Dispose()
{
- connection.Dispose ();
- stack.Dispose ();
+ connection?.Dispose ();
+ stack?.Dispose ();
}
[SetUp]
diff --git a/tests/monotouch-test/Network/NWProtocolStackTest.cs b/tests/monotouch-test/Network/NWProtocolStackTest.cs
index f7f7fa2b4af0..426199708ee2 100644
--- a/tests/monotouch-test/Network/NWProtocolStackTest.cs
+++ b/tests/monotouch-test/Network/NWProtocolStackTest.cs
@@ -56,10 +56,12 @@ public void Init ()
[TestFixtureTearDown]
public void Dispose()
{
- connection.Dispose ();
- stack.Dispose ();
- foreach (var o in options)
- o.Dispose ();
+ connection?.Dispose ();
+ stack?.Dispose ();
+ if (options != null) {
+ foreach (var o in options)
+ o.Dispose ();
+ }
}
[SetUp]
diff --git a/tests/monotouch-test/System.Net.Http/MessageHandlers.cs b/tests/monotouch-test/System.Net.Http/MessageHandlers.cs
index 206e3a4ee36f..da79e3d78345 100644
--- a/tests/monotouch-test/System.Net.Http/MessageHandlers.cs
+++ b/tests/monotouch-test/System.Net.Http/MessageHandlers.cs
@@ -14,6 +14,7 @@
using NUnit.Framework;
using System.Net.Http.Headers;
+using System.Security.Authentication;
using System.Text;
using Foundation;
#if MONOMAC
@@ -174,24 +175,35 @@ public void RejectSslCertificatesServicePointManager (Type handlerType)
Assert.Ignore ("Fails on macOS 10.10: https://github.com/xamarin/maccore/issues/1645");
#endif
- bool servicePointManagerCbWasExcuted = false;
+ bool validationCbWasExecuted = false;
+ bool customValidationCbWasExecuted = false;
+ bool invalidServicePointManagerCbWasExcuted = false;
bool done = false;
Exception ex = null;
+ Type expectedExceptionType = null;
HttpResponseMessage result = null;
var handler = GetHandler (handlerType);
- if (handler is NSUrlSessionHandler ns) {
- ns.TrustOverride += (a,b) => {
- servicePointManagerCbWasExcuted = true;
+ if (handler is HttpClientHandler ch) {
+ expectedExceptionType = typeof (AuthenticationException);
+ ch.ServerCertificateCustomValidationCallback = (sender, certificate, chain, errors) => {
+ validationCbWasExecuted = true;
// return false, since we want to test that the exception is raised
return false;
};
- } else {
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => {
- servicePointManagerCbWasExcuted = true;
+ invalidServicePointManagerCbWasExcuted = true;
+ return false;
+ };
+ } else if (handler is NSUrlSessionHandler ns) {
+ expectedExceptionType = typeof (WebException);
+ ns.TrustOverride += (a,b) => {
+ validationCbWasExecuted = true;
// return false, since we want to test that the exception is raised
return false;
};
+ } else {
+ Assert.Fail ($"Invalid HttpMessageHandler: '{handler.GetType ()}'.");
}
TestRuntime.RunAsync (DateTime.Now.AddSeconds (30), async () =>
@@ -213,11 +225,14 @@ public void RejectSslCertificatesServicePointManager (Type handlerType)
if (!done) { // timeouts happen in the bots due to dns issues, connection issues etc.. we do not want to fail
Assert.Inconclusive ("Request timedout.");
} else {
+ // the ServicePointManager.ServerCertificateValidationCallback will never be executed.
+ Assert.False(invalidServicePointManagerCbWasExcuted);
+ Assert.True(validationCbWasExecuted);
// assert the exception type
Assert.IsNotNull (ex, (result == null)? "Expected exception is missing and got no result" : $"Expected exception but got {result.Content.ReadAsStringAsync ().Result}");
Assert.IsInstanceOfType (typeof (HttpRequestException), ex);
Assert.IsNotNull (ex.InnerException);
- Assert.IsInstanceOfType (typeof (WebException), ex.InnerException);
+ Assert.IsInstanceOfType (expectedExceptionType, ex.InnerException);
}
}
diff --git a/tests/mtouch/MTouch.cs b/tests/mtouch/MTouch.cs
index b2b045595cd4..24d3c5c98c26 100644
--- a/tests/mtouch/MTouch.cs
+++ b/tests/mtouch/MTouch.cs
@@ -3940,9 +3940,9 @@ public class HandlerTest
public void Test ()
{{
var client = new System.Net.Http.HttpClient ();
- var field = client.GetType ().BaseType.GetField (""handler"", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+ var field = client.GetType ().BaseType.GetField (""_handler"", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
if (field == null)
- throw new System.Exception (""Could not find the field 'handler' in HttpClient's base type (which should be 'HttpMessageInvoker')."");
+ throw new System.Exception (""Could not find the field '_handler' in HttpClient's base type (which should be 'HttpMessageInvoker')."");
var fieldValue = field.GetValue (client);
if (fieldValue == null)
throw new System.Exception (""Unexpected null value found in 'HttpMessageInvoker.handler' field."");
diff --git a/tests/mtouch/SdkTest.cs b/tests/mtouch/SdkTest.cs
index 2338d389bed3..0858fdcd70ab 100644
--- a/tests/mtouch/SdkTest.cs
+++ b/tests/mtouch/SdkTest.cs
@@ -302,10 +302,23 @@ static string [] GetWatchOSAssemblies ()
"LLVM failed for 'd__56.MoveNext': non-finally/catch/fault clause.",
"LLVM failed for 'd__61`2.MoveNext': non-finally/catch/fault clause.",
"LLVM failed for 'd__61`2.MoveNext': non-finally/catch/fault clause.",
+ "LLVM failed for 'NetworkStream.Read': non-finally/catch/fault clause.",
+ "LLVM failed for 'NetworkStream.Write': non-finally/catch/fault clause.",
+ "LLVM failed for 'NetworkStream.BeginRead': non-finally/catch/fault clause.",
+ "LLVM failed for 'NetworkStream.EndRead': non-finally/catch/fault clause.",
+ "LLVM failed for 'NetworkStream.BeginWrite': non-finally/catch/fault clause.",
+ "LLVM failed for 'NetworkStream.EndWrite': non-finally/catch/fault clause.",
+ "LLVM failed for 'NetworkStream.ReadAsync': non-finally/catch/fault clause.",
+ "LLVM failed for 'NetworkStream.WriteAsync': non-finally/catch/fault clause.",
}) },
{ "System.Core.dll", new Tuple (0, new string [] {
"LLVM failed for 'EnterTryCatchFinallyInstruction.Run': non-finally/catch/fault clause.",
}) },
+ { "System.Net.Http.dll", new Tuple (0, new string [] {
+ "LLVM failed for 'HttpContent.CopyToAsync': non-finally/catch/fault clause.",
+ "LLVM failed for 'HttpContent.LoadIntoBufferAsync': non-finally/catch/fault clause.",
+ "LLVM failed for 'd__47.MoveNext': non-finally/catch/fault clause.",
+ }) },
{ "mscorlib.dll", new Tuple (0, new string [] {
"LLVM failed for 'Console.Write': opcode arglist",
"LLVM failed for 'Console.WriteLine': opcode arglist",
diff --git a/tools/linker/MobileSweepStep.cs b/tools/linker/MobileSweepStep.cs
index eb50da1f5ba3..91135ec95eec 100644
--- a/tools/linker/MobileSweepStep.cs
+++ b/tools/linker/MobileSweepStep.cs
@@ -49,12 +49,12 @@ protected void SweepMainModule (ModuleDefinition main)
// or they can point to nothing which will break later (e.g. when re-loading for stripping IL)
// reference: https://bugzilla.xamarin.com/show_bug.cgi?id=36577
if (main.HasExportedTypes)
- SweepCollectionNonAttributable (main.ExportedTypes);
+ SweepCollectionMetadata (main.ExportedTypes);
// only when linking should we remove module references, if we (re)save the assembly then
// the entrypoints (for p/invokes) will be required later
// reference: https://bugzilla.xamarin.com/show_bug.cgi?id=35372
if (main.HasModuleReferences && (CurrentAction == AssemblyAction.Link))
- SweepCollectionNonAttributable (main.ModuleReferences);
+ SweepCollectionMetadata (main.ModuleReferences);
}
}
}
diff --git a/tools/mmp/mmp.csproj b/tools/mmp/mmp.csproj
index 2922436b0b5f..00a979098d34 100644
--- a/tools/mmp/mmp.csproj
+++ b/tools/mmp/mmp.csproj
@@ -166,6 +166,9 @@
Linker\XApiReader.cs
+
+ Linker\OutputException.cs
+
Linker.Steps\BaseStep.cs
diff --git a/tools/mtouch/mtouch.csproj b/tools/mtouch/mtouch.csproj
index 587927d14162..435ad563ee94 100644
--- a/tools/mtouch/mtouch.csproj
+++ b/tools/mtouch/mtouch.csproj
@@ -154,6 +154,9 @@
Linker\MethodAction.cs
+
+ Linker\OutputException.cs
+
Linker.Steps\BaseStep.cs