diff --git a/Make.config b/Make.config index 0e88c44f2ef0..06802161e9c3 100644 --- a/Make.config +++ b/Make.config @@ -248,6 +248,11 @@ export DOTNET_CLI_WORKLOAD_UPDATE_NOTIFY_DISABLE=true # We don't need to be told we're using preview packages (we pretty much always are). export SuppressNETCoreSdkPreviewMessage=true +# The Arcade SDK imported by the Xamarin.MacDev submodule overrides +# NuGetPackageRoot in CI, breaking the netstandard2.0 build. +# Pass the correct path explicitly. +export NuGetPackageRoot=$(abspath $(TOP)/packages)/ + # Minimum OSX versions for building XI/XM MIN_OSX_BUILD_VERSION=15.3 diff --git a/external/Xamarin.MacDev b/external/Xamarin.MacDev index f1300986199f..11fad7fe464a 160000 --- a/external/Xamarin.MacDev +++ b/external/Xamarin.MacDev @@ -1 +1 @@ -Subproject commit f1300986199f5489191d2c9712e57bf8a0a3d84a +Subproject commit 11fad7fe464a7de7dd809542e4bb352310236052 diff --git a/msbuild/ILMerge.targets b/msbuild/ILMerge.targets index f2e8caa95328..d8c87c68fccf 100644 --- a/msbuild/ILMerge.targets +++ b/msbuild/ILMerge.targets @@ -17,7 +17,7 @@ - + diff --git a/msbuild/Makefile b/msbuild/Makefile index 436e22a2c71c..c676c92ca83a 100644 --- a/msbuild/Makefile +++ b/msbuild/Makefile @@ -137,7 +137,7 @@ endif # I haven't found a way to execute ilrepack.exe on .NET (it will probably have to be built for .NET), so run it using Mono. .build-stamp: $(ALL_SOURCES) - $(Q) $(DOTNET) build "/bl:$@.binlog" $(XBUILD_VERBOSITY) + $(Q) $(DOTNET) build "/bl:$@.binlog" $(XBUILD_VERBOSITY) /p:NuGetPackageRoot=$(abspath $(TOP)/packages)/ $(Q) touch $@ # make all the target assemblies build when any of the sources have changed diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/GetAvailableDevices.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/GetAvailableDevices.cs index eda5380ab2d9..57ecb577164d 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/GetAvailableDevices.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/GetAvailableDevices.cs @@ -2,13 +2,13 @@ using System.IO; using System.Collections.Generic; using System.Linq; -using System.Text.Json; using System.Threading; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using Xamarin.Localization.MSBuild; +using Xamarin.MacDev.Models; using Xamarin.Messaging.Build.Client; using Xamarin.Utils; @@ -161,265 +161,218 @@ protected virtual async System.Threading.Tasks.Task ExecuteCtlAsync (par } } - async System.Threading.Tasks.Task ExecuteCtlToJsonAsync (params string [] args) - { - var json = await ExecuteCtlAsync (args); - var options = new JsonDocumentOptions { - AllowTrailingCommas = true, - CommentHandling = JsonCommentHandling.Skip, - }; - return JsonDocument.Parse (string.IsNullOrEmpty (json) ? "{}" : json, options); - } - async System.Threading.Tasks.Task> RunDeviceCtlAsync () { - var doc = await ExecuteCtlToJsonAsync ("devicectl", "list", "devices"); - var array = doc.FindProperty ("result", "devices")?.EnumerateIfArray (); + var json = await ExecuteCtlAsync ("devicectl", "list", "devices"); var rv = new List (); - if (array is not null) { - foreach (var device in array) { - var name = device.GetStringPropertyOrEmpty ("deviceProperties", "name"); - var udid = device.GetStringPropertyOrEmpty ("hardwareProperties", "udid"); - var identifier = device.GetStringPropertyOrEmpty ("identifier"); - - var deviceProperties = device.GetNullableProperty ("deviceProperties"); - var buildVersion = deviceProperties.GetStringPropertyOrEmpty ("osBuildUpdate"); - var productVersion = deviceProperties.GetStringPropertyOrEmpty ("osVersionNumber"); - - var hardwareProperties = device.GetNullableProperty ("hardwareProperties"); - var deviceClass = hardwareProperties.GetStringPropertyOrEmpty ("deviceType"); - var hardwareModel = hardwareProperties.GetStringPropertyOrEmpty ("hardwareModel"); - var hardwarePlatform = hardwareProperties.GetStringPropertyOrEmpty ("platform"); - var productType = hardwareProperties.GetStringPropertyOrEmpty ("productType"); - var serialNumber = hardwareProperties.GetStringPropertyOrEmpty ("serialNumber"); - var uniqueChipID = hardwareProperties.GetUInt64Property ("ecid"); - - var cpuType = hardwareProperties.GetNullableProperty ("cpuType"); - var cpuArchitecture = cpuType.GetStringPropertyOrEmpty ("name"); - - var connectionProperties = device.GetNullableProperty ("connectionProperties"); - var transportType = connectionProperties.GetStringPropertyOrEmpty ("transportType"); - var pairingState = connectionProperties.GetStringPropertyOrEmpty ("pairingState"); - - if (string.IsNullOrEmpty (udid)) - udid = identifier; - - if (string.IsNullOrEmpty (udid)) - udid = $""; - - var item = new TaskItem (udid); - item.SetMetadata ("Name", name); - item.SetMetadata ("BuildVersion", buildVersion); - item.SetMetadata ("DeviceClass", deviceClass); - item.SetMetadata ("HardwareModel", hardwareModel); - item.SetMetadata ("Platform", hardwarePlatform); - item.SetMetadata ("ProductType", productType); - item.SetMetadata ("SerialNumber", serialNumber); - item.SetMetadata ("UniqueChipID", uniqueChipID?.ToString () ?? string.Empty); - item.SetMetadata ("CPUArchitecture", cpuArchitecture); - item.SetMetadata ("TransportType", transportType); - item.SetMetadata ("PairingState", pairingState); - - // we provide the following metadata for both simulator and device - item.SetMetadata ("Description", name); - item.SetMetadata ("Type", "Device"); - item.SetMetadata ("OSVersion", productVersion); - item.SetMetadata ("UDID", udid); - - // compute the platform and runtime identifier - var runtimeIdentifier = ""; - ApplePlatform platform; - IPhoneDeviceType deviceType; - var discardedReason = ""; - switch (deviceClass.ToLowerInvariant ()) { - case "iphone": - case "ipod": - runtimeIdentifier += "ios-"; - platform = ApplePlatform.iOS; - deviceType = IPhoneDeviceType.IPhone; - break; - case "ipad": - runtimeIdentifier += "ios-"; - platform = ApplePlatform.iOS; - deviceType = IPhoneDeviceType.IPad; - break; - case "appletv": - runtimeIdentifier += "tvos-"; - platform = ApplePlatform.TVOS; - deviceType = IPhoneDeviceType.TV; + + // Use shared parser from Xamarin.MacDev for devicectl JSON extraction + var parsedDevices = DeviceCtlOutputParser.ParseDevices (json); + + foreach (var device in parsedDevices) { + var udid = device.Udid; + + if (string.IsNullOrEmpty (udid)) + udid = $""; + + var item = new TaskItem (udid); + item.SetMetadata ("Name", device.Name); + item.SetMetadata ("BuildVersion", device.BuildVersion); + item.SetMetadata ("DeviceClass", device.DeviceClass); + item.SetMetadata ("HardwareModel", device.HardwareModel); + item.SetMetadata ("Platform", device.Platform); + item.SetMetadata ("ProductType", device.ProductType); + item.SetMetadata ("SerialNumber", device.SerialNumber); + item.SetMetadata ("UniqueChipID", device.UniqueChipID?.ToString () ?? string.Empty); + item.SetMetadata ("CPUArchitecture", device.CpuArchitecture); + item.SetMetadata ("TransportType", device.TransportType); + item.SetMetadata ("PairingState", device.PairingState); + + // we provide the following metadata for both simulator and device + item.SetMetadata ("Description", device.Name); + item.SetMetadata ("Type", "Device"); + item.SetMetadata ("OSVersion", device.OSVersion); + item.SetMetadata ("UDID", udid); + + // compute the platform and runtime identifier + var runtimeIdentifier = ""; + ApplePlatform platform; + IPhoneDeviceType deviceType; + var discardedReason = ""; + switch (device.DeviceClass.ToLowerInvariant ()) { + case "iphone": + case "ipod": + runtimeIdentifier += "ios-"; + platform = ApplePlatform.iOS; + deviceType = IPhoneDeviceType.IPhone; + break; + case "ipad": + runtimeIdentifier += "ios-"; + platform = ApplePlatform.iOS; + deviceType = IPhoneDeviceType.IPad; + break; + case "appletv": + runtimeIdentifier += "tvos-"; + platform = ApplePlatform.TVOS; + deviceType = IPhoneDeviceType.TV; + break; + case "applewatch": + case "visionos": + default: + platform = ApplePlatform.None; + deviceType = IPhoneDeviceType.NotSet; + discardedReason = $"'{device.DeviceClass}' devices are not supported"; + break; + } + + if (string.IsNullOrEmpty (discardedReason)) { + switch (device.CpuArchitecture.ToLowerInvariant ()) { + case "arm64": + case "arm64e": + // arm64 and arm64e are both arm64 for our purposes + runtimeIdentifier += "arm64"; break; - case "applewatch": - case "visionos": default: - platform = ApplePlatform.None; - deviceType = IPhoneDeviceType.NotSet; - discardedReason = $"'{deviceClass}' devices are not supported"; + discardedReason = $"Unknown CPU architecture '{device.CpuArchitecture}'"; break; } + } - if (string.IsNullOrEmpty (discardedReason)) { - switch (cpuArchitecture.ToLowerInvariant ()) { - case "arm64": - case "arm64e": - // arm64 and arm64e are both arm64 for our purposes - runtimeIdentifier += "arm64"; - break; - default: - discardedReason = $"Unknown CPU architecture '{cpuArchitecture}'"; - break; - } - } - - Version.TryParse (productVersion, out var minimumOSVersion); - var maximumOSVersion = new Version (65535, 255, 255); + Version.TryParse (device.OSVersion, out var minimumOSVersion); + var maximumOSVersion = new Version (65535, 255, 255); - rv.Add (new DeviceInfo (item, [runtimeIdentifier], platform, deviceType, minimumOSVersion ?? new Version (0, 0), maximumOSVersion, discardedReason)); - } + rv.Add (new DeviceInfo (item, [runtimeIdentifier], platform, deviceType, minimumOSVersion ?? new Version (0, 0), maximumOSVersion, discardedReason)); } return rv; } async System.Threading.Tasks.Task> RunSimCtlAsync () { - var doc = await ExecuteCtlToJsonAsync ("simctl", "list", "--json"); + var json = await ExecuteCtlAsync ("simctl", "list", "--json"); var rv = new List (); - var runtimes = new Dictionary (); - if (doc.TryGetProperty ("runtimes", out var runtimesElement)) { - foreach (var runtime in runtimesElement.EnumerateIfArray ()) { - var name = runtime.GetStringProperty ("identifier") ?? string.Empty; - runtimes [name] = runtime; - } - } - - var deviceTypes = new Dictionary (); - if (doc.TryGetProperty ("devicetypes", out var deviceTypesElement)) { - foreach (var deviceType in deviceTypesElement.EnumerateIfArray ()) { - var name = deviceType.GetStringProperty ("identifier") ?? string.Empty; - deviceTypes [name] = deviceType; - } - } + // Use shared parser from Xamarin.MacDev for device and runtime extraction + var parsedDevices = SimctlOutputParser.ParseDevices (json); + var parsedRuntimes = SimctlOutputParser.ParseRuntimes (json); + + // Index runtimes by identifier for SupportedArchitectures lookup + var runtimesByIdentifier = new Dictionary (); + foreach (var rt in parsedRuntimes) + runtimesByIdentifier [rt.Identifier] = rt; + + // Use shared parser for devicetypes (productFamily, min/maxRuntime) + var parsedDeviceTypes = SimctlOutputParser.ParseDeviceTypes (json); + var deviceTypes = new Dictionary (); + foreach (var dt in parsedDeviceTypes) + deviceTypes [dt.Identifier] = dt; + + foreach (var device in parsedDevices) { + var hasRuntime = runtimesByIdentifier.TryGetValue (device.RuntimeIdentifier, out var runtimeInfo); + var runtimePlatform = hasRuntime ? runtimeInfo!.Platform : string.Empty; + var runtimeVersion = hasRuntime ? runtimeInfo!.Version : device.OSVersion; + var supportedArchitectures = hasRuntime ? runtimeInfo!.SupportedArchitectures : new List (); + + var item = new TaskItem (device.Udid); + item.SetMetadata ("Runtime", device.RuntimeIdentifier); + item.SetMetadata ("IsAvailable", device.IsAvailable.ToString ()); + item.SetMetadata ("AvailabilityError", device.AvailabilityError); + item.SetMetadata ("DeviceTypeIdentifier", device.DeviceTypeIdentifier); + item.SetMetadata ("State", device.State); + item.SetMetadata ("Name", device.Name); + item.SetMetadata ("SupportedArchitectures", string.Join (",", supportedArchitectures)); + + // we provide the following metadata for both simulator and device + item.SetMetadata ("Description", device.Name); + item.SetMetadata ("Type", "Simulator"); + item.SetMetadata ("OSVersion", runtimeVersion); + item.SetMetadata ("UDID", device.Udid); + + var discardedReason = ""; + var runtimeIdentifier = ""; + var runtimeIdentifiers = new List (); + if (device.IsAvailable) { + switch (runtimePlatform.ToLowerInvariant ()) { + case "ios": + runtimeIdentifier += "iossimulator-"; + break; + case "tvos": + runtimeIdentifier += "tvossimulator-"; + break; + default: + discardedReason = $"'{runtimePlatform}' simulators are not supported"; + break; + } - if (doc.TryGetProperty ("devices", out var devicesElement)) { - foreach (var runtime in devicesElement.EnumerateObject ()) { - var runtimeName = runtime.Name; - var hasRuntime = runtimes.TryGetValue (runtimeName, out var runtimeElement); - var runtimePlatform = hasRuntime ? runtimeElement.GetStringProperty ("platform") ?? string.Empty : string.Empty; - var runtimeVersion = hasRuntime ? runtimeElement.GetStringProperty ("version") ?? string.Empty : string.Empty; - var supportedArchitectures = hasRuntime ? runtimeElement.GetProperty ("supportedArchitectures").EnumerateIfArray ().Select (v => v.GetString () ?? "") : Enumerable.Empty (); - foreach (var element in runtime.Value.EnumerateIfArray ()) { - var udid = element.GetStringProperty ("udid") ?? string.Empty; - var isAvailable = element.GetBooleanProperty ("isAvailable") ?? false; - var availabilityError = element.GetStringProperty ("availabilityError") ?? string.Empty; - var deviceTypeIdentifier = element.GetStringProperty ("deviceTypeIdentifier") ?? string.Empty; - var state = element.GetStringProperty ("state") ?? string.Empty; - var name = element.GetStringProperty ("name") ?? string.Empty; - - var item = new TaskItem (udid); - item.SetMetadata ("Runtime", runtimeName); - item.SetMetadata ("IsAvailable", isAvailable.ToString ()); - item.SetMetadata ("AvailabilityError", availabilityError); - item.SetMetadata ("DeviceTypeIdentifier", deviceTypeIdentifier); - item.SetMetadata ("State", state); - item.SetMetadata ("Name", name); - item.SetMetadata ("SupportedArchitectures", string.Join (",", supportedArchitectures)); - - // we provide the following metadata for both simulator and device - item.SetMetadata ("Description", name); - item.SetMetadata ("Type", "Simulator"); - item.SetMetadata ("OSVersion", runtimeVersion); - item.SetMetadata ("UDID", udid); - - var discardedReason = ""; - var runtimeIdentifier = ""; - var runtimeIdentifiers = new List (); - if (isAvailable) { - switch (runtimePlatform.ToLowerInvariant ()) { - case "ios": - runtimeIdentifier += "iossimulator-"; + // pick the first architecture as the simulator architecture + if (string.IsNullOrEmpty (discardedReason)) { + foreach (var arch in supportedArchitectures) { + switch (arch.ToLowerInvariant ()) { + case "x64": + case "x86_64": + runtimeIdentifiers.Add (runtimeIdentifier + "x64"); break; - case "tvos": - runtimeIdentifier += "tvossimulator-"; + case "arm64": + runtimeIdentifiers.Add (runtimeIdentifier + "arm64"); + if (!CanRunArm64) + discardedReason = $"Can't run an arm64 simulator on an x86_64 macOS desktop."; break; default: - discardedReason = $"'{runtimePlatform}' simulators are not supported"; + discardedReason = $"Unknown CPU architecture '{arch}'"; break; } - - // pick the first architecture as the simulator architecture - if (string.IsNullOrEmpty (discardedReason)) { - foreach (var arch in supportedArchitectures) { - switch (arch.ToLowerInvariant ()) { - case "x64": - case "x86_64": - runtimeIdentifiers.Add (runtimeIdentifier + "x64"); - break; - case "arm64": - runtimeIdentifiers.Add (runtimeIdentifier + "arm64"); - if (!CanRunArm64) - discardedReason = $"Can't run an arm64 simulator on an x86_64 macOS desktop."; - break; - default: - discardedReason = $"Unknown CPU architecture '{arch}'"; - break; - } - } - } - } else { - discardedReason = $"Device is not available: {availabilityError}"; } + } + } else { + discardedReason = $"Device is not available: {device.AvailabilityError}"; + } - var platformName = runtimeName.Replace ("com.apple.CoreSimulator.SimRuntime.", "").Split ('-') [0]; - var platform = ApplePlatform.None; - if (string.IsNullOrEmpty (discardedReason)) { - switch (platformName.ToLowerInvariant ()) { - case "ios": - platform = ApplePlatform.iOS; - break; - case "tvos": - platform = ApplePlatform.TVOS; - break; - case "watchos": - case "visionos": - default: - discardedReason = $"'{platformName}' simulators are not supported"; - break; - } - } - var deviceType = IPhoneDeviceType.NotSet; - var minimumOSVersion = new Version (0, 0); - var maximumOSVersion = new Version (65535, 255, 255); - if (string.IsNullOrEmpty (discardedReason)) { - if (deviceTypes.TryGetValue (deviceTypeIdentifier, out var deviceTypeElement)) { - var productFamily = deviceTypeElement.GetStringProperty ("productFamily") ?? string.Empty; - switch (productFamily.ToLowerInvariant ()) { - case "iphone": - case "ipod": - deviceType = IPhoneDeviceType.IPhone; - break; - case "ipad": - deviceType = IPhoneDeviceType.IPad; - break; - case "appletv": - case "apple tv": - deviceType = IPhoneDeviceType.TV; - break; - default: - discardedReason = $"Unknown product family '{productFamily}'"; - break; - } - if (Version.TryParse (deviceTypeElement.GetStringProperty ("minRuntimeVersionString"), out var parsedMinimumOSVersion)) - minimumOSVersion = parsedMinimumOSVersion; - if (Version.TryParse (deviceTypeElement.GetStringProperty ("maxRuntimeVersionString"), out var parsedMaximumOSVersion)) - maximumOSVersion = parsedMaximumOSVersion; - } else { - discardedReason = $"Unknown device type identifier '{deviceTypeIdentifier}'"; - } + var platform = ApplePlatform.None; + if (string.IsNullOrEmpty (discardedReason)) { + switch (device.Platform.ToLowerInvariant ()) { + case "ios": + platform = ApplePlatform.iOS; + break; + case "tvos": + platform = ApplePlatform.TVOS; + break; + case "watchos": + case "visionos": + default: + discardedReason = $"'{device.Platform}' simulators are not supported"; + break; + } + } + var deviceType = IPhoneDeviceType.NotSet; + var minimumOSVersion = new Version (0, 0); + var maximumOSVersion = new Version (65535, 255, 255); + if (string.IsNullOrEmpty (discardedReason)) { + if (deviceTypes.TryGetValue (device.DeviceTypeIdentifier, out var deviceTypeInfo)) { + switch (deviceTypeInfo.ProductFamily.ToLowerInvariant ()) { + case "iphone": + case "ipod": + deviceType = IPhoneDeviceType.IPhone; + break; + case "ipad": + deviceType = IPhoneDeviceType.IPad; + break; + case "appletv": + case "apple tv": + deviceType = IPhoneDeviceType.TV; + break; + default: + discardedReason = $"Unknown product family '{deviceTypeInfo.ProductFamily}'"; + break; } - - rv.Add (new DeviceInfo (item, runtimeIdentifiers, platform, deviceType, minimumOSVersion, maximumOSVersion, discardedReason)); + if (Version.TryParse (deviceTypeInfo.MinRuntimeVersionString, out var parsedMinimumOSVersion)) + minimumOSVersion = parsedMinimumOSVersion; + if (Version.TryParse (deviceTypeInfo.MaxRuntimeVersionString, out var parsedMaximumOSVersion)) + maximumOSVersion = parsedMaximumOSVersion; + } else { + discardedReason = $"Unknown device type identifier '{device.DeviceTypeIdentifier}'"; } } + + rv.Add (new DeviceInfo (item, runtimeIdentifiers, platform, deviceType, minimumOSVersion, maximumOSVersion, discardedReason)); } return rv; } diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinTask.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinTask.cs index 603f85252b07..1313a4d5e902 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinTask.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinTask.cs @@ -352,24 +352,24 @@ protected static string GetExecutable (List arguments, string toolName, } #region Xamarin.MacDev.ICustomLogger - void ICustomLogger.LogError (string message, Exception ex) + void ICustomLogger.LogError (string message, Exception? ex) { Log.LogError (message); if (ex is not null) Log.LogErrorFromException (ex); } - void ICustomLogger.LogWarning (string messageFormat, params object [] args) + void ICustomLogger.LogWarning (string messageFormat, params object? [] args) { Log.LogWarning (messageFormat, args); } - void ICustomLogger.LogInfo (string messageFormat, object [] args) + void ICustomLogger.LogInfo (string messageFormat, params object? [] args) { Log.LogMessage (MessageImportance.Normal, messageFormat, args); } - void ICustomLogger.LogDebug (string messageFormat, params object [] args) + void ICustomLogger.LogDebug (string messageFormat, params object? [] args) { Log.LogMessage (MessageImportance.Low, messageFormat, args); } diff --git a/msbuild/Xamarin.MacDev.Tasks/Xamarin.MacDev.Tasks.csproj b/msbuild/Xamarin.MacDev.Tasks/Xamarin.MacDev.Tasks.csproj index 24caeb9ef41a..a61be2c501c3 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Xamarin.MacDev.Tasks.csproj +++ b/msbuild/Xamarin.MacDev.Tasks/Xamarin.MacDev.Tasks.csproj @@ -14,6 +14,7 @@ $(NoWarn);NU1701 $(NoWarn);MSB3277 $(NoWarn);8002 + $(NoWarn);CS0618 enable true diff --git a/tests/Makefile b/tests/Makefile index a43f5bfdc685..5313dfde1142 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -164,14 +164,14 @@ test-msbuild run-tests-msbuild: # Docs: https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-test#filter-option-details test-macdev-tests: export MSBUILD_EXE_PATH= test-macdev-tests: verify-system-vsmac-xcode-match - $(Q) $(DOTNET) test $(TOP)/tests/msbuild/Xamarin.MacDev.Tests/Xamarin.MacDev.Tests.csproj $(TEST_FILTER) + $(Q) $(DOTNET) test $(TOP)/tests/msbuild/Xamarin.MacDev.Tests/Xamarin.MacDev.Tests.csproj $(TEST_FILTER) /p:NuGetPackageRoot=$(abspath $(TOP)/packages)/ # Example TEST_FILTER: # TEST_FILTER="--filter:FullyQualifiedName~BuildMyCocoaApp" # Docs: https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-test#filter-option-details test-macdev-tasks: export MSBUILD_EXE_PATH= test-macdev-tasks: verify-system-vsmac-xcode-match - $(Q) $(DOTNET) test $(TOP)/tests/msbuild/Xamarin.MacDev.Tasks.Tests/Xamarin.MacDev.Tasks.Tests.csproj $(TEST_FILTER) + $(Q) $(DOTNET) test $(TOP)/tests/msbuild/Xamarin.MacDev.Tasks.Tests/Xamarin.MacDev.Tasks.Tests.csproj $(TEST_FILTER) /p:NuGetPackageRoot=$(abspath $(TOP)/packages)/ mac-test-package.zip: ifdef INCLUDE_MAC diff --git a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/GetAvailableDevicesTest.cs b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/GetAvailableDevicesTest.cs index beb8be0f356d..b8e71570aeb0 100644 --- a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/GetAvailableDevicesTest.cs +++ b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/GetAvailableDevicesTest.cs @@ -139,7 +139,7 @@ public void SimCtl1 () Assert.That (task.DiscardedDevices [1].ItemSpec, Is.EqualTo ("D4D95709-144A-4CAA-8469-89566EC1C935"), "Discarded Device 2 mismatch."); Assert.That (task.DiscardedDevices [1].GetMetadata ("Description"), Is.EqualTo ("iPhone 17 Pro"), "Discarded Device 2 Name mismatch."); - Assert.That (task.DiscardedDevices [1].GetMetadata ("OSVersion"), Is.EqualTo (""), "Discarded Device 2 OSVersion mismatch."); + Assert.That (task.DiscardedDevices [1].GetMetadata ("OSVersion"), Is.EqualTo ("26.0"), "Discarded Device 2 OSVersion mismatch."); Assert.That (task.DiscardedDevices [1].GetMetadata ("UDID"), Is.EqualTo ("D4D95709-144A-4CAA-8469-89566EC1C935"), "Discarded Device 2 UDID mismatch."); Assert.That (task.DiscardedDevices [1].GetMetadata ("RuntimeIdentifier"), Is.EqualTo (""), "Discarded Device 2 RuntimeIdentifier mismatch."); Assert.That (task.DiscardedDevices [1].GetMetadata ("DiscardedReason"), Is.EqualTo ("Device is not available: runtime profile not found using \"System\" match policy"), "Discarded Device 2 reason mismatch."); @@ -216,7 +216,7 @@ public void Ctl1 () Assert.That (task.DiscardedDevices [2].ItemSpec, Is.EqualTo ("D4D95709-144A-4CAA-8469-89566EC1C935"), "Discarded Device 3 UDID mismatch."); Assert.That (task.DiscardedDevices [2].GetMetadata ("Description"), Is.EqualTo ("iPhone 17 Pro"), "Discarded Device 3 Name mismatch."); - Assert.That (task.DiscardedDevices [2].GetMetadata ("OSVersion"), Is.EqualTo (""), "Discarded Device 3 OSVersion mismatch."); + Assert.That (task.DiscardedDevices [2].GetMetadata ("OSVersion"), Is.EqualTo ("26.0"), "Discarded Device 3 OSVersion mismatch."); Assert.That (task.DiscardedDevices [2].GetMetadata ("UDID"), Is.EqualTo ("D4D95709-144A-4CAA-8469-89566EC1C935"), "Discarded Device 3 UDID mismatch."); Assert.That (task.DiscardedDevices [2].GetMetadata ("RuntimeIdentifier"), Is.EqualTo (""), "Discarded Device 3 RuntimeIdentifier mismatch."); Assert.That (task.DiscardedDevices [2].GetMetadata ("DiscardedReason"), Is.EqualTo ("Device is not available: runtime profile not found using \"System\" match policy"), "Discarded Device 3 reason mismatch."); @@ -306,7 +306,7 @@ public void Ctl1_iPhone () Assert.That (task.DiscardedDevices [2].ItemSpec, Is.EqualTo ("D4D95709-144A-4CAA-8469-89566EC1C935"), "Discarded Device 3 UDID mismatch."); Assert.That (task.DiscardedDevices [2].GetMetadata ("Description"), Is.EqualTo ("iPhone 17 Pro"), "Discarded Device 3 Name mismatch."); - Assert.That (task.DiscardedDevices [2].GetMetadata ("OSVersion"), Is.EqualTo (""), "Discarded Device 3 OSVersion mismatch."); + Assert.That (task.DiscardedDevices [2].GetMetadata ("OSVersion"), Is.EqualTo ("26.0"), "Discarded Device 3 OSVersion mismatch."); Assert.That (task.DiscardedDevices [2].GetMetadata ("UDID"), Is.EqualTo ("D4D95709-144A-4CAA-8469-89566EC1C935"), "Discarded Device 3 UDID mismatch."); Assert.That (task.DiscardedDevices [2].GetMetadata ("RuntimeIdentifier"), Is.EqualTo (""), "Discarded Device 3 RuntimeIdentifier mismatch."); Assert.That (task.DiscardedDevices [2].GetMetadata ("DiscardedReason"), Is.EqualTo ("Device is not available: runtime profile not found using \"System\" match policy"), "Discarded Device 3 reason mismatch."); @@ -393,7 +393,7 @@ public void Ctl1_iPad () Assert.That (task.DiscardedDevices [4].ItemSpec, Is.EqualTo ("D4D95709-144A-4CAA-8469-89566EC1C935"), "Discarded Device 5 ItemSpec mismatch."); Assert.That (task.DiscardedDevices [4].GetMetadata ("Description"), Is.EqualTo ("iPhone 17 Pro"), "Discarded Device 5 Description mismatch."); - Assert.That (task.DiscardedDevices [4].GetMetadata ("OSVersion"), Is.EqualTo (""), "Discarded Device 5 OSVersion mismatch."); + Assert.That (task.DiscardedDevices [4].GetMetadata ("OSVersion"), Is.EqualTo ("26.0"), "Discarded Device 5 OSVersion mismatch."); Assert.That (task.DiscardedDevices [4].GetMetadata ("UDID"), Is.EqualTo ("D4D95709-144A-4CAA-8469-89566EC1C935"), "Discarded Device 5 UDID mismatch."); Assert.That (task.DiscardedDevices [4].GetMetadata ("RuntimeIdentifier"), Is.EqualTo (""), "Discarded Device 5 RuntimeIdentifier mismatch."); Assert.That (task.DiscardedDevices [4].GetMetadata ("DiscardedReason"), Is.EqualTo ("Device is not available: runtime profile not found using \"System\" match policy"), "Discarded Device 5 reason mismatch."); @@ -487,7 +487,7 @@ public void Ctl1_OSVersion () Assert.That (task.DiscardedDevices [3].ItemSpec, Is.EqualTo ("D4D95709-144A-4CAA-8469-89566EC1C935"), "Discarded Device 4 UDID mismatch."); Assert.That (task.DiscardedDevices [3].GetMetadata ("Description"), Is.EqualTo ("iPhone 17 Pro"), "Discarded Device 4 Name mismatch."); - Assert.That (task.DiscardedDevices [3].GetMetadata ("OSVersion"), Is.EqualTo (""), "Discarded Device 4 OSVersion mismatch."); + Assert.That (task.DiscardedDevices [3].GetMetadata ("OSVersion"), Is.EqualTo ("26.0"), "Discarded Device 4 OSVersion mismatch."); Assert.That (task.DiscardedDevices [3].GetMetadata ("UDID"), Is.EqualTo ("D4D95709-144A-4CAA-8469-89566EC1C935"), "Discarded Device 4 UDID mismatch."); Assert.That (task.DiscardedDevices [3].GetMetadata ("RuntimeIdentifier"), Is.EqualTo (""), "Discarded Device 4 RuntimeIdentifier mismatch."); Assert.That (task.DiscardedDevices [3].GetMetadata ("DiscardedReason"), Is.EqualTo ("Device is not available: runtime profile not found using \"System\" match policy"), "Discarded Device 4 reason mismatch."); @@ -573,7 +573,7 @@ public void Ctl1_RuntimeIdentifier () Assert.That (task.DiscardedDevices [2].ItemSpec, Is.EqualTo ("D4D95709-144A-4CAA-8469-89566EC1C935"), "Discarded Device 3 UDID mismatch."); Assert.That (task.DiscardedDevices [2].GetMetadata ("Description"), Is.EqualTo ("iPhone 17 Pro"), "Discarded Device 3 Name mismatch."); - Assert.That (task.DiscardedDevices [2].GetMetadata ("OSVersion"), Is.EqualTo (""), "Discarded Device 3 OSVersion mismatch."); + Assert.That (task.DiscardedDevices [2].GetMetadata ("OSVersion"), Is.EqualTo ("26.0"), "Discarded Device 3 OSVersion mismatch."); Assert.That (task.DiscardedDevices [2].GetMetadata ("UDID"), Is.EqualTo ("D4D95709-144A-4CAA-8469-89566EC1C935"), "Discarded Device 3 UDID mismatch."); Assert.That (task.DiscardedDevices [2].GetMetadata ("RuntimeIdentifier"), Is.EqualTo (""), "Discarded Device 3 RuntimeIdentifier mismatch."); Assert.That (task.DiscardedDevices [2].GetMetadata ("DiscardedReason"), Is.EqualTo ("Device is not available: runtime profile not found using \"System\" match policy"), "Discarded Device 3 reason mismatch."); @@ -651,7 +651,7 @@ public void Ctl1_AppleTV () Assert.That (task.DiscardedDevices [4].ItemSpec, Is.EqualTo ("D4D95709-144A-4CAA-8469-89566EC1C935"), "Discarded Device 5 ItemSpec mismatch."); Assert.That (task.DiscardedDevices [4].GetMetadata ("Description"), Is.EqualTo ("iPhone 17 Pro"), "Discarded Device 5 Description mismatch."); - Assert.That (task.DiscardedDevices [4].GetMetadata ("OSVersion"), Is.EqualTo (""), "Discarded Device 5 OSVersion mismatch."); + Assert.That (task.DiscardedDevices [4].GetMetadata ("OSVersion"), Is.EqualTo ("26.0"), "Discarded Device 5 OSVersion mismatch."); Assert.That (task.DiscardedDevices [4].GetMetadata ("UDID"), Is.EqualTo ("D4D95709-144A-4CAA-8469-89566EC1C935"), "Discarded Device 5 UDID mismatch."); Assert.That (task.DiscardedDevices [4].GetMetadata ("RuntimeIdentifier"), Is.EqualTo (""), "Discarded Device 5 RuntimeIdentifier mismatch."); Assert.That (task.DiscardedDevices [4].GetMetadata ("DiscardedReason"), Is.EqualTo ("Device is not available: runtime profile not found using \"System\" match policy"), "Discarded Device 5 reason mismatch.");