diff --git a/docs/build-apps/build-items.md b/docs/build-apps/build-items.md
index e8f6b01fb402..8b2bdbb33562 100644
--- a/docs/build-apps/build-items.md
+++ b/docs/build-apps/build-items.md
@@ -9,6 +9,27 @@ ms.date: 09/19/2024
Build items control how .NET for iOS, Mac Catalyst, macOS, and tvOS
application or library projects are built.
+## AlternateAppIcon
+
+The `AlternateAppIcon` item group can be used to specify alternate app icons.
+
+The `Include` metadata must point to the filename of an `.appiconset` (for
+iOS, macOS and Mac Catalyst) or `.brandassets` (for tvOS) image resource
+inside an asset catalog.
+
+Example:
+
+```xml
+
+
+
+
+```
+
+See also:
+* The [AppIcon](build-properties.md#AppIcon) property.
+* The [IncludeAllAppIcons](build-properties.md#AppIcon) property.
+
## PartialAppManifest
`PartialAppManifest` can be used to add additional partial app manifests that
diff --git a/docs/build-apps/build-properties.md b/docs/build-apps/build-properties.md
index 9c3ae3030c6d..7b4dd4fa40a0 100644
--- a/docs/build-apps/build-properties.md
+++ b/docs/build-apps/build-properties.md
@@ -11,12 +11,53 @@ MSBuild properties control the behavior of the
They're specified within the project file, for example **MyApp.csproj**, within
an MSBuild PropertyGroup.
+## AppIcon
+
+The `AppIcon` item group can be used to specify an app icon for the app.
+
+The value of the property must point to the filename of an `.appiconset` (for
+iOS, macOS and Mac Catalyst) or `.brandassets` (for tvOS) image resource
+inside an asset catalog.
+
+Example:
+
+```xml
+
+
+ MyAppIcon
+
+```
+
+See also:
+
+* The [AlternateAppIcon](build-items.md#AlternateAppIcon) item group.
+* The [IncludeAllAppIcons](#IncludeAllAppIcons) property.
+
## DittoPath
The full path to the `ditto` executable.
The default behavior is to use `/usr/bin/ditto`.
+## IncludeAllAppIcons
+
+Set the `IncludeAllAppIcons` property to true to automatically include all app
+icons from all asset catalogs in the app.
+
+Example:
+
+```xml
+
+ true
+
+```
+
+See also:
+
+* The [AlternateAppIcon](build-items.md#AlternateAppIcon) item group.
+* The [AppIcon](#AppIcon) property.
+>>>>>>> 085031cbc4 ([msbuild] Add support for inlucing alternate app icons in the compiled asset catalog.)
+
## MaciOSPrepareForBuildDependsOn
A semi-colon delimited property that can be used to extend the build process.
diff --git a/msbuild/Xamarin.Localization.MSBuild/MSBStrings.resx b/msbuild/Xamarin.Localization.MSBuild/MSBStrings.resx
index ab219c061e30..e1c3c99f51e4 100644
--- a/msbuild/Xamarin.Localization.MSBuild/MSBStrings.resx
+++ b/msbuild/Xamarin.Localization.MSBuild/MSBStrings.resx
@@ -1576,6 +1576,36 @@
SupportedOSPlatformVersion: don't translate (it's the name of an MSBuild property)
+
+ Can't find the AlternateAppIcon '{0}' among the image resources.
+
+ * AlternateAppIcon: don't translate (it's the name of an MSBuild property)
+
+
+
+
+ The image resource '{0}' is specified as both 'AppIcon' and 'AlternateAppIcon'
+
+ * AppIcon: don't translate (it's the name of an MSBuild property)
+ * AlternateAppIcon: don't translate (it's the name of an MSBuild property)
+
+
+
+
+ Can't specify both 'XSAppIconAssets' in the Info.plist and 'AppIcon' in the project file. Please select one or the other.
+
+ * XSAppIconAssets: don't translate (it's the name of an MSBuild property)
+ * AppIcon: don't translate (it's the name of an MSBuild property)
+
+
+
+
+ Can't find the AppIcon '{0}' among the image resources.
+
+ * AppIcon: don't translate (it's the name of an MSBuild property)
+
+
+
The source '{0}' does not exist.
{0}: path to a file or a directory
@@ -1589,6 +1619,7 @@
+
Adding reference to Xcode project output: '{0}'. The '%(CreateNativeReference)' metadata can be set to 'false' to opt out of this behavior.
diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/ACTool.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/ACTool.cs
index 959bade4fed7..c4f001befef9 100644
--- a/msbuild/Xamarin.MacDev.Tasks/Tasks/ACTool.cs
+++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/ACTool.cs
@@ -13,13 +13,18 @@
namespace Xamarin.MacDev.Tasks {
public class ACTool : XcodeCompilerToolTask, ICancelableTask {
- ITaskItem? partialAppManifest;
string? outputSpecs;
+ string? partialAppManifestPath;
#region Inputs
public string AccentColor { get; set; } = string.Empty;
+ public ITaskItem [] AlternateAppIcons { get; set; } = Array.Empty ();
+
+ // The name of an app icon
+ public string AppIcon { get; set; } = string.Empty;
+
public string DeviceModel { get; set; } = string.Empty;
public string DeviceOSVersion { get; set; } = string.Empty;
@@ -29,6 +34,8 @@ public class ACTool : XcodeCompilerToolTask, ICancelableTask {
[Required]
public ITaskItem [] ImageAssets { get; set; } = Array.Empty ();
+ public bool IncludeAllAppIcons { get; set; }
+
public bool IsWatchApp { get; set; }
[Required]
@@ -46,6 +53,10 @@ public class ACTool : XcodeCompilerToolTask, ICancelableTask {
#endregion
+ // ,appiconset on iOS, macOS and Mac Catalyst
+ // .brandassets on tvOS
+ HashSet appIconsInAssets = new ();
+
protected override string DefaultBinDir {
get { return DeveloperRootBinDir; }
}
@@ -64,6 +75,11 @@ protected override void AppendCommandLineArguments (IDictionary
{
var assetDirs = new HashSet (items.Select (x => BundleResource.GetVirtualProjectPath (ProjectDir, x, !string.IsNullOrEmpty (SessionId))));
+ if (!string.IsNullOrEmpty (XSAppIconAssets) && !string.IsNullOrEmpty (AppIcon)) {
+ Log.LogError (MSBStrings.E7129 /* Can't specify both 'XSAppIconAssets' in the Info.plist and 'AppIcon' in the project file. Please select one or the other. */);
+ return;
+ }
+
if (!string.IsNullOrEmpty (XSAppIconAssets)) {
int index = XSAppIconAssets.IndexOf (".xcassets" + Path.DirectorySeparatorChar, StringComparison.Ordinal);
string? assetDir = null;
@@ -75,13 +91,6 @@ protected override void AppendCommandLineArguments (IDictionary
if (assetDirs is not null && assetDir is not null && assetDirs.Contains (assetDir)) {
var assetName = Path.GetFileNameWithoutExtension (rpath);
- if (PartialAppManifest is null && partialAppManifest is not null) {
- args.Add ("--output-partial-info-plist");
- args.AddQuoted (partialAppManifest.GetMetadata ("FullPath"));
-
- PartialAppManifest = partialAppManifest;
- }
-
args.Add ("--app-icon");
args.AddQuoted (assetName);
@@ -104,14 +113,6 @@ protected override void AppendCommandLineArguments (IDictionary
if (assetDirs is not null && assetDir is not null && assetDirs.Contains (assetDir)) {
var assetName = Path.GetFileNameWithoutExtension (rpath);
-
- if (PartialAppManifest is null && partialAppManifest is not null) {
- args.Add ("--output-partial-info-plist");
- args.AddQuoted (partialAppManifest.GetMetadata ("FullPath"));
-
- PartialAppManifest = partialAppManifest;
- }
-
args.Add ("--launch-image");
args.AddQuoted (assetName);
}
@@ -147,12 +148,42 @@ protected override void AppendCommandLineArguments (IDictionary
foreach (var targetDevice in GetTargetDevices ())
args.Add ("--target-device", targetDevice);
- args.Add ("--minimum-deployment-target", MinimumOSVersion);
+ if (!string.IsNullOrEmpty (MinimumOSVersion))
+ args.Add ("--minimum-deployment-target", MinimumOSVersion);
var platform = PlatformUtils.GetTargetPlatform (SdkPlatform, IsWatchApp);
if (platform is not null)
args.Add ("--platform", platform);
+
+ if (!string.IsNullOrEmpty (AppIcon)) {
+ if (!appIconsInAssets.Contains (AppIcon)) {
+ Log.LogError (MSBStrings.E7130 /* Can't find the AppIcon '{0}' among the image resources. */, AppIcon);
+ return;
+ }
+ args.Add ("--app-icon");
+ args.Add (AppIcon);
+ }
+
+ foreach (var alternate in AlternateAppIcons) {
+ var alternateAppIcon = alternate.ItemSpec!;
+ if (!appIconsInAssets.Contains (alternateAppIcon)) {
+ Log.LogError (MSBStrings.E7127 /* Can't find the AlternateAppIcon '{0}' among the image resources. */, alternateAppIcon);
+ return;
+ }
+ if (string.Equals (alternateAppIcon, AppIcon, StringComparison.OrdinalIgnoreCase)) {
+ Log.LogError (MSBStrings.E7128 /* The image resource '{0}' is specified as both 'AppIcon' and 'AlternateAppIcon' */, AppIcon);
+ return;
+ }
+ args.Add ("--alternate-app-icon");
+ args.Add (alternateAppIcon);
+ }
+
+ if (IncludeAllAppIcons)
+ args.Add ("--include-all-app-icons");
+
+ args.Add ("--output-partial-info-plist");
+ args.AddQuoted (Path.GetFullPath (partialAppManifestPath));
}
IEnumerable GetCompiledBundleResources (PDictionary output, string intermediateBundleDir)
@@ -309,6 +340,14 @@ public override bool Execute ()
var catalog = Path.GetDirectoryName (vpath);
path = Path.GetDirectoryName (path);
+ if (Platform == ApplePlatform.TVOS) {
+ if (path.EndsWith (".brandassets", StringComparison.OrdinalIgnoreCase))
+ appIconsInAssets.Add (Path.GetFileNameWithoutExtension (path));
+ } else {
+ if (path.EndsWith (".appiconset", StringComparison.OrdinalIgnoreCase))
+ appIconsInAssets.Add (Path.GetFileNameWithoutExtension (path));
+ }
+
// keep walking up the directory structure until we get to the .xcassets directory
while (!string.IsNullOrEmpty (catalog) && Path.GetExtension (catalog) != ".xcassets") {
catalog = Path.GetDirectoryName (catalog);
@@ -391,7 +430,8 @@ public override bool Execute ()
return !Log.HasLoggedErrors;
}
- partialAppManifest = new TaskItem (Path.Combine (intermediate, "partial-info.plist"));
+ partialAppManifestPath = Path.Combine (intermediate, "partial-info.plist");
+ PartialAppManifest = new TaskItem (partialAppManifestPath);
if (specs.Count > 0) {
outputSpecs = Path.Combine (intermediate, "output-specifications.plist");
@@ -400,12 +440,14 @@ public override bool Execute ()
Directory.CreateDirectory (intermediateBundleDir);
- // Note: Compile() will set the PartialAppManifest property if it is used...
if ((Compile (catalogs.ToArray (), intermediateBundleDir, manifest)) != 0)
return false;
- if (PartialAppManifest is not null && !File.Exists (PartialAppManifest.GetMetadata ("FullPath")))
- Log.LogError (MSBStrings.E0093, PartialAppManifest.GetMetadata ("FullPath"));
+ if (Log.HasLoggedErrors)
+ return false;
+
+ if (!File.Exists (Path.GetFullPath (partialAppManifestPath)))
+ Log.LogError (MSBStrings.E0093, Path.GetFullPath (partialAppManifestPath));
try {
var manifestOutput = PDictionary.FromFile (manifest.ItemSpec)!;
diff --git a/msbuild/Xamarin.Shared/Xamarin.Shared.targets b/msbuild/Xamarin.Shared/Xamarin.Shared.targets
index b49381d49a4c..957b0314b859 100644
--- a/msbuild/Xamarin.Shared/Xamarin.Shared.targets
+++ b/msbuild/Xamarin.Shared/Xamarin.Shared.targets
@@ -910,12 +910,15 @@ Copyright (C) 2018 Microsoft. All rights reserved.
ToolExe="$(ACToolExe)"
ToolPath="$(ACToolPath)"
AccentColor="$(AccentColor)"
+ AlternateAppIcons="@(AlternateAppIcon)"
+ AppIcon="$(AppIcon)"
BundleIdentifier="$(_BundleIdentifier)"
CLKComplicationGroup="$(_CLKComplicationGroup)"
DeviceModel="$(TargetDeviceModel)"
DeviceOSVersion="$(TargetDeviceOSVersion)"
EnableOnDemandResources="$(EnableOnDemandResources)"
ImageAssets="@(ImageAsset)"
+ IncludeAllAppIcons="$(IncludeAllAppIcons)"
MinimumOSVersion="$(_MinimumOSVersion)"
NSExtensionPointIdentifier="$(_NSExtensionPointIdentifier)"
OptimizePNGs="$(OptimizePNGs)"
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Contents.json
new file mode 100644
index 000000000000..53c1afb9cbae
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Contents.json
@@ -0,0 +1,74 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "filename" : "Icon16.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon64.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon128.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "512x512"
+ },
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "512x512"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon1024.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon1024.png
new file mode 100644
index 000000000000..49676158376a
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon1024.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon128.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon128.png
new file mode 100644
index 000000000000..1bdee23cd1ea
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon128.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon16.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon16.png
new file mode 100644
index 000000000000..2353e257d666
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon16.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon256.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon256.png
new file mode 100644
index 000000000000..6e63f80b06f7
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon256.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon32.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon32.png
new file mode 100644
index 000000000000..60699df6ee74
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon32.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon512.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon512.png
new file mode 100644
index 000000000000..290507f735d4
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon512.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon64.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon64.png
new file mode 100644
index 000000000000..d4b1df9315fb
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon64.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..08ef43149272
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon1280x768.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon1280x768.png
new file mode 100644
index 000000000000..d4d309750796
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..08ef43149272
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon1280x768.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon1280x768.png
new file mode 100644
index 000000000000..d4d309750796
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..08ef43149272
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon1280x768.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon1280x768.png
new file mode 100644
index 000000000000..d4d309750796
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..60cce20c2b25
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon400x240 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240 1.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240 1.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..60cce20c2b25
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon400x240 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240 1.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240 1.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..60cce20c2b25
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon400x240 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240 1.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240 1.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/Contents.json
new file mode 100644
index 000000000000..9b55b2086ce6
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/Contents.json
@@ -0,0 +1,32 @@
+{
+ "assets" : [
+ {
+ "filename" : "AppIcon-AppStore.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "1280x768"
+ },
+ {
+ "filename" : "AppIcon.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "400x240"
+ },
+ {
+ "filename" : "TopShelfImage.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image",
+ "size" : "1920x720"
+ },
+ {
+ "filename" : "TopShelfImageWide.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image-wide",
+ "size" : "2320x720"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Contents.json
new file mode 100644
index 000000000000..f24b1d62fe33
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-green-1920x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-green-3840x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-1920x720.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-1920x720.png
new file mode 100644
index 000000000000..30d5121714a0
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-1920x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-3840x1440.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-3840x1440.png
new file mode 100644
index 000000000000..a952d776d4e9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-3840x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
new file mode 100644
index 000000000000..dda2fc25910e
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-green-2320x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-green-4640x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-2320x720.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-2320x720.png
new file mode 100644
index 000000000000..97562c2f4b7d
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-2320x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-4640x1440.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-4640x1440.png
new file mode 100644
index 000000000000..388aa9f88e9d
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-4640x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Contents.json
new file mode 100644
index 000000000000..53c1afb9cbae
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Contents.json
@@ -0,0 +1,74 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "filename" : "Icon16.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon64.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon128.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "512x512"
+ },
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "512x512"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon1024.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon1024.png
new file mode 100644
index 000000000000..9174c989a9c8
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon1024.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon128.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon128.png
new file mode 100644
index 000000000000..9c878460b730
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon128.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon16.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon16.png
new file mode 100644
index 000000000000..35c074e65fce
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon16.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon256.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon256.png
new file mode 100644
index 000000000000..7195407ab597
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon256.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon32.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon32.png
new file mode 100644
index 000000000000..a488140938ed
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon32.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon512.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon512.png
new file mode 100644
index 000000000000..640e594251de
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon512.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon64.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon64.png
new file mode 100644
index 000000000000..4027b6bf9ada
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/AppIcons.appiconset/Icon64.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..a6e8f990e420
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-1280x768.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-1280x768.png
new file mode 100644
index 000000000000..459f3f221296
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..a6e8f990e420
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-1280x768.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-1280x768.png
new file mode 100644
index 000000000000..459f3f221296
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..a6e8f990e420
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-1280x768.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-1280x768.png
new file mode 100644
index 000000000000..459f3f221296
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..4d96e08a3eb1
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon240x400.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon240x400 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400 1.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400 1.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..4d96e08a3eb1
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon240x400.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon240x400 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400 1.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400 1.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..4d96e08a3eb1
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon240x400.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon240x400 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400 1.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400 1.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/Contents.json
new file mode 100644
index 000000000000..9b55b2086ce6
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/Contents.json
@@ -0,0 +1,32 @@
+{
+ "assets" : [
+ {
+ "filename" : "AppIcon-AppStore.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "1280x768"
+ },
+ {
+ "filename" : "AppIcon.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "400x240"
+ },
+ {
+ "filename" : "TopShelfImage.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image",
+ "size" : "1920x720"
+ },
+ {
+ "filename" : "TopShelfImageWide.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image-wide",
+ "size" : "2320x720"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Contents.json
new file mode 100644
index 000000000000..8e75d958b544
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1920x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-blue-3840x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-1920x720.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-1920x720.png
new file mode 100644
index 000000000000..024f0ba2fa2a
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-1920x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-3840x1440.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-3840x1440.png
new file mode 100644
index 000000000000..73af924f80a1
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-3840x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
new file mode 100644
index 000000000000..5050c073a89d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-2320x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-blue-4640x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-2320x720.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-2320x720.png
new file mode 100644
index 000000000000..a831d23a64e1
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-2320x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-4640x1440.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-4640x1440.png
new file mode 100644
index 000000000000..6a0278774e6e
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-4640x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Contents.json
new file mode 100644
index 000000000000..6ab7cce3ecd8
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Contents.json
@@ -0,0 +1,270 @@
+{
+ "images" : [
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1242x2688.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "2688h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2688x1242.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "2688h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon828x1792.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "1792h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1792x828.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "1792h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1668x2388.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "2388h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2388x1668.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "2388h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1125x2436.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "11.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "2436h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2436x1125.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "11.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "2436h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1668x2224.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "10.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "2224h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2224x1668.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "10.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "2224h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2048x2732.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "9.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "1366h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2732x2048.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "9.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "1366h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1242x2208.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "736h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2208x1242.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "736h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon750x1334.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "667h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x960.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x1136.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "retina4"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon768x1024.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1024x768.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1536x2048.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2048x1536.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon320x480.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x960.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x1136.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "retina4"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon768x1004.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon768x1024.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon1024x748.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1024x768.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon1536x2008.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1536x2048.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon2048x1496.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2048x1536.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x748.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x748.png
new file mode 100644
index 000000000000..b997979ef875
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x748.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x768.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x768.png
new file mode 100644
index 000000000000..08d362f1392c
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1125x2436.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1125x2436.png
new file mode 100644
index 000000000000..27d46f5c53df
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1125x2436.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2208.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2208.png
new file mode 100644
index 000000000000..879ba7b93a0d
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2208.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2688.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2688.png
new file mode 100644
index 000000000000..eb9865b186bf
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2688.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2008.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2008.png
new file mode 100644
index 000000000000..11edc7fcd9b4
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2008.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2048.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2048.png
new file mode 100644
index 000000000000..347a90be0dc6
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2048.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2224.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2224.png
new file mode 100644
index 000000000000..2e97ab23c27b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2224.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2388.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2388.png
new file mode 100644
index 000000000000..7de93bf15305
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2388.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1792x828.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1792x828.png
new file mode 100644
index 000000000000..2bed0926e669
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1792x828.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1496.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1496.png
new file mode 100644
index 000000000000..67922976e525
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1496.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1536.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1536.png
new file mode 100644
index 000000000000..82a256faaa67
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1536.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x2732.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x2732.png
new file mode 100644
index 000000000000..f084a92221d0
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x2732.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2208x1242.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2208x1242.png
new file mode 100644
index 000000000000..a8dc654bfcb9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2208x1242.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2224x1668.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2224x1668.png
new file mode 100644
index 000000000000..3b445ba0b717
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2224x1668.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2388x1668.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2388x1668.png
new file mode 100644
index 000000000000..dea8e1205197
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2388x1668.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2436x1125.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2436x1125.png
new file mode 100644
index 000000000000..cbdc8dfd4121
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2436x1125.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2688x1242.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2688x1242.png
new file mode 100644
index 000000000000..07e42d25aff9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2688x1242.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2732x2048.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2732x2048.png
new file mode 100644
index 000000000000..ecb57e52324c
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2732x2048.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon320x480.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon320x480.png
new file mode 100644
index 000000000000..5291f62306c9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon320x480.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x1136.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x1136.png
new file mode 100644
index 000000000000..d75740aabea8
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x1136.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x960.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x960.png
new file mode 100644
index 000000000000..c80b857337d8
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x960.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon750x1334.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon750x1334.png
new file mode 100644
index 000000000000..cdbc6785ae30
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon750x1334.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1004.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1004.png
new file mode 100644
index 000000000000..d4012e9d9b5a
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1004.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1024.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1024.png
new file mode 100644
index 000000000000..1e98ebaf9aff
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1024.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon828x1792.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon828x1792.png
new file mode 100644
index 000000000000..4c356278d837
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon828x1792.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Contents.json b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Contents.json
new file mode 100644
index 000000000000..3e9d30ffa97c
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Contents.json
@@ -0,0 +1,24 @@
+{
+ "images" : [
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon3840x2160.png",
+ "idiom" : "tv",
+ "minimum-system-version" : "11.0",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1920x1080.png",
+ "idiom" : "tv",
+ "minimum-system-version" : "9.0",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon1920x1080.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon1920x1080.png
new file mode 100644
index 000000000000..7d4cff35f12b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon1920x1080.png differ
diff --git a/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon3840x2160.png b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon3840x2160.png
new file mode 100644
index 000000000000..7e19964f9c7e
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/MacCatalyst/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon3840x2160.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Contents.json
new file mode 100644
index 000000000000..53c1afb9cbae
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Contents.json
@@ -0,0 +1,74 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "filename" : "Icon16.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon64.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon128.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "512x512"
+ },
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "512x512"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon1024.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon1024.png
new file mode 100644
index 000000000000..49676158376a
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon1024.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon128.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon128.png
new file mode 100644
index 000000000000..1bdee23cd1ea
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon128.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon16.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon16.png
new file mode 100644
index 000000000000..2353e257d666
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon16.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon256.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon256.png
new file mode 100644
index 000000000000..6e63f80b06f7
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon256.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon32.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon32.png
new file mode 100644
index 000000000000..60699df6ee74
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon32.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon512.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon512.png
new file mode 100644
index 000000000000..290507f735d4
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon512.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon64.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon64.png
new file mode 100644
index 000000000000..d4b1df9315fb
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon64.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..08ef43149272
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon1280x768.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon1280x768.png
new file mode 100644
index 000000000000..d4d309750796
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..08ef43149272
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon1280x768.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon1280x768.png
new file mode 100644
index 000000000000..d4d309750796
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..08ef43149272
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon1280x768.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon1280x768.png
new file mode 100644
index 000000000000..d4d309750796
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..60cce20c2b25
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon400x240 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240 1.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240 1.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..60cce20c2b25
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon400x240 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240 1.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240 1.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..60cce20c2b25
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon400x240 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240 1.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240 1.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/Contents.json
new file mode 100644
index 000000000000..9b55b2086ce6
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/Contents.json
@@ -0,0 +1,32 @@
+{
+ "assets" : [
+ {
+ "filename" : "AppIcon-AppStore.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "1280x768"
+ },
+ {
+ "filename" : "AppIcon.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "400x240"
+ },
+ {
+ "filename" : "TopShelfImage.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image",
+ "size" : "1920x720"
+ },
+ {
+ "filename" : "TopShelfImageWide.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image-wide",
+ "size" : "2320x720"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Contents.json
new file mode 100644
index 000000000000..f24b1d62fe33
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-green-1920x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-green-3840x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-1920x720.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-1920x720.png
new file mode 100644
index 000000000000..30d5121714a0
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-1920x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-3840x1440.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-3840x1440.png
new file mode 100644
index 000000000000..a952d776d4e9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-3840x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
new file mode 100644
index 000000000000..dda2fc25910e
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-green-2320x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-green-4640x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-2320x720.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-2320x720.png
new file mode 100644
index 000000000000..97562c2f4b7d
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-2320x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-4640x1440.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-4640x1440.png
new file mode 100644
index 000000000000..388aa9f88e9d
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-4640x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Contents.json
new file mode 100644
index 000000000000..53c1afb9cbae
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Contents.json
@@ -0,0 +1,74 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "filename" : "Icon16.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon64.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon128.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "512x512"
+ },
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "512x512"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon1024.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon1024.png
new file mode 100644
index 000000000000..9174c989a9c8
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon1024.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon128.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon128.png
new file mode 100644
index 000000000000..9c878460b730
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon128.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon16.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon16.png
new file mode 100644
index 000000000000..35c074e65fce
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon16.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon256.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon256.png
new file mode 100644
index 000000000000..7195407ab597
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon256.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon32.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon32.png
new file mode 100644
index 000000000000..a488140938ed
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon32.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon512.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon512.png
new file mode 100644
index 000000000000..640e594251de
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon512.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon64.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon64.png
new file mode 100644
index 000000000000..4027b6bf9ada
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/AppIcons.appiconset/Icon64.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..a6e8f990e420
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-1280x768.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-1280x768.png
new file mode 100644
index 000000000000..459f3f221296
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..a6e8f990e420
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-1280x768.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-1280x768.png
new file mode 100644
index 000000000000..459f3f221296
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..a6e8f990e420
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-1280x768.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-1280x768.png
new file mode 100644
index 000000000000..459f3f221296
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..4d96e08a3eb1
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon240x400.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon240x400 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400 1.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400 1.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..4d96e08a3eb1
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon240x400.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon240x400 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400 1.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400 1.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..4d96e08a3eb1
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon240x400.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon240x400 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400 1.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400 1.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/Contents.json
new file mode 100644
index 000000000000..9b55b2086ce6
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/Contents.json
@@ -0,0 +1,32 @@
+{
+ "assets" : [
+ {
+ "filename" : "AppIcon-AppStore.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "1280x768"
+ },
+ {
+ "filename" : "AppIcon.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "400x240"
+ },
+ {
+ "filename" : "TopShelfImage.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image",
+ "size" : "1920x720"
+ },
+ {
+ "filename" : "TopShelfImageWide.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image-wide",
+ "size" : "2320x720"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Contents.json
new file mode 100644
index 000000000000..8e75d958b544
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1920x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-blue-3840x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-1920x720.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-1920x720.png
new file mode 100644
index 000000000000..024f0ba2fa2a
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-1920x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-3840x1440.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-3840x1440.png
new file mode 100644
index 000000000000..73af924f80a1
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-3840x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
new file mode 100644
index 000000000000..5050c073a89d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-2320x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-blue-4640x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-2320x720.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-2320x720.png
new file mode 100644
index 000000000000..a831d23a64e1
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-2320x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-4640x1440.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-4640x1440.png
new file mode 100644
index 000000000000..6a0278774e6e
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-4640x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Contents.json
new file mode 100644
index 000000000000..6ab7cce3ecd8
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Contents.json
@@ -0,0 +1,270 @@
+{
+ "images" : [
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1242x2688.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "2688h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2688x1242.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "2688h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon828x1792.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "1792h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1792x828.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "1792h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1668x2388.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "2388h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2388x1668.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "2388h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1125x2436.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "11.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "2436h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2436x1125.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "11.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "2436h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1668x2224.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "10.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "2224h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2224x1668.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "10.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "2224h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2048x2732.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "9.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "1366h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2732x2048.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "9.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "1366h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1242x2208.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "736h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2208x1242.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "736h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon750x1334.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "667h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x960.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x1136.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "retina4"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon768x1024.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1024x768.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1536x2048.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2048x1536.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon320x480.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x960.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x1136.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "retina4"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon768x1004.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon768x1024.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon1024x748.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1024x768.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon1536x2008.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1536x2048.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon2048x1496.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2048x1536.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x748.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x748.png
new file mode 100644
index 000000000000..b997979ef875
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x748.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x768.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x768.png
new file mode 100644
index 000000000000..08d362f1392c
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1125x2436.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1125x2436.png
new file mode 100644
index 000000000000..27d46f5c53df
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1125x2436.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2208.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2208.png
new file mode 100644
index 000000000000..879ba7b93a0d
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2208.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2688.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2688.png
new file mode 100644
index 000000000000..eb9865b186bf
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2688.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2008.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2008.png
new file mode 100644
index 000000000000..11edc7fcd9b4
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2008.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2048.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2048.png
new file mode 100644
index 000000000000..347a90be0dc6
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2048.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2224.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2224.png
new file mode 100644
index 000000000000..2e97ab23c27b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2224.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2388.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2388.png
new file mode 100644
index 000000000000..7de93bf15305
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2388.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1792x828.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1792x828.png
new file mode 100644
index 000000000000..2bed0926e669
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1792x828.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1496.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1496.png
new file mode 100644
index 000000000000..67922976e525
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1496.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1536.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1536.png
new file mode 100644
index 000000000000..82a256faaa67
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1536.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x2732.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x2732.png
new file mode 100644
index 000000000000..f084a92221d0
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x2732.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2208x1242.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2208x1242.png
new file mode 100644
index 000000000000..a8dc654bfcb9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2208x1242.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2224x1668.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2224x1668.png
new file mode 100644
index 000000000000..3b445ba0b717
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2224x1668.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2388x1668.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2388x1668.png
new file mode 100644
index 000000000000..dea8e1205197
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2388x1668.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2436x1125.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2436x1125.png
new file mode 100644
index 000000000000..cbdc8dfd4121
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2436x1125.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2688x1242.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2688x1242.png
new file mode 100644
index 000000000000..07e42d25aff9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2688x1242.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2732x2048.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2732x2048.png
new file mode 100644
index 000000000000..ecb57e52324c
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2732x2048.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon320x480.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon320x480.png
new file mode 100644
index 000000000000..5291f62306c9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon320x480.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x1136.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x1136.png
new file mode 100644
index 000000000000..d75740aabea8
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x1136.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x960.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x960.png
new file mode 100644
index 000000000000..c80b857337d8
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x960.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon750x1334.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon750x1334.png
new file mode 100644
index 000000000000..cdbc6785ae30
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon750x1334.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1004.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1004.png
new file mode 100644
index 000000000000..d4012e9d9b5a
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1004.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1024.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1024.png
new file mode 100644
index 000000000000..1e98ebaf9aff
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1024.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon828x1792.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon828x1792.png
new file mode 100644
index 000000000000..4c356278d837
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon828x1792.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Contents.json b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Contents.json
new file mode 100644
index 000000000000..3e9d30ffa97c
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Contents.json
@@ -0,0 +1,24 @@
+{
+ "images" : [
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon3840x2160.png",
+ "idiom" : "tv",
+ "minimum-system-version" : "11.0",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1920x1080.png",
+ "idiom" : "tv",
+ "minimum-system-version" : "9.0",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon1920x1080.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon1920x1080.png
new file mode 100644
index 000000000000..7d4cff35f12b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon1920x1080.png differ
diff --git a/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon3840x2160.png b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon3840x2160.png
new file mode 100644
index 000000000000..7e19964f9c7e
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/iOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon3840x2160.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Contents.json
new file mode 100644
index 000000000000..53c1afb9cbae
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Contents.json
@@ -0,0 +1,74 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "filename" : "Icon16.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon64.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon128.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "512x512"
+ },
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "512x512"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon1024.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon1024.png
new file mode 100644
index 000000000000..49676158376a
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon1024.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon128.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon128.png
new file mode 100644
index 000000000000..1bdee23cd1ea
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon128.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon16.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon16.png
new file mode 100644
index 000000000000..2353e257d666
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon16.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon256.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon256.png
new file mode 100644
index 000000000000..6e63f80b06f7
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon256.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon32.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon32.png
new file mode 100644
index 000000000000..60699df6ee74
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon32.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon512.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon512.png
new file mode 100644
index 000000000000..290507f735d4
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon512.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon64.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon64.png
new file mode 100644
index 000000000000..d4b1df9315fb
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon64.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..08ef43149272
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon1280x768.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon1280x768.png
new file mode 100644
index 000000000000..d4d309750796
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..08ef43149272
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon1280x768.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon1280x768.png
new file mode 100644
index 000000000000..d4d309750796
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..08ef43149272
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon1280x768.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon1280x768.png
new file mode 100644
index 000000000000..d4d309750796
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..60cce20c2b25
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon400x240 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240 1.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240 1.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..60cce20c2b25
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon400x240 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240 1.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240 1.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..60cce20c2b25
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon400x240 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240 1.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240 1.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/Contents.json
new file mode 100644
index 000000000000..9b55b2086ce6
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/Contents.json
@@ -0,0 +1,32 @@
+{
+ "assets" : [
+ {
+ "filename" : "AppIcon-AppStore.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "1280x768"
+ },
+ {
+ "filename" : "AppIcon.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "400x240"
+ },
+ {
+ "filename" : "TopShelfImage.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image",
+ "size" : "1920x720"
+ },
+ {
+ "filename" : "TopShelfImageWide.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image-wide",
+ "size" : "2320x720"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Contents.json
new file mode 100644
index 000000000000..f24b1d62fe33
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-green-1920x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-green-3840x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-1920x720.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-1920x720.png
new file mode 100644
index 000000000000..30d5121714a0
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-1920x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-3840x1440.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-3840x1440.png
new file mode 100644
index 000000000000..a952d776d4e9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-3840x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
new file mode 100644
index 000000000000..dda2fc25910e
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-green-2320x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-green-4640x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-2320x720.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-2320x720.png
new file mode 100644
index 000000000000..97562c2f4b7d
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-2320x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-4640x1440.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-4640x1440.png
new file mode 100644
index 000000000000..388aa9f88e9d
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-4640x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Contents.json
new file mode 100644
index 000000000000..53c1afb9cbae
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Contents.json
@@ -0,0 +1,74 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "filename" : "Icon16.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon64.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon128.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "512x512"
+ },
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "512x512"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon1024.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon1024.png
new file mode 100644
index 000000000000..9174c989a9c8
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon1024.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon128.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon128.png
new file mode 100644
index 000000000000..9c878460b730
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon128.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon16.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon16.png
new file mode 100644
index 000000000000..35c074e65fce
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon16.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon256.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon256.png
new file mode 100644
index 000000000000..7195407ab597
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon256.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon32.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon32.png
new file mode 100644
index 000000000000..a488140938ed
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon32.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon512.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon512.png
new file mode 100644
index 000000000000..640e594251de
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon512.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon64.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon64.png
new file mode 100644
index 000000000000..4027b6bf9ada
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/AppIcons.appiconset/Icon64.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..a6e8f990e420
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-1280x768.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-1280x768.png
new file mode 100644
index 000000000000..459f3f221296
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..a6e8f990e420
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-1280x768.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-1280x768.png
new file mode 100644
index 000000000000..459f3f221296
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..a6e8f990e420
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-1280x768.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-1280x768.png
new file mode 100644
index 000000000000..459f3f221296
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon-AppStore.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..4d96e08a3eb1
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon240x400.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon240x400 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400 1.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400 1.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Content.imageset/Icon240x400.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..4d96e08a3eb1
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon240x400.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon240x400 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400 1.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400 1.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Content.imageset/Icon240x400.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..4d96e08a3eb1
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon240x400.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon240x400 1.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400 1.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400 1.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400 1.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Content.imageset/Icon240x400.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcon.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/Contents.json
new file mode 100644
index 000000000000..9b55b2086ce6
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/Contents.json
@@ -0,0 +1,32 @@
+{
+ "assets" : [
+ {
+ "filename" : "AppIcon-AppStore.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "1280x768"
+ },
+ {
+ "filename" : "AppIcon.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "400x240"
+ },
+ {
+ "filename" : "TopShelfImage.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image",
+ "size" : "1920x720"
+ },
+ {
+ "filename" : "TopShelfImageWide.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image-wide",
+ "size" : "2320x720"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Contents.json
new file mode 100644
index 000000000000..8e75d958b544
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1920x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-blue-3840x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-1920x720.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-1920x720.png
new file mode 100644
index 000000000000..024f0ba2fa2a
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-1920x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-3840x1440.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-3840x1440.png
new file mode 100644
index 000000000000..73af924f80a1
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-3840x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
new file mode 100644
index 000000000000..5050c073a89d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-2320x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-blue-4640x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-2320x720.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-2320x720.png
new file mode 100644
index 000000000000..a831d23a64e1
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-2320x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-4640x1440.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-4640x1440.png
new file mode 100644
index 000000000000..6a0278774e6e
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-4640x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Contents.json
new file mode 100644
index 000000000000..6ab7cce3ecd8
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Contents.json
@@ -0,0 +1,270 @@
+{
+ "images" : [
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1242x2688.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "2688h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2688x1242.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "2688h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon828x1792.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "1792h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1792x828.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "1792h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1668x2388.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "2388h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2388x1668.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "2388h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1125x2436.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "11.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "2436h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2436x1125.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "11.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "2436h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1668x2224.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "10.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "2224h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2224x1668.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "10.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "2224h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2048x2732.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "9.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "1366h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2732x2048.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "9.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "1366h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1242x2208.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "736h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2208x1242.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "736h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon750x1334.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "667h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x960.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x1136.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "retina4"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon768x1024.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1024x768.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1536x2048.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2048x1536.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon320x480.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x960.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x1136.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "retina4"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon768x1004.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon768x1024.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon1024x748.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1024x768.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon1536x2008.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1536x2048.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon2048x1496.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2048x1536.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x748.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x748.png
new file mode 100644
index 000000000000..b997979ef875
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x748.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x768.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x768.png
new file mode 100644
index 000000000000..08d362f1392c
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1125x2436.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1125x2436.png
new file mode 100644
index 000000000000..27d46f5c53df
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1125x2436.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2208.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2208.png
new file mode 100644
index 000000000000..879ba7b93a0d
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2208.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2688.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2688.png
new file mode 100644
index 000000000000..eb9865b186bf
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2688.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2008.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2008.png
new file mode 100644
index 000000000000..11edc7fcd9b4
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2008.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2048.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2048.png
new file mode 100644
index 000000000000..347a90be0dc6
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2048.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2224.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2224.png
new file mode 100644
index 000000000000..2e97ab23c27b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2224.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2388.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2388.png
new file mode 100644
index 000000000000..7de93bf15305
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2388.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1792x828.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1792x828.png
new file mode 100644
index 000000000000..2bed0926e669
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1792x828.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1496.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1496.png
new file mode 100644
index 000000000000..67922976e525
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1496.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1536.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1536.png
new file mode 100644
index 000000000000..82a256faaa67
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1536.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x2732.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x2732.png
new file mode 100644
index 000000000000..f084a92221d0
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x2732.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2208x1242.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2208x1242.png
new file mode 100644
index 000000000000..a8dc654bfcb9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2208x1242.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2224x1668.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2224x1668.png
new file mode 100644
index 000000000000..3b445ba0b717
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2224x1668.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2388x1668.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2388x1668.png
new file mode 100644
index 000000000000..dea8e1205197
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2388x1668.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2436x1125.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2436x1125.png
new file mode 100644
index 000000000000..cbdc8dfd4121
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2436x1125.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2688x1242.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2688x1242.png
new file mode 100644
index 000000000000..07e42d25aff9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2688x1242.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2732x2048.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2732x2048.png
new file mode 100644
index 000000000000..ecb57e52324c
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2732x2048.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon320x480.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon320x480.png
new file mode 100644
index 000000000000..5291f62306c9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon320x480.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x1136.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x1136.png
new file mode 100644
index 000000000000..d75740aabea8
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x1136.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x960.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x960.png
new file mode 100644
index 000000000000..c80b857337d8
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x960.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon750x1334.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon750x1334.png
new file mode 100644
index 000000000000..cdbc6785ae30
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon750x1334.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1004.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1004.png
new file mode 100644
index 000000000000..d4012e9d9b5a
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1004.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1024.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1024.png
new file mode 100644
index 000000000000..1e98ebaf9aff
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1024.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon828x1792.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon828x1792.png
new file mode 100644
index 000000000000..4c356278d837
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon828x1792.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Contents.json b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Contents.json
new file mode 100644
index 000000000000..3e9d30ffa97c
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Contents.json
@@ -0,0 +1,24 @@
+{
+ "images" : [
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon3840x2160.png",
+ "idiom" : "tv",
+ "minimum-system-version" : "11.0",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1920x1080.png",
+ "idiom" : "tv",
+ "minimum-system-version" : "9.0",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon1920x1080.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon1920x1080.png
new file mode 100644
index 000000000000..7d4cff35f12b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon1920x1080.png differ
diff --git a/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon3840x2160.png b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon3840x2160.png
new file mode 100644
index 000000000000..7e19964f9c7e
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/macOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon3840x2160.png differ
diff --git a/tests/dotnet/AppWithXCAssets/resize.sh b/tests/dotnet/AppWithXCAssets/resize.sh
new file mode 100755
index 000000000000..f58fe7c8c0a4
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/resize.sh
@@ -0,0 +1,70 @@
+#!/bin/bash -eux
+
+set -o pipefail
+IFS=$'\n\t'
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+INPUT=$1
+OUTPUT_DIR=$2
+
+NAME=$(basename "$INPUT" .png)
+NAME=${NAME/[0-9]*x[0-9]*/}
+NAME=${NAME/[0-9]*/}
+
+echo NAME=$NAME
+
+SIZES=()
+
+# iOS
+SIZES+=(1024x748)
+SIZES+=(1024x768)
+SIZES+=(1125x2436)
+SIZES+=(1242x2208)
+SIZES+=(1242x2688)
+SIZES+=(1536x2008)
+SIZES+=(1536x2048)
+SIZES+=(1668x2224)
+SIZES+=(1668x2388)
+SIZES+=(1792x828)
+SIZES+=(2048x1496)
+SIZES+=(2048x1536)
+SIZES+=(2048x2732)
+SIZES+=(2208x1242)
+SIZES+=(2224x1668)
+SIZES+=(2388x1668)
+SIZES+=(2436x1125)
+SIZES+=(2688x1242)
+SIZES+=(2732x2048)
+SIZES+=(320x480)
+SIZES+=(640x1136)
+SIZES+=(640x960)
+SIZES+=(750x1334)
+SIZES+=(768x1004)
+SIZES+=(768x1024)
+SIZES+=(828x1792)
+SIZES+=(40x40)
+SIZES+=(60x60)
+SIZES+=(58x58)
+SIZES+=(87x87)
+SIZES+=(76x76)
+SIZES+=(114x114)
+SIZES+=(80x80)
+SIZES+=(120x120)
+SIZES+=(180x180)
+SIZES+=(128x128)
+SIZES+=(192x192)
+SIZES+=(136x136)
+SIZES+=(152x152)
+SIZES+=(167x167)
+
+# tvOS
+SIZES+=(3840x2160)
+SIZES+=(1920x1080)
+
+mkdir -p "$OUTPUT_DIR"
+
+for size in ${SIZES[@]}; do
+ magick "$INPUT" -resize $size'!' "$OUTPUT_DIR/$NAME$size.png"
+done
+
+
diff --git a/tests/dotnet/AppWithXCAssets/shared.csproj b/tests/dotnet/AppWithXCAssets/shared.csproj
index 02bb2b27bf31..692b35c9bc3c 100644
--- a/tests/dotnet/AppWithXCAssets/shared.csproj
+++ b/tests/dotnet/AppWithXCAssets/shared.csproj
@@ -5,6 +5,9 @@
AppWithXCAssets
com.xamarin.appwithxcassets
+
+
+ true
@@ -27,6 +30,9 @@
+
+
+
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Contents.json
new file mode 100644
index 000000000000..53c1afb9cbae
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Contents.json
@@ -0,0 +1,74 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "filename" : "Icon16.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon64.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon128.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "512x512"
+ },
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "512x512"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon1024.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon1024.png
new file mode 100644
index 000000000000..49676158376a
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon1024.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon128.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon128.png
new file mode 100644
index 000000000000..1bdee23cd1ea
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon128.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon16.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon16.png
new file mode 100644
index 000000000000..2353e257d666
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon16.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon256.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon256.png
new file mode 100644
index 000000000000..6e63f80b06f7
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon256.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon32.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon32.png
new file mode 100644
index 000000000000..60699df6ee74
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon32.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon512.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon512.png
new file mode 100644
index 000000000000..290507f735d4
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon512.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon64.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon64.png
new file mode 100644
index 000000000000..d4b1df9315fb
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateAppIcons.appiconset/Icon64.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..d23b1e0950ae
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-green-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-green-1280x768.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-green-1280x768.png
new file mode 100644
index 000000000000..d4d309750796
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-green-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..d23b1e0950ae
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-green-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-green-1280x768.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-green-1280x768.png
new file mode 100644
index 000000000000..d4d309750796
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-green-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..d23b1e0950ae
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-green-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-green-1280x768.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-green-1280x768.png
new file mode 100644
index 000000000000..d4d309750796
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-green-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons-AppStore.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..b04945daaf58
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-green-400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-green-400x240.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Back.imagestacklayer/Content.imageset/Icon-green-400x240.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Back.imagestacklayer/Content.imageset/Icon-green-400x240.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Back.imagestacklayer/Content.imageset/Icon-green-400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..b04945daaf58
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-green-400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-green-400x240.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Front.imagestacklayer/Content.imageset/Icon-green-400x240.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Front.imagestacklayer/Content.imageset/Icon-green-400x240.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Front.imagestacklayer/Content.imageset/Icon-green-400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..b04945daaf58
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-green-400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-green-400x240.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Middle.imagestacklayer/Content.imageset/Icon-green-400x240.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Middle.imagestacklayer/Content.imageset/Icon-green-400x240.png
new file mode 100644
index 000000000000..f558229e8eac
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Middle.imagestacklayer/Content.imageset/Icon-green-400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/AlternateAppIcons.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/Contents.json
new file mode 100644
index 000000000000..fdec44822147
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/Contents.json
@@ -0,0 +1,32 @@
+{
+ "assets" : [
+ {
+ "filename" : "AlternateAppIcons-AppStore.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "1280x768"
+ },
+ {
+ "filename" : "AlternateAppIcons.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "400x240"
+ },
+ {
+ "filename" : "TopShelfImage.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image",
+ "size" : "1920x720"
+ },
+ {
+ "filename" : "TopShelfImageWide.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image-wide",
+ "size" : "2320x720"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Contents.json
new file mode 100644
index 000000000000..f24b1d62fe33
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-green-1920x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-green-3840x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-1920x720.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-1920x720.png
new file mode 100644
index 000000000000..30d5121714a0
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-1920x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-3840x1440.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-3840x1440.png
new file mode 100644
index 000000000000..a952d776d4e9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImage.imageset/Icon-green-3840x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
new file mode 100644
index 000000000000..dda2fc25910e
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-green-2320x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-green-4640x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-2320x720.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-2320x720.png
new file mode 100644
index 000000000000..97562c2f4b7d
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-2320x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-4640x1440.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-4640x1440.png
new file mode 100644
index 000000000000..388aa9f88e9d
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AlternateBrandAssets.brandassets/TopShelfImageWide.imageset/Icon-green-4640x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Contents.json
new file mode 100644
index 000000000000..53c1afb9cbae
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Contents.json
@@ -0,0 +1,74 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "filename" : "Icon16.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "Icon32.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon64.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "Icon128.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "Icon256.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "Icon512.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "512x512"
+ },
+ {
+ "filename" : "Icon1024.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "512x512"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon1024.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon1024.png
new file mode 100644
index 000000000000..9174c989a9c8
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon1024.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon128.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon128.png
new file mode 100644
index 000000000000..9c878460b730
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon128.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon16.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon16.png
new file mode 100644
index 000000000000..35c074e65fce
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon16.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon256.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon256.png
new file mode 100644
index 000000000000..7195407ab597
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon256.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon32.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon32.png
new file mode 100644
index 000000000000..a488140938ed
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon32.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon512.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon512.png
new file mode 100644
index 000000000000..640e594251de
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon512.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon64.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon64.png
new file mode 100644
index 000000000000..4027b6bf9ada
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/AppIcons.appiconset/Icon64.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..a6e8f990e420
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-1280x768.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-1280x768.png
new file mode 100644
index 000000000000..459f3f221296
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..a6e8f990e420
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-1280x768.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-1280x768.png
new file mode 100644
index 000000000000..459f3f221296
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..a6e8f990e420
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1280x768.png",
+ "idiom" : "tv"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-1280x768.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-1280x768.png
new file mode 100644
index 000000000000..459f3f221296
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-1280x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons-AppStore.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..932915c0ac3f
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-blue-400x240.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-400x240.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-400x240.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Back.imagestacklayer/Content.imageset/Icon-blue-400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Back.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Back.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Back.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Contents.json
new file mode 100644
index 000000000000..de59d885ae8d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Contents.json
@@ -0,0 +1,17 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "layers" : [
+ {
+ "filename" : "Front.imagestacklayer"
+ },
+ {
+ "filename" : "Middle.imagestacklayer"
+ },
+ {
+ "filename" : "Back.imagestacklayer"
+ }
+ ]
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..932915c0ac3f
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-blue-400x240.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-400x240.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-400x240.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Front.imagestacklayer/Content.imageset/Icon-blue-400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Front.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Front.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Front.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
new file mode 100644
index 000000000000..932915c0ac3f
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-400x240.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-blue-400x240.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-400x240.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-400x240.png
new file mode 100644
index 000000000000..c13d206cbf2b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Middle.imagestacklayer/Content.imageset/Icon-blue-400x240.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Middle.imagestacklayer/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Middle.imagestacklayer/Contents.json
new file mode 100644
index 000000000000..73c00596a7fc
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/AppIcons.imagestack/Middle.imagestacklayer/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/Contents.json
new file mode 100644
index 000000000000..75721f069e43
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/Contents.json
@@ -0,0 +1,32 @@
+{
+ "assets" : [
+ {
+ "filename" : "AppIcons-AppStore.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "1280x768"
+ },
+ {
+ "filename" : "AppIcons.imagestack",
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "400x240"
+ },
+ {
+ "filename" : "TopShelfImage.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image",
+ "size" : "1920x720"
+ },
+ {
+ "filename" : "TopShelfImageWide.imageset",
+ "idiom" : "tv",
+ "role" : "top-shelf-image-wide",
+ "size" : "2320x720"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Contents.json
new file mode 100644
index 000000000000..8e75d958b544
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-1920x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-blue-3840x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-1920x720.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-1920x720.png
new file mode 100644
index 000000000000..024f0ba2fa2a
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-1920x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-3840x1440.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-3840x1440.png
new file mode 100644
index 000000000000..73af924f80a1
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImage.imageset/Icon-blue-3840x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
new file mode 100644
index 000000000000..5050c073a89d
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-blue-2320x720.png",
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Icon-blue-4640x1440.png",
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-2320x720.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-2320x720.png
new file mode 100644
index 000000000000..a831d23a64e1
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-2320x720.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-4640x1440.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-4640x1440.png
new file mode 100644
index 000000000000..6a0278774e6e
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/BrandAssets.brandassets/TopShelfImageWide.imageset/Icon-blue-4640x1440.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Contents.json
new file mode 100644
index 000000000000..6ab7cce3ecd8
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Contents.json
@@ -0,0 +1,270 @@
+{
+ "images" : [
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1242x2688.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "2688h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2688x1242.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "2688h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon828x1792.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "1792h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1792x828.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "1792h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1668x2388.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "2388h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2388x1668.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "2388h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1125x2436.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "11.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "2436h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2436x1125.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "11.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "2436h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1668x2224.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "10.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "2224h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2224x1668.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "10.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "2224h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2048x2732.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "9.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "1366h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2732x2048.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "9.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "1366h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1242x2208.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "736h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2208x1242.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "736h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon750x1334.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "667h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x960.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x1136.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "retina4"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon768x1024.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1024x768.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1536x2048.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2048x1536.png",
+ "idiom" : "ipad",
+ "minimum-system-version" : "7.0",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon320x480.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x960.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon640x1136.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "retina4"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon768x1004.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon768x1024.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon1024x748.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1024x768.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon1536x2008.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1536x2048.png",
+ "idiom" : "ipad",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "to-status-bar",
+ "filename" : "Icon2048x1496.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon2048x1536.png",
+ "idiom" : "ipad",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x748.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x748.png
new file mode 100644
index 000000000000..b997979ef875
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x748.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x768.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x768.png
new file mode 100644
index 000000000000..08d362f1392c
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1024x768.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1125x2436.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1125x2436.png
new file mode 100644
index 000000000000..27d46f5c53df
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1125x2436.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2208.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2208.png
new file mode 100644
index 000000000000..879ba7b93a0d
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2208.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2688.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2688.png
new file mode 100644
index 000000000000..eb9865b186bf
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1242x2688.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2008.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2008.png
new file mode 100644
index 000000000000..11edc7fcd9b4
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2008.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2048.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2048.png
new file mode 100644
index 000000000000..347a90be0dc6
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1536x2048.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2224.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2224.png
new file mode 100644
index 000000000000..2e97ab23c27b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2224.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2388.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2388.png
new file mode 100644
index 000000000000..7de93bf15305
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1668x2388.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1792x828.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1792x828.png
new file mode 100644
index 000000000000..2bed0926e669
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon1792x828.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1496.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1496.png
new file mode 100644
index 000000000000..67922976e525
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1496.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1536.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1536.png
new file mode 100644
index 000000000000..82a256faaa67
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x1536.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x2732.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x2732.png
new file mode 100644
index 000000000000..f084a92221d0
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2048x2732.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2208x1242.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2208x1242.png
new file mode 100644
index 000000000000..a8dc654bfcb9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2208x1242.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2224x1668.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2224x1668.png
new file mode 100644
index 000000000000..3b445ba0b717
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2224x1668.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2388x1668.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2388x1668.png
new file mode 100644
index 000000000000..dea8e1205197
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2388x1668.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2436x1125.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2436x1125.png
new file mode 100644
index 000000000000..cbdc8dfd4121
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2436x1125.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2688x1242.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2688x1242.png
new file mode 100644
index 000000000000..07e42d25aff9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2688x1242.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2732x2048.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2732x2048.png
new file mode 100644
index 000000000000..ecb57e52324c
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon2732x2048.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon320x480.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon320x480.png
new file mode 100644
index 000000000000..5291f62306c9
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon320x480.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x1136.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x1136.png
new file mode 100644
index 000000000000..d75740aabea8
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x1136.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x960.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x960.png
new file mode 100644
index 000000000000..c80b857337d8
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon640x960.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon750x1334.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon750x1334.png
new file mode 100644
index 000000000000..cdbc6785ae30
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon750x1334.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1004.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1004.png
new file mode 100644
index 000000000000..d4012e9d9b5a
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1004.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1024.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1024.png
new file mode 100644
index 000000000000..1e98ebaf9aff
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon768x1024.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon828x1792.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon828x1792.png
new file mode 100644
index 000000000000..4c356278d837
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/iOSLaunchImage.launchimage/Icon828x1792.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Contents.json b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Contents.json
new file mode 100644
index 000000000000..3e9d30ffa97c
--- /dev/null
+++ b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Contents.json
@@ -0,0 +1,24 @@
+{
+ "images" : [
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon3840x2160.png",
+ "idiom" : "tv",
+ "minimum-system-version" : "11.0",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "Icon1920x1080.png",
+ "idiom" : "tv",
+ "minimum-system-version" : "9.0",
+ "orientation" : "landscape",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon1920x1080.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon1920x1080.png
new file mode 100644
index 000000000000..7d4cff35f12b
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon1920x1080.png differ
diff --git a/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon3840x2160.png b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon3840x2160.png
new file mode 100644
index 000000000000..7e19964f9c7e
Binary files /dev/null and b/tests/dotnet/AppWithXCAssets/tvOS/Resources/Images.xcassets/tvOSLaunchImage.launchimage/Icon3840x2160.png differ
diff --git a/tests/dotnet/UnitTests/AppIconTest.cs b/tests/dotnet/UnitTests/AppIconTest.cs
new file mode 100644
index 000000000000..84321a264c02
--- /dev/null
+++ b/tests/dotnet/UnitTests/AppIconTest.cs
@@ -0,0 +1,545 @@
+using System.Diagnostics.CodeAnalysis;
+using System.Text.Json;
+
+#nullable enable
+
+namespace Xamarin.Tests {
+ public class AppIconTest : TestBaseClass {
+ [TestCase (ApplePlatform.iOS, "iossimulator-x64")]
+ [TestCase (ApplePlatform.iOS, "ios-arm64")]
+ [TestCase (ApplePlatform.TVOS, "tvossimulator-x64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-arm64;maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-arm64;osx-x64")]
+ public void DefaultValues (ApplePlatform platform, string runtimeIdentifiers)
+ {
+ var expectedAssets = new HashSet ();
+ switch (platform) {
+ case ApplePlatform.iOS:
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("Image:Icon64.png");
+ break;
+ case ApplePlatform.TVOS:
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ break;
+ case ApplePlatform.MacOSX:
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ break;
+ case ApplePlatform.MacCatalyst:
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ break;
+ default:
+ throw new ArgumentOutOfRangeException ($"Unknown platform: {platform}");
+ }
+
+ TestXCAssetsImpl (platform, runtimeIdentifiers, extraAssets: expectedAssets.ToArray ());
+ }
+
+ [TestCase (ApplePlatform.iOS, "iossimulator-x64")]
+ [TestCase (ApplePlatform.iOS, "ios-arm64")]
+ [TestCase (ApplePlatform.TVOS, "tvos-arm64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-arm64;maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-arm64;osx-x64")]
+ public void IncludeAllIcons (ApplePlatform platform, string runtimeIdentifiers)
+ {
+ var expectedAssets = new HashSet ();
+ switch (platform) {
+ case ApplePlatform.iOS:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("Image:Icon64.png");
+ expectedAssets.Add ("MultiSized Image:AlternateAppIcons");
+ expectedAssets.Add ("MultiSized Image:AppIcons");
+ break;
+ case ApplePlatform.TVOS:
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ break;
+ case ApplePlatform.MacOSX:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Icon Image:Icon128.png");
+ expectedAssets.Add ("Icon Image:Icon16.png");
+ expectedAssets.Add ("Icon Image:Icon256.png");
+ expectedAssets.Add ("Icon Image:Icon32.png");
+ expectedAssets.Add ("Icon Image:Icon512.png");
+ expectedAssets.Add ("Icon Image:Icon64.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("MultiSized Image:AlternateAppIcons");
+ expectedAssets.Add ("MultiSized Image:AppIcons");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-1.1.0-gamut0");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-2.1.0-gamut0");
+ break;
+ case ApplePlatform.MacCatalyst:
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ break;
+ default:
+ throw new ArgumentOutOfRangeException ($"Unknown platform: {platform}");
+ }
+
+ TestXCAssetsImpl (
+ platform,
+ runtimeIdentifiers,
+ new Dictionary () { { "IncludeAllAppIcons", "true" } },
+ extraAssets: expectedAssets.ToArray ());
+ }
+
+
+ [TestCase (ApplePlatform.iOS, "iossimulator-x64")]
+ [TestCase (ApplePlatform.iOS, "ios-arm64")]
+ [TestCase (ApplePlatform.TVOS, "tvos-arm64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-arm64;maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-arm64;osx-x64")]
+ public void XSAppIconAssets (ApplePlatform platform, string runtimeIdentifiers)
+ {
+ var expectedAssets = new HashSet ();
+ switch (platform) {
+ case ApplePlatform.iOS:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("Image:Icon64.png");
+ expectedAssets.Add ("MultiSized Image:AlternateAppIcons");
+ break;
+ case ApplePlatform.TVOS:
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ break;
+ case ApplePlatform.MacOSX:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Icon Image:Icon128.png");
+ expectedAssets.Add ("Icon Image:Icon16.png");
+ expectedAssets.Add ("Icon Image:Icon256.png");
+ expectedAssets.Add ("Icon Image:Icon32.png");
+ expectedAssets.Add ("Icon Image:Icon512.png");
+ expectedAssets.Add ("Icon Image:Icon64.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("MultiSized Image:AlternateAppIcons");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-1.1.0-gamut0");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-2.1.0-gamut0");
+ break;
+ case ApplePlatform.MacCatalyst:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Icon Image:Icon128.png");
+ expectedAssets.Add ("Icon Image:Icon16.png");
+ expectedAssets.Add ("Icon Image:Icon256.png");
+ expectedAssets.Add ("Icon Image:Icon32.png");
+ expectedAssets.Add ("Icon Image:Icon512.png");
+ expectedAssets.Add ("Icon Image:Icon64.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("MultiSized Image:AlternateAppIcons");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-1.1.0-gamut0");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-2.1.0-gamut0");
+ break;
+ default:
+ throw new ArgumentOutOfRangeException ($"Unknown platform: {platform}");
+ }
+
+ TestXCAssetsImpl (
+ platform,
+ runtimeIdentifiers,
+ new Dictionary () {
+ { "_XSAppIconAssets", "Resources/Images.xcassets/AlternateAppIcons.appiconset" }
+ },
+ expectedAssets.ToArray ());
+ }
+
+ [TestCase (ApplePlatform.iOS, "iossimulator-x64")]
+ [TestCase (ApplePlatform.TVOS, "tvos-arm64")]
+ // launch images don't exist on Mac Catalyst or macOS.
+ public void XSLaunchImageAssets (ApplePlatform platform, string runtimeIdentifiers)
+ {
+ var expectedAssets = new HashSet ();
+ switch (platform) {
+ case ApplePlatform.iOS:
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("Image:Icon64.png");
+ break;
+ case ApplePlatform.TVOS:
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon1920x1080.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("Image:Icon3840x2160.png");
+ break;
+ default:
+ throw new ArgumentOutOfRangeException ($"Unknown platform: {platform}");
+ }
+
+ TestXCAssetsImpl (
+ platform,
+ runtimeIdentifiers,
+ new Dictionary () {
+ { "_XSLaunchImageAssets", $"Resources/Images.xcassets/{platform.AsString ()}LaunchImage.launchimage" }
+ },
+ expectedAssets.ToArray ());
+ }
+
+ [TestCase (ApplePlatform.iOS, "iossimulator-x64")]
+ [TestCase (ApplePlatform.iOS, "ios-arm64")]
+ [TestCase (ApplePlatform.TVOS, "tvos-arm64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-arm64;maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-arm64;osx-x64")]
+ public void AlternateAppIcon (ApplePlatform platform, string runtimeIdentifiers)
+ {
+ var expectedAssets = new HashSet ();
+ switch (platform) {
+ case ApplePlatform.iOS:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("Image:Icon64.png");
+ expectedAssets.Add ("MultiSized Image:AppIcons");
+ break;
+ case ApplePlatform.TVOS:
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ break;
+ case ApplePlatform.MacOSX:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Icon Image:Icon128.png");
+ expectedAssets.Add ("Icon Image:Icon16.png");
+ expectedAssets.Add ("Icon Image:Icon256.png");
+ expectedAssets.Add ("Icon Image:Icon32.png");
+ expectedAssets.Add ("Icon Image:Icon512.png");
+ expectedAssets.Add ("Icon Image:Icon64.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("MultiSized Image:AppIcons");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-1.1.0-gamut0");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-2.1.0-gamut0");
+ break;
+ case ApplePlatform.MacCatalyst:
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ break;
+ default:
+ throw new ArgumentOutOfRangeException ($"Unknown platform: {platform}");
+ }
+
+ TestXCAssetsImpl (
+ platform,
+ runtimeIdentifiers,
+ new Dictionary () {
+ { "AddTheseAlternateAppIcons", platform == ApplePlatform.TVOS ? "BrandAssets" : "AppIcons" }
+ },
+ expectedAssets.ToArray ());
+ }
+
+ [TestCase (ApplePlatform.iOS, "iossimulator-x64")]
+ [TestCase (ApplePlatform.iOS, "ios-arm64")]
+ [TestCase (ApplePlatform.TVOS, "tvos-arm64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-arm64;maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-arm64;osx-x64")]
+ public void AlternateAppIcons (ApplePlatform platform, string runtimeIdentifiers)
+ {
+ var expectedAssets = new HashSet ();
+ switch (platform) {
+ case ApplePlatform.iOS:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("Image:Icon64.png");
+ expectedAssets.Add ("MultiSized Image:AlternateAppIcons");
+ expectedAssets.Add ("MultiSized Image:AppIcons");
+ break;
+ case ApplePlatform.TVOS:
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ break;
+ case ApplePlatform.MacOSX:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Icon Image:Icon128.png");
+ expectedAssets.Add ("Icon Image:Icon16.png");
+ expectedAssets.Add ("Icon Image:Icon256.png");
+ expectedAssets.Add ("Icon Image:Icon32.png");
+ expectedAssets.Add ("Icon Image:Icon512.png");
+ expectedAssets.Add ("Icon Image:Icon64.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("MultiSized Image:AlternateAppIcons");
+ expectedAssets.Add ("MultiSized Image:AppIcons");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-1.1.0-gamut0");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-2.1.0-gamut0");
+ break;
+ case ApplePlatform.MacCatalyst:
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ break;
+ default:
+ throw new ArgumentOutOfRangeException ($"Unknown platform: {platform}");
+ }
+
+ TestXCAssetsImpl (
+ platform,
+ runtimeIdentifiers,
+ new Dictionary () {
+ { "AddTheseAlternateAppIcons", platform == ApplePlatform.TVOS ? "BrandAssets;AlternateBrandAssets" : "AppIcons;AlternateAppIcons" }
+ },
+ expectedAssets.ToArray ());
+ }
+
+ [TestCase (ApplePlatform.iOS, "iossimulator-x64")]
+ [TestCase (ApplePlatform.iOS, "ios-arm64")]
+ [TestCase (ApplePlatform.TVOS, "tvos-arm64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-arm64;maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-arm64;osx-x64")]
+ public void AlternateAppIcon_Failure (ApplePlatform platform, string runtimeIdentifiers)
+ {
+ TestXCAssetsImpl (
+ platform,
+ runtimeIdentifiers,
+ new Dictionary () {
+ { "AddTheseAlternateAppIcons", "InexistentAppIcon" }
+ },
+ expectedErrorMessages: new string [] { "Can't find the AlternateAppIcon 'InexistentAppIcon' among the image resources." });
+ }
+
+ [TestCase (ApplePlatform.iOS, "iossimulator-x64")]
+ [TestCase (ApplePlatform.iOS, "ios-arm64")]
+ [TestCase (ApplePlatform.TVOS, "tvos-arm64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-arm64;maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-arm64;osx-x64")]
+ public void AppIcon_1 (ApplePlatform platform, string runtimeIdentifiers)
+ {
+ var expectedAssets = new HashSet ();
+ switch (platform) {
+ case ApplePlatform.iOS:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("Image:Icon64.png");
+ expectedAssets.Add ("MultiSized Image:AppIcons");
+ break;
+ case ApplePlatform.TVOS:
+ expectedAssets.Add ("Image:Icon-blue-1280x768.png");
+ expectedAssets.Add ("Image:Icon-blue-1920x720.png");
+ expectedAssets.Add ("Image:Icon-blue-2320x720.png");
+ expectedAssets.Add ("Image:Icon-blue-3840x1440.png");
+ expectedAssets.Add ("Image:Icon-blue-400x240.png");
+ expectedAssets.Add ("Image:Icon-blue-4640x1440.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("Image:ZZZZFlattenedImage-1.1.0-gamut0");
+ expectedAssets.Add ("Image:ZZZZFlattenedImage-2.1.0-gamut0");
+ expectedAssets.Add ("Image:ZZZZRadiosityImage-1.0.0");
+ expectedAssets.Add ("Image:ZZZZRadiosityImage-2.0.0");
+ expectedAssets.Add ("ImageStack:AppIcons");
+ break;
+ case ApplePlatform.MacOSX:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Icon Image:Icon128.png");
+ expectedAssets.Add ("Icon Image:Icon16.png");
+ expectedAssets.Add ("Icon Image:Icon256.png");
+ expectedAssets.Add ("Icon Image:Icon32.png");
+ expectedAssets.Add ("Icon Image:Icon512.png");
+ expectedAssets.Add ("Icon Image:Icon64.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("MultiSized Image:AppIcons");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-1.1.0-gamut0");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-2.1.0-gamut0");
+ break;
+ case ApplePlatform.MacCatalyst:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Icon Image:Icon128.png");
+ expectedAssets.Add ("Icon Image:Icon16.png");
+ expectedAssets.Add ("Icon Image:Icon256.png");
+ expectedAssets.Add ("Icon Image:Icon32.png");
+ expectedAssets.Add ("Icon Image:Icon512.png");
+ expectedAssets.Add ("Icon Image:Icon64.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("MultiSized Image:AppIcons");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-1.1.0-gamut0");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-2.1.0-gamut0");
+ break;
+ default:
+ throw new ArgumentOutOfRangeException ($"Unknown platform: {platform}");
+ }
+ TestXCAssetsImpl (
+ platform,
+ runtimeIdentifiers,
+ new Dictionary () {
+ { "AppIcon", platform == ApplePlatform.TVOS ? "BrandAssets" : "AppIcons" }
+ },
+ expectedAssets.ToArray ());
+ }
+
+ [TestCase (ApplePlatform.iOS, "iossimulator-x64")]
+ [TestCase (ApplePlatform.iOS, "ios-arm64")]
+ [TestCase (ApplePlatform.TVOS, "tvos-arm64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-arm64;maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-arm64;osx-x64")]
+ public void AppIcon_2 (ApplePlatform platform, string runtimeIdentifiers)
+ {
+ var expectedAssets = new HashSet ();
+ switch (platform) {
+ case ApplePlatform.iOS:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("Image:Icon64.png");
+ expectedAssets.Add ("MultiSized Image:AlternateAppIcons");
+ break;
+ case ApplePlatform.TVOS:
+ expectedAssets.Add ("Image:Icon-green-1280x768.png");
+ expectedAssets.Add ("Image:Icon-green-1920x720.png");
+ expectedAssets.Add ("Image:Icon-green-2320x720.png");
+ expectedAssets.Add ("Image:Icon-green-3840x1440.png");
+ expectedAssets.Add ("Image:Icon-green-400x240.png");
+ expectedAssets.Add ("Image:Icon-green-4640x1440.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("Image:ZZZZFlattenedImage-1.1.0-gamut0");
+ expectedAssets.Add ("Image:ZZZZFlattenedImage-2.1.0-gamut0");
+ expectedAssets.Add ("Image:ZZZZRadiosityImage-1.0.0");
+ expectedAssets.Add ("Image:ZZZZRadiosityImage-2.0.0");
+ expectedAssets.Add ("ImageStack:AlternateAppIcons");
+ break;
+ case ApplePlatform.MacOSX:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Icon Image:Icon128.png");
+ expectedAssets.Add ("Icon Image:Icon16.png");
+ expectedAssets.Add ("Icon Image:Icon256.png");
+ expectedAssets.Add ("Icon Image:Icon32.png");
+ expectedAssets.Add ("Icon Image:Icon512.png");
+ expectedAssets.Add ("Icon Image:Icon64.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("MultiSized Image:AlternateAppIcons");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-1.1.0-gamut0");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-2.1.0-gamut0");
+ break;
+ case ApplePlatform.MacCatalyst:
+ expectedAssets.Add ("Icon Image:Icon1024.png");
+ expectedAssets.Add ("Icon Image:Icon128.png");
+ expectedAssets.Add ("Icon Image:Icon16.png");
+ expectedAssets.Add ("Icon Image:Icon256.png");
+ expectedAssets.Add ("Icon Image:Icon32.png");
+ expectedAssets.Add ("Icon Image:Icon512.png");
+ expectedAssets.Add ("Icon Image:Icon64.png");
+ expectedAssets.Add ("Image:Icon16.png");
+ expectedAssets.Add ("Image:Icon32.png");
+ expectedAssets.Add ("MultiSized Image:AlternateAppIcons");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-1.1.0-gamut0");
+ expectedAssets.Add ("PackedImage:ZZZZPackedAsset-2.1.0-gamut0");
+ break;
+ default:
+ throw new ArgumentOutOfRangeException ($"Unknown platform: {platform}");
+ }
+ TestXCAssetsImpl (
+ platform,
+ runtimeIdentifiers,
+ new Dictionary () {
+ { "AppIcon", platform == ApplePlatform.TVOS ? "AlternateBrandAssets" : "AlternateAppIcons" }
+ },
+ expectedAssets.ToArray ());
+ }
+
+ [TestCase (ApplePlatform.iOS, "iossimulator-x64")]
+ [TestCase (ApplePlatform.iOS, "ios-arm64")]
+ [TestCase (ApplePlatform.TVOS, "tvos-arm64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-arm64;maccatalyst-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-x64")]
+ [TestCase (ApplePlatform.MacOSX, "osx-arm64;osx-x64")]
+ public void AppIcon_Failure (ApplePlatform platform, string runtimeIdentifiers)
+ {
+ TestXCAssetsImpl (
+ platform,
+ runtimeIdentifiers,
+ new Dictionary () {
+ { "AppIcon", "InexistentAppIcon" }
+ },
+ expectedErrorMessages: new string [] { "Can't find the AppIcon 'InexistentAppIcon' among the image resources." });
+ }
+
+ void TestXCAssetsImpl (ApplePlatform platform, string runtimeIdentifiers, Dictionary? extraProperties = null, IEnumerable? extraAssets = null, string []? expectedErrorMessages = null)
+ {
+ var projectPath = string.Empty;
+ var appPath = string.Empty;
+
+ Configuration.AssertRuntimeIdentifiersAvailable (platform, runtimeIdentifiers);
+ var project = "AppWithXCAssets";
+ Configuration.IgnoreIfIgnoredPlatform (platform);
+ projectPath = GetProjectPath (project, runtimeIdentifiers: runtimeIdentifiers, platform: platform, out appPath);
+
+ Clean (projectPath);
+
+ var properties = GetDefaultProperties (runtimeIdentifiers, extraProperties);
+ if (expectedErrorMessages is not null) {
+ var rv = DotNet.AssertBuildFailure (projectPath, properties);
+ var errors = BinLog.GetBuildLogErrors (rv.BinLogPath).ToArray ();
+ AssertErrorMessages (errors, expectedErrorMessages);
+ return; // nothing else to test here
+ }
+
+ DotNet.AssertBuild (projectPath, properties);
+
+ var resourcesDirectory = GetResourcesDirectory (platform, appPath);
+ var assetsCar = Path.Combine (resourcesDirectory, "Assets.car");
+ Assert.That (assetsCar, Does.Exist, "Assets.car");
+
+ Console.WriteLine ($"Assets: {assetsCar}");
+
+ var doc = AssetsTest.ProcessAssets (assetsCar, GetFullSdkVersion (platform, runtimeIdentifiers));
+ Assert.IsNotNull (doc, "There was an issue processing the asset binary.");
+
+ var foundAssets = AssetsTest.FindAssets (platform, doc);
+
+ var expectedAssets = new HashSet ();
+ if (extraAssets is not null) {
+ foreach (var asset in extraAssets)
+ expectedAssets.Add (asset);
+ }
+
+ CollectionAssert.AreEquivalent (expectedAssets, foundAssets, "Incorrect assets");
+ }
+
+ public static string GetFullSdkVersion (ApplePlatform platform, string runtimeIdentifiers)
+ {
+ switch (platform) {
+ case ApplePlatform.iOS:
+ if (runtimeIdentifiers.Contains ("simulator")) {
+ return $"iphonesimulator{Configuration.sdk_version}";
+ } else {
+ return $"iphoneos{Configuration.sdk_version}";
+ }
+ case ApplePlatform.TVOS:
+ if (runtimeIdentifiers.Contains ("simulator")) {
+ return $"appletvsimulator{Configuration.tvos_sdk_version}";
+ } else {
+ return $"appletvos{Configuration.tvos_sdk_version}";
+ }
+ case ApplePlatform.MacOSX:
+ case ApplePlatform.MacCatalyst:
+ return $"macosx{Configuration.macos_sdk_version}";
+ default:
+ throw new ArgumentOutOfRangeException ($"Unknown platform: {platform}");
+ }
+ }
+ }
+}
diff --git a/tests/dotnet/UnitTests/AssetsTest.cs b/tests/dotnet/UnitTests/AssetsTest.cs
index 90f0e5c69096..7a9f7a712b60 100644
--- a/tests/dotnet/UnitTests/AssetsTest.cs
+++ b/tests/dotnet/UnitTests/AssetsTest.cs
@@ -1,3 +1,4 @@
+using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
#nullable enable
@@ -5,57 +6,46 @@
namespace Xamarin.Tests {
// Add the XCAssets before the build
- [TestFixture (ApplePlatform.iOS, "iossimulator-x64", "iphonesimulator", true)]
- [TestFixture (ApplePlatform.iOS, "ios-arm64;ios-arm", "iphoneos", true)]
- [TestFixture (ApplePlatform.TVOS, "tvossimulator-x64", "appletvsimulator", true)]
- [TestFixture (ApplePlatform.MacCatalyst, "maccatalyst-x64", "macosx", true)]
- [TestFixture (ApplePlatform.MacCatalyst, "maccatalyst-arm64;maccatalyst-x64", "macosx", true)]
- [TestFixture (ApplePlatform.MacOSX, "osx-x64", "macosx", true)]
- [TestFixture (ApplePlatform.MacOSX, "osx-arm64;osx-x64", "macosx", true)] // https://github.com/xamarin/xamarin-macios/issues/12410
- // Build, add the XCAssets, then build again
- [TestFixture (ApplePlatform.iOS, "iossimulator-x64", "iphonesimulator", false)]
- [TestFixture (ApplePlatform.iOS, "ios-arm64;ios-arm", "iphoneos", false)]
- [TestFixture (ApplePlatform.TVOS, "tvossimulator-x64", "appletvsimulator", false)]
- [TestFixture (ApplePlatform.MacCatalyst, "maccatalyst-x64", "macosx", false)]
- [TestFixture (ApplePlatform.MacCatalyst, "maccatalyst-arm64;maccatalyst-x64", "macosx", false)]
- [TestFixture (ApplePlatform.MacOSX, "osx-x64", "macosx", false)]
- [TestFixture (ApplePlatform.MacOSX, "osx-arm64;osx-x64", "macosx", false)] // https://github.com/xamarin/xamarin-macios/issues/12410
+ [TestFixture]
public class AssetsTest : TestBaseClass {
+ const string project = "AppWithXCAssets";
- readonly ApplePlatform platform;
- readonly string runtimeIdentifiers;
- readonly string sdkVersion;
- readonly bool isStartingWithAssets;
- string projectPath = string.Empty;
- string appPath = string.Empty;
-
- public AssetsTest (ApplePlatform platform, string runtimeIdentifiers, string sdkVersion, bool isStartingWithAssets)
- {
- this.platform = platform;
- this.runtimeIdentifiers = runtimeIdentifiers;
- this.sdkVersion = sdkVersion;
- this.isStartingWithAssets = isStartingWithAssets;
- }
-
- [SetUp]
- public void Init ()
+ [Test]
+ [TestCase (ApplePlatform.iOS, "iossimulator-x64", true)]
+ [TestCase (ApplePlatform.iOS, "ios-arm64", true)]
+ [TestCase (ApplePlatform.TVOS, "tvossimulator-x64", true)]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-x64", true)]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-arm64;maccatalyst-x64", true)]
+ [TestCase (ApplePlatform.MacOSX, "osx-x64", true)]
+ [TestCase (ApplePlatform.MacOSX, "osx-arm64;osx-x64", true)] // https://github.com/xamarin/xamarin-macios/issues/12410
+ // Build, add the XCAssets, then build again
+ [TestCase (ApplePlatform.iOS, "iossimulator-x64", false)]
+ [TestCase (ApplePlatform.iOS, "ios-arm64", false)]
+ [TestCase (ApplePlatform.TVOS, "tvossimulator-x64", false)]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-x64", false)]
+ [TestCase (ApplePlatform.MacCatalyst, "maccatalyst-arm64;maccatalyst-x64", false)]
+ [TestCase (ApplePlatform.MacOSX, "osx-x64", false)]
+ [TestCase (ApplePlatform.MacOSX, "osx-arm64;osx-x64", false)] // https://github.com/xamarin/xamarin-macios/issues/12410
+ public void TestXCAssets (ApplePlatform platform, string runtimeIdentifiers, bool isStartingWithAssets)
{
Configuration.AssertRuntimeIdentifiersAvailable (platform, runtimeIdentifiers);
- var project = "AppWithXCAssets";
Configuration.IgnoreIfIgnoredPlatform (platform);
- projectPath = GetProjectPath (project, runtimeIdentifiers: runtimeIdentifiers, platform: platform, out appPath);
- ConfigureAssets ();
- }
- [TearDown]
- public void Cleanup ()
- {
- DeleteAssets ();
+ var config = "Debug";
+ var projectPath = GetProjectPath (project, runtimeIdentifiers: runtimeIdentifiers, platform: platform, out var appPath, configuration: config);
+
+ try {
+ ConfigureAssets (projectPath, runtimeIdentifiers, config, isStartingWithAssets);
+
+ TestXCAssetsImpl (platform, runtimeIdentifiers, isStartingWithAssets, projectPath, appPath);
+ } finally {
+ DeleteAssets (projectPath);
+ }
}
- [Test]
- public void TestXCAssets ()
+ void TestXCAssetsImpl (ApplePlatform platform, string runtimeIdentifiers, bool isStartingWithAssets, string projectPath, string appPath)
{
+
var appExecutable = GetNativeExecutable (platform, appPath);
ExecuteWithMagicWordAndAssert (platform, runtimeIdentifiers, appExecutable);
@@ -63,46 +53,65 @@ public void TestXCAssets ()
var assetsCar = Path.Combine (resourcesDirectory, "Assets.car");
Assert.That (assetsCar, Does.Exist, "Assets.car");
+ Console.WriteLine ($"Assets: {assetsCar}");
- var doc = ProcessAssets (assetsCar, GetFullSdkVersion ());
+ var doc = ProcessAssets (assetsCar, AppIconTest.GetFullSdkVersion (platform, runtimeIdentifiers));
Assert.IsNotNull (doc, "There was an issue processing the asset binary.");
- var foundAssets = FindAssets (doc);
+ var foundAssets = FindAssets (platform, doc);
// Seems the 2 vectors are not being consumed in MacCatalyst but they still appear in the image Datasets
- var expectedAssets = platform == ApplePlatform.MacCatalyst ? ExpectedAssetsMacCatalyst : ExpectedAssets;
- Assert.AreEqual (expectedAssets, foundAssets, "Incorrect assets");
+ HashSet expectedAssets;
+ switch (platform) {
+ case ApplePlatform.iOS:
+ expectedAssets = ExpectedAssetsiOS;
+ break;
+ case ApplePlatform.TVOS:
+ expectedAssets = ExpectedAssetstvOS;
+ break;
+ case ApplePlatform.MacOSX:
+ expectedAssets = ExpectedAssetsmacOS;
+ break;
+ case ApplePlatform.MacCatalyst:
+ expectedAssets = ExpectedAssetsMacCatalyst;
+ break;
+ default:
+ throw new ArgumentOutOfRangeException ($"Unknown platform: {platform}");
+ }
+
+ CollectionAssert.AreEquivalent (expectedAssets, foundAssets, $"Incorrect assets in {assetsCar}");
var arm64txt = Path.Combine (resourcesDirectory, "arm64.txt");
- var armtxt = Path.Combine (resourcesDirectory, "arm.txt");
var x64txt = Path.Combine (resourcesDirectory, "x64.txt");
Assert.AreEqual (runtimeIdentifiers.Split (';').Any (v => v.EndsWith ("-arm64")), File.Exists (arm64txt), "arm64.txt");
- Assert.AreEqual (runtimeIdentifiers.Split (';').Any (v => v.EndsWith ("-arm")), File.Exists (armtxt), "arm.txt");
Assert.AreEqual (runtimeIdentifiers.Split (';').Any (v => v.EndsWith ("-x64")), File.Exists (x64txt), "x64.txt");
}
- void ConfigureAssets ()
+ void ConfigureAssets (string projectPath, string runtimeIdentifiers, string config, bool isStartingWithAssets)
{
- Clean (projectPath);
+ // Clean (projectPath);
// We either want the assets added before the build, or we will be adding them after the build
if (isStartingWithAssets)
- CopyAssets ();
+ CopyAssets (projectPath);
+
+ var properties = GetDefaultProperties (runtimeIdentifiers);
+ properties ["Configuration"] = config;
- DotNet.AssertBuild (projectPath, GetDefaultProperties (runtimeIdentifiers));
+ DotNet.AssertBuild (projectPath, properties);
if (!isStartingWithAssets) {
- CopyAssets ();
- DotNet.AssertBuild (projectPath, GetDefaultProperties (runtimeIdentifiers));
+ CopyAssets (projectPath);
+ DotNet.AssertBuild (projectPath, properties);
}
}
- void DeleteAssets ()
+ void DeleteAssets (string projectPath)
{
var xcassetsDir = Path.Combine (projectPath, "../Assets.xcassets");
File.Delete (xcassetsDir);
}
- void CopyAssets ()
+ void CopyAssets (string projectPath)
{
var testingAssetsDir = new DirectoryInfo (Path.Combine (projectPath, "../../TestingAssets"));
var xcassetsDir = new DirectoryInfo (Path.Combine (projectPath, "../Assets.xcassets"));
@@ -124,14 +133,6 @@ void MakeSymlinks (string sourceDir, string destDir)
Assert.AreEqual (0, rv.ExitCode, $"Creating Symlink Error: {rv.StandardError}. Unexpected ExitCode");
}
- string GetFullSdkVersion () => sdkVersion switch {
- "iphonesimulator" => sdkVersion + Configuration.sdk_version,
- "iphoneos" => sdkVersion + Configuration.sdk_version,
- "appletvsimulator" => sdkVersion + Configuration.tvos_sdk_version,
- "macosx" => sdkVersion + Configuration.macos_sdk_version,
- _ => throw new ArgumentOutOfRangeException (nameof (sdkVersion), $"Not expected sdkVersion: {sdkVersion}"),
- };
-
// msbuild will only update the assets if they are newer than the outputs from previous build
// so we will touch the first (non-DS_Store) file the symlink points to in order to give them newer modified times
void ProcessUpdateSymlink (string xcassetsDir)
@@ -148,19 +149,17 @@ void ProcessUpdateSymlink (string xcassetsDir)
Assert.AreEqual (0, rv.ExitCode, $"Processing Update Symlink Error: {rv.StandardError}. Unexpected ExitCode");
}
- JsonDocument ProcessAssets (string assetsPath, string sdkVersion)
+ public static JsonDocument ProcessAssets (string assetsPath, string sdkVersion)
{
var output = new StringBuilder ();
var stderr = new StringBuilder ();
var executable = "xcrun";
- var arguments = new string [] { "--sdk", sdkVersion, "assetutil", "--info", assetsPath };
+ var tmpdir = Cache.CreateTemporaryDirectory ();
+ var tmpfile = Path.Combine (tmpdir, "Assets.json");
+ var arguments = new string [] { "--sdk", sdkVersion, "assetutil", "--info", assetsPath, "-o", tmpfile };
var rv = Execution.RunWithStringBuildersAsync (executable, arguments, standardOutput: output, standardError: stderr, timeout: TimeSpan.FromSeconds (120)).Result;
Assert.AreEqual (0, rv.ExitCode, $"Processing Assets Error: {stderr}. Unexpected ExitCode");
- var s = output.ToString ();
-
- // This Execution call produces an output with an objc warning. We just want the json below it.
- if (s.StartsWith ("objc", StringComparison.Ordinal))
- s = s.Substring (s.IndexOf (Environment.NewLine) + 1);
+ var s = File.ReadAllText (tmpfile);
try {
return JsonDocument.Parse (s);
@@ -174,60 +173,101 @@ JsonDocument ProcessAssets (string assetsPath, string sdkVersion)
}
}
- HashSet FindAssets (JsonDocument doc)
+ public static HashSet FindAssets (ApplePlatform platform, JsonDocument doc)
{
var jsonArray = doc.RootElement.EnumerateArray ();
var foundElements = new HashSet ();
foreach (var item in jsonArray) {
- var result = GetTarget (item);
+ var result = GetTarget (platform, item);
if (result is not null)
foundElements.Add (result);
}
return foundElements;
}
- string? GetTarget (JsonElement item)
+ static string? GetTarget (ApplePlatform platform, JsonElement item)
{
- if (item.TryGetProperty ("AssetType", out var assetType)) {
+ if (item.TryGetProperty ("SchemaVersion", out var schemaVersion)) {
+ switch (platform) {
+ case ApplePlatform.MacOSX:
+ Assert.AreEqual ("5", schemaVersion.ToString (), "Verify SchemaVersion");
+ break;
+ case ApplePlatform.MacCatalyst:
+ case ApplePlatform.iOS:
+ case ApplePlatform.TVOS:
+ Assert.AreEqual ("2", schemaVersion.ToString (), "Verify SchemaVersion");
+ break;
+ default:
+ throw new ArgumentOutOfRangeException ($"Unknown platform: {platform}");
+ }
+ } else if (item.TryGetProperty ("AssetType", out var assetType)) {
foreach (var target in XCAssetTargets) {
- var result = GetTarget (item, assetType, target);
- if (result is not null)
+ if (TryGetTarget (item, assetType, target, out var result))
return result;
}
+ Assert.Fail ($"Unable to match asset type '{assetType}' for {item}'");
+ } else {
+ Assert.Fail ($"Unable to get property 'AssetType' for {item}");
}
return null;
}
- string? GetTarget (JsonElement item, JsonElement assetType, XCAssetTarget target)
+ static bool TryGetTarget (JsonElement item, JsonElement assetType, XCAssetTarget target, [NotNullWhen (true)] out string? result)
{
+ result = null;
if (assetType.ToString () == target.AssetType && item.TryGetProperty (target.CategoryName, out var value)) {
- if (target.Values.Contains (value.ToString ()))
- return string.Concat (assetType.ToString (), ".", value.ToString ());
+ // if (target.Values.Contains (value.ToString ()))
+ result = string.Concat (assetType.ToString (), ":", value.ToString ());
+ return true;
}
- return null;
+ return false;
}
- static readonly HashSet ExpectedAssetsMacCatalyst = new HashSet () {
- "Color.ColorTest",
- "Contents.SpritesTest",
- "Data.BmpImageDataTest",
- "Data.DngImageDataTest",
- "Data.EpsImageDataTest",
- "Data.JsonDataTest",
- "Data.TiffImageDataTest",
- "Image.samplejpeg.jpeg",
- "Image.samplejpg.jpg",
- "Image.samplepdf.pdf",
- "Image.samplepng2.png",
- "Image.spritejpeg.jpeg",
- "Image.xamlogo.svg",
- "Texture Rendition.TextureTest",
+ static readonly HashSet ExpectedAssetsAllPlatforms = new HashSet () {
+ "Color:ColorTest",
+ "Contents:SpritesTest",
+ "Data:BmpImageDataTest",
+ "Data:DngImageDataTest",
+ "Data:EpsImageDataTest",
+ "Data:JsonDataTest",
+ "Data:TiffImageDataTest",
+ "Image:samplejpeg.jpeg",
+ "Image:samplejpg.jpg",
+ "Image:samplepdf.pdf",
+ "Image:samplepng.png",
+ "Image:samplepng2.png",
+ "Image:spritejpeg.jpeg",
+ "Image:xamlogo.svg",
+ "PackedImage:ZZZZExplicitlyPackedAsset-1.0.0-gamut0",
+ "Texture Rendition:TextureTest",
+ };
+
+ static HashSet ExpectedAssetsMacCatalyst => new HashSet (ExpectedAssetsAllPlatforms) {
+ "Image:Icon16.png",
+ "Image:Icon32.png",
+ };
+
+ static readonly HashSet ExpectedAssetsiOS = new HashSet (ExpectedAssetsAllPlatforms) {
+ "Vector:samplepdf.pdf",
+ "Vector:xamlogo.svg",
+ "Image:Icon16.png",
+ "Image:Icon32.png",
+ "Image:Icon64.png",
+ };
+
+ static readonly HashSet ExpectedAssetstvOS = new HashSet (ExpectedAssetsAllPlatforms) {
+ "Vector:samplepdf.pdf",
+ "Vector:xamlogo.svg",
+ "Image:Icon16.png",
+ "Image:Icon32.png",
};
- static readonly HashSet ExpectedAssets = new HashSet (ExpectedAssetsMacCatalyst) {
- "Vector.samplepdf.pdf",
- "Vector.xamlogo.svg",
+ static readonly HashSet ExpectedAssetsmacOS = new HashSet (ExpectedAssetsAllPlatforms) {
+ "Vector:samplepdf.pdf",
+ "Vector:xamlogo.svg",
+ "Image:Icon16.png",
+ "Image:Icon32.png",
};
class XCAssetTarget {
@@ -245,6 +285,7 @@ public XCAssetTarget (string assetType, string categoryName, string [] values)
static XCAssetTarget [] XCAssetTargets = {
new ("Image", "RenditionName", new string [] { "samplejpeg.jpeg", "samplejpg.jpg",
"samplepdf.pdf", "samplepng2.png", "spritejpeg.jpeg", "xamlogo.svg" }),
+ new ("ImageStack", "Name", new string [0]),
new ("Data", "Name", new string [] { "BmpImageDataTest", "JsonDataTest", "DS_StoreDataTest",
"DngImageDataTest", "EpsImageDataTest", "TiffImageDataTest" }),
@@ -252,8 +293,11 @@ public XCAssetTarget (string assetType, string categoryName, string [] values)
new ("Color", "Name", new string [] { "ColorTest" }),
new ("Contents", "Name", new string [] { "SpritesTest" }),
+ new ("Icon Image", "RenditionName", new string [0]),
+ new ("MultiSized Image", "Name", new string [0]),
new ("Texture Rendition", "Name", new string [] { "TextureTest" }),
+ new ("PackedImage", "RenditionName", new string [0]),
new ("Vector", "RenditionName", new string [] { "samplepdf.pdf", "xamlogo.svg" }),
};
diff --git a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/ACToolTaskTest.cs b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/ACToolTaskTest.cs
new file mode 100644
index 000000000000..9cffde4e5d9c
--- /dev/null
+++ b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/ACToolTaskTest.cs
@@ -0,0 +1,447 @@
+using System;
+using System.IO;
+using System.Linq;
+using System.Collections.Generic;
+
+using Microsoft.Build.Framework;
+using Microsoft.Build.Utilities;
+
+using NUnit.Framework;
+
+using Xamarin.MacDev;
+using Xamarin.MacDev.Tasks;
+using Xamarin.Tests;
+using Xamarin.Utils;
+
+namespace Xamarin.MacDev.Tasks {
+ [TestFixture]
+ public class ACToolTaskTests : TestBase {
+ ACTool CreateACToolTask (ApplePlatform platform, string projectDir, out string intermediateOutputPath, params string [] imageAssets)
+ {
+ Configuration.IgnoreIfIgnoredPlatform (platform);
+
+ intermediateOutputPath = Cache.CreateTemporaryDirectory ();
+
+ var sdk = Sdks.GetAppleSdk (platform);
+ var version = AppleSdkVersion.UseDefault.ToString ();
+ var root = sdk.GetSdkPath (version, false);
+ var usr = Path.Combine (sdk.DeveloperRoot, "usr");
+ var bin = Path.Combine (usr, "bin");
+ string sdkPlatform;
+ var uiDeviceFamily = "";
+
+ switch (platform) {
+ case ApplePlatform.TVOS:
+ sdkPlatform = "AppleTVOS";
+ uiDeviceFamily = "TV";
+ break;
+ case ApplePlatform.iOS:
+ sdkPlatform = "iPhoneOS";
+ uiDeviceFamily = "IPhone, IPad";
+ break;
+ case ApplePlatform.MacOSX:
+ sdkPlatform = "MacOSX";
+ break;
+ case ApplePlatform.MacCatalyst:
+ sdkPlatform = "MacCatalyst";
+ break;
+ default:
+ throw new NotImplementedException (platform.ToString ());
+ }
+
+ var task = CreateTask ();
+ task.ImageAssets = imageAssets
+ .Select (v => {
+ var spl = v.Split ('|');
+ var rv = new TaskItem (spl [0]);
+ rv.SetMetadata ("Link", spl [1]);
+ return rv;
+ })
+ .Cast ()
+ .ToArray ();
+ task.IntermediateOutputPath = intermediateOutputPath;
+ task.MinimumOSVersion = Xamarin.SdkVersions.GetMinVersion (platform).ToString ();
+ task.OutputPath = Path.Combine (intermediateOutputPath, "OutputPath");
+ task.ProjectDir = projectDir;
+ task.SdkDevPath = Configuration.xcode_root;
+ task.SdkPlatform = sdkPlatform;
+ task.SdkVersion = version.ToString ();
+ task.SdkUsrPath = usr;
+ task.SdkBinPath = bin;
+ task.TargetFrameworkMoniker = TargetFramework.GetTargetFramework (platform, true).ToString ();
+ task.UIDeviceFamily = uiDeviceFamily;
+ return task;
+ }
+
+ ACTool CreateACToolTaskWithResources (ApplePlatform platform)
+ {
+ var projectDir = Path.Combine (Configuration.SourceRoot, "tests", "dotnet", "AppWithXCAssets", platform.AsString ());
+ var files = Directory.GetFiles (Path.Combine (projectDir, "Resources", "Images.xcassets"), "*", SearchOption.AllDirectories);
+ var imageAssets = files.Select (v => v + "|" + v.Substring (projectDir.Length + 1)).ToArray ();
+ return CreateACToolTask (
+ platform,
+ projectDir,
+ out var _,
+ imageAssets
+ );
+ }
+
+ [Test]
+ [TestCase (ApplePlatform.iOS)]
+ [TestCase (ApplePlatform.TVOS)]
+ [TestCase (ApplePlatform.MacCatalyst)]
+ [TestCase (ApplePlatform.MacOSX)]
+ public void DefaultAppIcons (ApplePlatform platform)
+ {
+ var actool = CreateACToolTaskWithResources (platform);
+ ExecuteTask (actool);
+
+ Assert.IsNotNull (actool.PartialAppManifest, "PartialAppManifest");
+ var appIconsManifest = PDictionary.FromFile (actool.PartialAppManifest.ItemSpec!)!;
+ Assert.AreEqual (0, appIconsManifest.Count, $"Partial plist contents: {actool.PartialAppManifest.ItemSpec}");
+ }
+
+ [Test]
+ [TestCase (ApplePlatform.iOS)]
+ [TestCase (ApplePlatform.TVOS)]
+ [TestCase (ApplePlatform.MacCatalyst)]
+ [TestCase (ApplePlatform.MacOSX)]
+ public void AllAppIcons (ApplePlatform platform)
+ {
+ var actool = CreateACToolTaskWithResources (platform);
+ actool.IncludeAllAppIcons = true;
+
+ ExecuteTask (actool);
+
+ Assert.IsNotNull (actool.PartialAppManifest, "PartialAppManifest");
+
+ var appIconsManifest = PDictionary.FromFile (actool.PartialAppManifest.ItemSpec!)!;
+ Assert.AreEqual (0, appIconsManifest.Count, $"Partial plist contents: {actool.PartialAppManifest.ItemSpec}");
+ }
+
+ [Test]
+ [TestCase (ApplePlatform.iOS)]
+ [TestCase (ApplePlatform.TVOS)]
+ [TestCase (ApplePlatform.MacCatalyst)]
+ [TestCase (ApplePlatform.MacOSX)]
+ public void AllAppIconsWithAppIcon (ApplePlatform platform)
+ {
+ var actool = CreateACToolTaskWithResources (platform);
+ actool.IncludeAllAppIcons = true;
+ if (platform == ApplePlatform.TVOS) {
+ actool.AppIcon = "AlternateBrandAssets";
+ } else {
+ actool.AppIcon = "AlternateAppIcons";
+ }
+
+ ExecuteTask (actool);
+
+ Assert.IsNotNull (actool.PartialAppManifest, "PartialAppManifest");
+
+ var appIconsManifest = PDictionary.FromFile (actool.PartialAppManifest?.ItemSpec)!;
+ Assert.AreEqual (2, appIconsManifest.Count, $"Partial plist contents: {actool.PartialAppManifest.ItemSpec}");
+ if (platform == ApplePlatform.MacOSX || platform == ApplePlatform.MacCatalyst) {
+ Assert.AreEqual ("AlternateAppIcons", appIconsManifest.Get ("CFBundleIconFile")?.Value, "CFBundleIconFile");
+ Assert.AreEqual ("AlternateAppIcons", appIconsManifest.Get ("CFBundleIconName")?.Value, "CFBundleIconName");
+ } else if (platform == ApplePlatform.TVOS) {
+ var cfBundleIcons = appIconsManifest.Get ("CFBundleIcons");
+ Assert.AreEqual (1, cfBundleIcons.Count, "CFBundleIcons.Count");
+ Assert.AreEqual ("AlternateAppIcons", cfBundleIcons.Get ("CFBundlePrimaryIcon")?.Value, "CFBundlePrimaryIcon");
+
+ var tvTopShelfImage = appIconsManifest.Get ("TVTopShelfImage");
+ Assert.AreEqual (2, tvTopShelfImage.Count, "TVTopShelfImage.Count");
+ Assert.AreEqual ("TopShelfImage", tvTopShelfImage.Get ("TVTopShelfPrimaryImage")?.Value, "TVTopShelfPrimaryImage");
+ Assert.AreEqual ("TopShelfImageWide", tvTopShelfImage.Get ("TVTopShelfPrimaryImageWide")?.Value, "TVTopShelfPrimaryImageWide");
+ } else {
+ {
+ // iPhone
+ var cfBundleIcons = appIconsManifest.Get ("CFBundleIcons");
+ Assert.AreEqual (2, cfBundleIcons.Count, "CFBundleIcons.Count");
+
+ var cfBundlePrimaryIcon = cfBundleIcons.Get ("CFBundlePrimaryIcon");
+ Assert.AreEqual (2, cfBundlePrimaryIcon.Count, "CFBundlePrimaryIcon.Length");
+
+ var cfBundleIconFiles = cfBundlePrimaryIcon.Get ("CFBundleIconFiles");
+ Assert.AreEqual (1, cfBundleIconFiles.Count, "CFBundleIconFiles.Length");
+ Assert.AreEqual ("AlternateAppIcons60x60", ((PString) cfBundleIconFiles [0]).Value, "CFBundleIconFiles[0].Value");
+ Assert.AreEqual ("AlternateAppIcons", cfBundlePrimaryIcon.Get ("CFBundleIconName")?.Value, "CFBundleIconName");
+
+ var cfBundleAlternateIcons = cfBundleIcons.Get ("CFBundleAlternateIcons");
+ Assert.AreEqual (1, cfBundleAlternateIcons.Count, "CFBundleAlternateIcons.Count");
+
+ var alternateAppIcons = cfBundleAlternateIcons.Get ("AppIcons");
+ Assert.AreEqual (2, alternateAppIcons.Count, "AppIcons.Count");
+ Assert.AreEqual ("AppIcons", alternateAppIcons.Get ("CFBundleIconName")?.Value, "CFBundleIconName");
+
+ var appIcons_cfBundleIconFiles = alternateAppIcons.Get ("CFBundleIconFiles");
+ Assert.AreEqual (2, appIcons_cfBundleIconFiles.Count, "AppIcons.CFBundleIconFiles.Length");
+ Assert.AreEqual ("AppIcons60x60", ((PString) appIcons_cfBundleIconFiles [0]).Value, "AppIcons.CFBundleIconFiles[0].Value");
+ Assert.AreEqual ("AppIcons76x76", ((PString) appIcons_cfBundleIconFiles [1]).Value, "AppIcons.CFBundleIconFiles[1].Value");
+ }
+ {
+ // iPad
+ var cfBundleIcons = appIconsManifest.Get ("CFBundleIcons~ipad");
+ Assert.AreEqual (2, cfBundleIcons.Count, "CFBundleIcons.Count");
+
+ var cfBundlePrimaryIcon = cfBundleIcons.Get ("CFBundlePrimaryIcon");
+ Assert.AreEqual (2, cfBundlePrimaryIcon.Count, "CFBundlePrimaryIcon.Length");
+
+ var cfBundleIconFiles = cfBundlePrimaryIcon.Get ("CFBundleIconFiles");
+ Assert.AreEqual (2, cfBundleIconFiles.Count, "CFBundleIconFiles.Length");
+ Assert.AreEqual ("AlternateAppIcons60x60", ((PString) cfBundleIconFiles [0]).Value, "CFBundleIconFiles[0].Value");
+ Assert.AreEqual ("AlternateAppIcons76x76", ((PString) cfBundleIconFiles [1]).Value, "CFBundleIconFiles[1].Value");
+ Assert.AreEqual ("AlternateAppIcons", cfBundlePrimaryIcon.Get ("CFBundleIconName")?.Value, "CFBundleIconName");
+
+ var cfBundleAlternateIcons = cfBundleIcons.Get ("CFBundleAlternateIcons");
+ Assert.AreEqual (1, cfBundleAlternateIcons.Count, "CFBundleAlternateIcons.Count");
+
+ var appIcons = cfBundleAlternateIcons.Get ("AppIcons");
+ Assert.AreEqual (2, appIcons.Count, "AppIcons.Count");
+ Assert.AreEqual ("AppIcons", appIcons.Get ("CFBundleIconName")?.Value, "CFBundleIconName");
+
+ var appIcons_cfBundleIconFiles = appIcons.Get ("CFBundleIconFiles");
+ Assert.AreEqual (2, appIcons_cfBundleIconFiles.Count, "AppIcons.CFBundleIconFiles.Length");
+ Assert.AreEqual ("AppIcons60x60", ((PString) appIcons_cfBundleIconFiles [0]).Value, "AppIcons.CFBundleIconFiles[0].Value");
+ Assert.AreEqual ("AppIcons76x76", ((PString) appIcons_cfBundleIconFiles [1]).Value, "AppIcons.CFBundleIconFiles[1].Value");
+ }
+ }
+ }
+
+ [Test]
+ [TestCase (ApplePlatform.iOS)]
+ [TestCase (ApplePlatform.TVOS)]
+ [TestCase (ApplePlatform.MacCatalyst)]
+ [TestCase (ApplePlatform.MacOSX)]
+ public void AppIcon (ApplePlatform platform)
+ {
+ var actool = CreateACToolTaskWithResources (platform);
+ if (platform == ApplePlatform.TVOS) {
+ actool.AppIcon = "BrandAssets";
+ } else {
+ actool.AppIcon = "AppIcons";
+ }
+
+ ExecuteTask (actool);
+
+ Assert.IsNotNull (actool.PartialAppManifest, "PartialAppManifest");
+
+ var appIconsManifest = PDictionary.FromFile (actool.PartialAppManifest.ItemSpec!)!;
+ if (platform == ApplePlatform.MacOSX || platform == ApplePlatform.MacCatalyst) {
+ Assert.AreEqual (2, appIconsManifest.Count, $"Partial plist contents: {actool.PartialAppManifest.ItemSpec}");
+ Assert.AreEqual ("AppIcons", appIconsManifest.Get ("CFBundleIconFile")?.Value, "CFBundleIconFile");
+ Assert.AreEqual ("AppIcons", appIconsManifest.Get ("CFBundleIconName")?.Value, "CFBundleIconName");
+ } else if (platform == ApplePlatform.TVOS) {
+ Assert.AreEqual (2, appIconsManifest.Count, $"Partial plist contents: {actool.PartialAppManifest.ItemSpec}");
+
+ var cfBundleIcons = appIconsManifest.Get ("CFBundleIcons");
+ Assert.AreEqual (1, cfBundleIcons.Count, "CFBundleIcons.Count");
+ Assert.AreEqual ("AppIcons", cfBundleIcons.Get ("CFBundlePrimaryIcon")?.Value, "CFBundlePrimaryIcon");
+
+ var tvTopShelfImage = appIconsManifest.Get ("TVTopShelfImage");
+ Assert.AreEqual (2, tvTopShelfImage.Count, "TVTopShelfImage.Count");
+ Assert.AreEqual ("TopShelfImage", tvTopShelfImage.Get ("TVTopShelfPrimaryImage")?.Value, "TVTopShelfPrimaryImage");
+ Assert.AreEqual ("TopShelfImageWide", tvTopShelfImage.Get ("TVTopShelfPrimaryImageWide")?.Value, "TVTopShelfPrimaryImageWide");
+ } else {
+ {
+ // iPhone
+ var cfBundleIcons = appIconsManifest.Get ("CFBundleIcons");
+ Assert.AreEqual (1, cfBundleIcons.Count, "CFBundleIcons.Count");
+
+ var cfBundlePrimaryIcon = cfBundleIcons.Get ("CFBundlePrimaryIcon");
+ Assert.AreEqual (2, cfBundlePrimaryIcon.Count, "CFBundlePrimaryIcon.Length");
+
+ var cfBundleIconFiles = cfBundlePrimaryIcon.Get ("CFBundleIconFiles");
+ Assert.AreEqual (1, cfBundleIconFiles.Count, "CFBundleIconFiles.Length");
+ Assert.AreEqual ("AppIcons60x60", ((PString) cfBundleIconFiles [0]).Value, "CFBundleIconFiles[0].Value");
+ Assert.AreEqual ("AppIcons", cfBundlePrimaryIcon.Get ("CFBundleIconName")?.Value, "CFBundleIconName");
+ }
+ {
+ // iPad
+ var cfBundleIcons = appIconsManifest.Get ("CFBundleIcons~ipad");
+ Assert.AreEqual (1, cfBundleIcons.Count, "CFBundleIcons.Count");
+
+ var cfBundlePrimaryIcon = cfBundleIcons.Get ("CFBundlePrimaryIcon");
+ Assert.AreEqual (2, cfBundlePrimaryIcon.Count, "CFBundlePrimaryIcon.Length");
+
+ var cfBundleIconFiles = cfBundlePrimaryIcon.Get ("CFBundleIconFiles");
+ Assert.AreEqual (2, cfBundleIconFiles.Count, "CFBundleIconFiles.Length");
+ Assert.AreEqual ("AppIcons60x60", ((PString) cfBundleIconFiles [0]).Value, "CFBundleIconFiles[0].Value");
+ Assert.AreEqual ("AppIcons76x76", ((PString) cfBundleIconFiles [1]).Value, "CFBundleIconFiles[1].Value");
+ Assert.AreEqual ("AppIcons", cfBundlePrimaryIcon.Get ("CFBundleIconName")?.Value, "CFBundleIconName");
+ }
+ }
+ }
+
+ [Test]
+ [TestCase (ApplePlatform.iOS)]
+ [TestCase (ApplePlatform.TVOS)]
+ [TestCase (ApplePlatform.MacCatalyst)]
+ [TestCase (ApplePlatform.MacOSX)]
+ public void AppIconAndAlternateIcons (ApplePlatform platform)
+ {
+ var actool = CreateACToolTaskWithResources (platform);
+ if (platform == ApplePlatform.TVOS) {
+ actool.AppIcon = "BrandAssets";
+ actool.AlternateAppIcons = new ITaskItem [] { new TaskItem ("AlternateBrandAssets") };
+ } else {
+ actool.AppIcon = "AppIcons";
+ actool.AlternateAppIcons = new ITaskItem [] { new TaskItem ("AlternateAppIcons") };
+ }
+
+ ExecuteTask (actool);
+
+ Assert.IsNotNull (actool.PartialAppManifest, "PartialAppManifest");
+
+ var appIconsManifest = PDictionary.FromFile (actool.PartialAppManifest.ItemSpec!)!;
+ Assert.AreEqual (2, appIconsManifest.Count, $"Partial plist contents: {actool.PartialAppManifest.ItemSpec}");
+ if (platform == ApplePlatform.MacOSX || platform == ApplePlatform.MacCatalyst) {
+ Assert.AreEqual ("AppIcons", appIconsManifest.Get ("CFBundleIconFile")?.Value, "CFBundleIconFile");
+ Assert.AreEqual ("AppIcons", appIconsManifest.Get ("CFBundleIconName")?.Value, "CFBundleIconName");
+ } else if (platform == ApplePlatform.TVOS) {
+ var cfBundleIcons = appIconsManifest.Get ("CFBundleIcons");
+ Assert.AreEqual (1, cfBundleIcons.Count, "CFBundleIcons.Count");
+ Assert.AreEqual ("AppIcons", cfBundleIcons.Get ("CFBundlePrimaryIcon")?.Value, "CFBundlePrimaryIcon");
+
+ var tvTopShelfImage = appIconsManifest.Get ("TVTopShelfImage");
+ Assert.AreEqual (2, tvTopShelfImage.Count, "TVTopShelfImage.Count");
+ Assert.AreEqual ("TopShelfImage", tvTopShelfImage.Get ("TVTopShelfPrimaryImage")?.Value, "TVTopShelfPrimaryImage");
+ Assert.AreEqual ("TopShelfImageWide", tvTopShelfImage.Get ("TVTopShelfPrimaryImageWide")?.Value, "TVTopShelfPrimaryImageWide");
+ } else {
+ {
+ // iPhone
+ var cfBundleIcons = appIconsManifest.Get ("CFBundleIcons");
+ Assert.AreEqual (2, cfBundleIcons.Count, "CFBundleIcons.Count");
+
+ var cfBundlePrimaryIcon = cfBundleIcons.Get ("CFBundlePrimaryIcon");
+ Assert.AreEqual (2, cfBundlePrimaryIcon.Count, "CFBundlePrimaryIcon.Length");
+ Assert.AreEqual ("AppIcons", cfBundlePrimaryIcon.Get ("CFBundleIconName")?.Value, "CFBundleIconName");
+
+ var cfBundleIconFiles = cfBundlePrimaryIcon.Get ("CFBundleIconFiles");
+ Assert.AreEqual (1, cfBundleIconFiles.Count, "CFBundleIconFiles.Length");
+ Assert.AreEqual ("AppIcons60x60", ((PString) cfBundleIconFiles [0]).Value, "CFBundleIconFiles[0].Value");
+
+ var cfBundleAlternateIcons = cfBundleIcons.Get ("CFBundleAlternateIcons");
+ Assert.AreEqual (1, cfBundleAlternateIcons.Count, "CFBundleAlternateIcons.Count");
+
+ var alternateAppIcons = cfBundleAlternateIcons.Get ("AlternateAppIcons");
+ Assert.AreEqual (2, alternateAppIcons.Count, "CFBundleAlternateIcons.Count");
+ Assert.AreEqual ("AlternateAppIcons", alternateAppIcons.Get ("CFBundleIconName")?.Value, "CFBundleIconName");
+
+ var alternateAppIcons_CFBundleIconFiles = alternateAppIcons.Get ("CFBundleIconFiles");
+ Assert.AreEqual (2, alternateAppIcons_CFBundleIconFiles.Count, "AlternateAppIcons.CFBundleIconFiles.Count");
+ Assert.AreEqual ("AlternateAppIcons60x60", ((PString) alternateAppIcons_CFBundleIconFiles [0]).Value, "AlternateAppIcons.CFBundleIconFiles[0]");
+ Assert.AreEqual ("AlternateAppIcons76x76", ((PString) alternateAppIcons_CFBundleIconFiles [1]).Value, "AlternateAppIcons.CFBundleIconFiles[1]");
+ }
+ {
+ // iPad
+ var cfBundleIcons = appIconsManifest.Get ("CFBundleIcons~ipad");
+ Assert.AreEqual (2, cfBundleIcons.Count, "CFBundleIcons.Count");
+
+ var cfBundlePrimaryIcon = cfBundleIcons.Get ("CFBundlePrimaryIcon");
+ Assert.AreEqual (2, cfBundlePrimaryIcon.Count, "CFBundlePrimaryIcon.Length");
+ Assert.AreEqual ("AppIcons", cfBundlePrimaryIcon.Get ("CFBundleIconName")?.Value, "CFBundleIconName");
+
+ var cfBundleIconFiles = cfBundlePrimaryIcon.Get ("CFBundleIconFiles");
+ Assert.AreEqual (2, cfBundleIconFiles.Count, "CFBundleIconFiles.Length");
+ Assert.AreEqual ("AppIcons60x60", ((PString) cfBundleIconFiles [0]).Value, "CFBundleIconFiles[0].Value");
+ Assert.AreEqual ("AppIcons76x76", ((PString) cfBundleIconFiles [1]).Value, "CFBundleIconFiles[1].Value");
+
+ var cfBundleAlternateIcons = cfBundleIcons.Get ("CFBundleAlternateIcons");
+ Assert.AreEqual (1, cfBundleAlternateIcons.Count, "CFBundleAlternateIcons.Count");
+
+ var alternateAppIcons = cfBundleAlternateIcons.Get ("AlternateAppIcons");
+ Assert.AreEqual (2, alternateAppIcons.Count, "CFBundleAlternateIcons.Count");
+ Assert.AreEqual ("AlternateAppIcons", alternateAppIcons.Get ("CFBundleIconName")?.Value, "CFBundleIconName");
+
+ var alternateAppIcons_CFBundleIconFiles = alternateAppIcons.Get ("CFBundleIconFiles");
+ Assert.AreEqual (2, alternateAppIcons_CFBundleIconFiles.Count, "AlternateAppIcons.CFBundleIconFiles.Count");
+ Assert.AreEqual ("AlternateAppIcons60x60", ((PString) alternateAppIcons_CFBundleIconFiles [0]).Value, "AlternateAppIcons.CFBundleIconFiles[0]");
+ Assert.AreEqual ("AlternateAppIcons76x76", ((PString) alternateAppIcons_CFBundleIconFiles [1]).Value, "AlternateAppIcons.CFBundleIconFiles[1]");
+ }
+ }
+ }
+
+ [Test]
+ [TestCase (ApplePlatform.iOS)]
+ [TestCase (ApplePlatform.TVOS)]
+ [TestCase (ApplePlatform.MacCatalyst)]
+ [TestCase (ApplePlatform.MacOSX)]
+ public void AlternateIcons (ApplePlatform platform)
+ {
+ var actool = CreateACToolTaskWithResources (platform);
+ if (platform == ApplePlatform.TVOS) {
+ actool.AlternateAppIcons = new ITaskItem [] { new TaskItem ("AlternateBrandAssets") };
+ } else {
+ actool.AlternateAppIcons = new ITaskItem [] { new TaskItem ("AlternateAppIcons") };
+ }
+
+ ExecuteTask (actool);
+
+ var appIconsManifest = PDictionary.FromFile (actool.PartialAppManifest.ItemSpec!)!;
+ Assert.AreEqual (0, appIconsManifest.Count, $"Partial plist contents: {actool.PartialAppManifest.ItemSpec}");
+ }
+
+ [Test]
+ [TestCase (ApplePlatform.iOS)]
+ [TestCase (ApplePlatform.TVOS)]
+ [TestCase (ApplePlatform.MacCatalyst)]
+ [TestCase (ApplePlatform.MacOSX)]
+ public void InexistentAppIcon (ApplePlatform platform)
+ {
+ var actool = CreateACToolTaskWithResources (platform);
+ actool.AppIcon = "InexistentAppIcons";
+
+ ExecuteTask (actool, 1);
+ Assert.AreEqual ("Can't find the AppIcon 'InexistentAppIcons' among the image resources.", Engine.Logger.ErrorEvents [0].Message, "Error message");
+ }
+
+ [Test]
+ [TestCase (ApplePlatform.iOS)]
+ [TestCase (ApplePlatform.TVOS)]
+ [TestCase (ApplePlatform.MacCatalyst)]
+ [TestCase (ApplePlatform.MacOSX)]
+ public void InexistentAlternateIcons (ApplePlatform platform)
+ {
+ var actool = CreateACToolTaskWithResources (platform);
+ actool.AlternateAppIcons = new ITaskItem [] { new TaskItem ("InexistentAlternateAppIcons") };
+
+ ExecuteTask (actool, 1);
+ Assert.AreEqual ("Can't find the AlternateAppIcon 'InexistentAlternateAppIcons' among the image resources.", Engine.Logger.ErrorEvents [0].Message, "Error message");
+ }
+
+ [Test]
+ [TestCase (ApplePlatform.iOS)]
+ [TestCase (ApplePlatform.TVOS)]
+ [TestCase (ApplePlatform.MacCatalyst)]
+ [TestCase (ApplePlatform.MacOSX)]
+ public void BothAlternateAndMainIcon (ApplePlatform platform)
+ {
+ var actool = CreateACToolTaskWithResources (platform);
+ if (platform == ApplePlatform.TVOS) {
+ actool.AlternateAppIcons = new ITaskItem [] { new TaskItem ("BrandAssets") };
+ actool.AppIcon = "BrandAssets";
+ } else {
+ actool.AlternateAppIcons = new ITaskItem [] { new TaskItem ("AppIcons") };
+ actool.AppIcon = "AppIcons";
+ }
+
+ ExecuteTask (actool, 1);
+ Assert.AreEqual ($"The image resource '{actool.AppIcon}' is specified as both 'AppIcon' and 'AlternateAppIcon'", Engine.Logger.ErrorEvents [0].Message, "Error message");
+ }
+
+ [Test]
+ [TestCase (ApplePlatform.iOS)]
+ [TestCase (ApplePlatform.TVOS)]
+ [TestCase (ApplePlatform.MacCatalyst)]
+ [TestCase (ApplePlatform.MacOSX)]
+ public void XSAppIconAssetsAndAppIcon (ApplePlatform platform)
+ {
+ var actool = CreateACToolTaskWithResources (platform);
+ actool.AppIcon = "AppIcons";
+ actool.XSAppIconAssets = "Resources/Images.xcassets/AppIcons.appiconset";
+
+ ExecuteTask (actool, 1);
+ Assert.AreEqual ("Can't specify both 'XSAppIconAssets' in the Info.plist and 'AppIcon' in the project file. Please select one or the other.", Engine.Logger.ErrorEvents [0].Message, "Error message");
+ }
+ }
+}
diff --git a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TestHelpers/Logger.cs b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TestHelpers/Logger.cs
index bb131d1b7ad4..77523db0ce61 100644
--- a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TestHelpers/Logger.cs
+++ b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TestHelpers/Logger.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using System.Linq;
using Microsoft.Build.Framework;
@@ -48,5 +49,33 @@ public void Clear ()
MessageEvents.Clear ();
WarningsEvents.Clear ();
}
+
+ public IEnumerable AllEvents {
+ get {
+ var rv = new List ();
+ rv.AddRange (CustomEvents);
+ rv.AddRange (ErrorEvents);
+ rv.AddRange (MessageEvents);
+ rv.AddRange (WarningsEvents);
+ return rv;
+ }
+ }
+ }
+
+ public static class BuildEventArgsExtensions {
+ public static string AsString (this BuildEventArgs ea)
+ {
+ if (ea is BuildErrorEventArgs eea) {
+ return $"{eea.Code}: error: {eea.Message}";
+ } else if (ea is BuildMessageEventArgs bmea) {
+ return $"{bmea.Code}: {bmea.Message}";
+ } else if (ea is BuildWarningEventArgs bwea) {
+ return $"{bwea.Code}: warning: {bwea.Message}";
+ } else if (ea is CustomBuildEventArgs cbea) {
+ return cbea.Message;
+ } else {
+ return ea.Message;
+ }
+ }
}
}
diff --git a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TestHelpers/TestBase.cs b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TestHelpers/TestBase.cs
index b836f1fc62d9..c3ecbbe86ac9 100644
--- a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TestHelpers/TestBase.cs
+++ b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TestHelpers/TestBase.cs
@@ -67,8 +67,9 @@ public void ExecuteTask (Task task, int expectedErrorCount = 0)
var rv = task.Execute ();
if (expectedErrorCount != Engine.Logger.ErrorEvents.Count) {
string messages = string.Empty;
- if (Engine.Logger.ErrorEvents.Count > 0) {
- messages = "\n\t" + string.Join ("\n\t", Engine.Logger.ErrorEvents.Select ((v) => v.Message).ToArray ());
+ var allEvents = Engine.Logger.AllEvents.ToArray ();
+ if (allEvents.Any ()) {
+ messages = "\n\t" + string.Join ("\n\t", allEvents.Select ((v) => v.AsString ()).ToArray ());
}
Assert.AreEqual (expectedErrorCount, Engine.Logger.ErrorEvents.Count, "#RunTask-ErrorCount" + messages);
}
diff --git a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/Xamarin.MacDev.Tasks.Tests.csproj b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/Xamarin.MacDev.Tasks.Tests.csproj
index 9c01e50e5e25..45e86e521c05 100644
--- a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/Xamarin.MacDev.Tasks.Tests.csproj
+++ b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/Xamarin.MacDev.Tasks.Tests.csproj
@@ -67,6 +67,9 @@
external\ErrorHelper.tests.cs
+
+ external\SdkVersions.cs
+
external\StringUtils.cs