Unity-Technologies/UnityCsReference · error · NotSupportedException
PlayerSettings.phoneSmallTile140 is deprecated. Use GetVisua
Error message
PlayerSettings.phoneSmallTile140 is deprecated. Use GetVisualAssetsImage() instead.
What it means
PlayerSettings.WSA.phoneSmallTile140 is a removed Windows Phone 8.1 visual-asset property whose accessor unconditionally throws NotSupportedException (the 1.4x phone scale is not a valid UWP asset size). Unity dropped the Windows Phone 8.1 image set when it unified on the Universal Windows Platform, so all phone* tile/icon/splash members were gutted and the error message points you at the replacement API. Visual assets must now be accessed through GetVisualAssetsImage(WSAImageType, WSAImageScale) / SetVisualAssetsImage(string, WSAImageType, WSAImageScale). The member is also annotated [Obsolete("Use GetVisualAssetsImage()/SetVisualAssetsImage()", true)], so a direct reading (get) of phoneSmallTile140 is a compile-time error (CS0619); the runtime throw is only reachable through reflection or dynamic dispatch, in which case the message tells you to call GetVisualAssetsImage() instead.
Source
Thrown at Editor/Mono/PlayerSettingsWSA.cs:555
public static string phoneSmallTile
{
get
{
throw new NotSupportedException("PlayerSettings.phoneSmallTile is deprecated. Use GetVisualAssetsImage() instead.");
}
set
{
throw new NotSupportedException("PlayerSettings.phoneSmallTile is deprecated. Use SetVisualAssetsImage() instead.");
}
}
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
[Obsolete("Use GetVisualAssetsImage()/SetVisualAssetsImage()", true)]
public static string phoneSmallTile140
{
get
{
throw new NotSupportedException("PlayerSettings.phoneSmallTile140 is deprecated. Use GetVisualAssetsImage() instead.");
}
set
{
throw new NotSupportedException("PlayerSettings.phoneSmallTile140 is deprecated. Use SetVisualAssetsImage() instead.");
}
}
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
[Obsolete("Use GetVisualAssetsImage()/SetVisualAssetsImage()", true)]
public static string phoneSmallTile240
{
get
{
throw new NotSupportedException("PlayerSettings.phoneSmallTile240 is deprecated. Use GetVisualAssetsImage() instead.");
}
set
{
throw new NotSupportedException("PlayerSettings.phoneSmallTile240 is deprecated. Use SetVisualAssetsImage() instead.");View on GitHub (pinned to 225b0fbdb5)
Solutions
- Replace the get of phoneSmallTile140 with GetVisualAssetsImage(WSAImageType.UWPSquare71x71Logo, WSAImageScale._150), choosing the WSAImageType that matches the phone asset (UWPSquare71x71Logo) and a supported WSAImageScale.
- There is no exact UWP equivalent for the 1.4x phone scale: regenerate the source image at a supported UWP scale (100/125/150/200/400, or target sizes 16/24/32/48/256) and use that WSAImageScale. The _140/_180/_240 enum values are themselves [Obsolete].
- If the code reaches the property through reflection (e.g. enumerating PlayerSettings.WSA members), stop indexing phone* names; build an explicit name -> (WSAImageType, WSAImageScale) map and call Get/SetVisualAssetsImage instead.
- Let Unity's API Updater rewrite the references (or fix every CS0619 by hand) so the obsolete members are never referenced anywhere in the project.
Example fix
// before var path = PlayerSettings.WSA.phoneSmallTile140; // throws NotSupportedException // after (UWP visual-asset API; pick the scale that matches your source image) var path = PlayerSettings.WSA.GetVisualAssetsImage(WSAImageType.UWPSquare71x71Logo, WSAImageScale._150);
Defensive patterns
Strategy: validation
Validate before calling
// Guard before touching any PlayerSettings.WSA image member by reflection:
// refuse anything the engine has hard-deprecated with [Obsolete(..., true)].
using System;
using System.Linq;
using System.Reflection;
using UnityEditor;
static bool IsSafeAssetMember(string propertyName)
{
var prop = typeof(PlayerSettings.WSA).GetProperty(
propertyName, BindingFlags.Public | BindingFlags.Static);
if (prop == null) return false;
var obs = prop.GetCustomAttribute<ObsoleteAttribute>();
// true == treated as a compile error == always throws at runtime
return obs == null || obs.Error != true;
}
// usage:
// if (IsSafeAssetMember("phoneSmallTile")) { ... } else { use Get/SetVisualAssetsImage } Type guard
// Reject any deprecated Windows Phone 8.1 visual-asset name before reflecting on it.
static readonly System.Collections.Generic.HashSet<string> DeprecatedPhoneAssets =
new System.Collections.Generic.HashSet<string>(System.Linq.Enumerable.Range(0, 0)
.Select(_ => "")) { };
// populate once from the removed phone* set:
// phoneAppIcon(,140,240), phoneSmallTile(,140,240), phoneMediumTile(,140,240),
// phoneWideTile(,140,240), phoneSplashScreenImage(Scale140/180), phoneSplashScreenImage
static bool IsDeprecatedPhoneAsset(string name) =>
name != null && name.StartsWith("phone", System.StringComparison.Ordinal); Try / catch
// Only meaningful for reflection/dynamic access (direct use is CS0619).
try
{
_ = typeof(PlayerSettings.WSA)
.GetProperty("phoneSmallTile", BindingFlags.Public | BindingFlags.Static)
.GetValue(null, null);
}
catch (NotSupportedException ex) when (ex.Message.Contains("deprecated"))
{
// a hard-deprecated member: fall through to GetVisualAssetsImage/SetVisualAssetsImage
UnityEngine.Debug.LogWarning($"Skipped deprecated PlayerSettings.WSA member: {ex.Message}");
} Prevention
- Never reference PlayerSettings.WSA.phoneSmallTile140; migrate it to Get/SetVisualAssetsImage with WSAImageType.UWPSquare71x71Logo.
- Build against a UWP target and use only the supported WSAImageScale values (100/125/150/200/400, target 16/24/32/48/256).
- Run Unity's API Updater on upgrade and resolve every CS0619 before running the editor.
- If you reflect over PlayerSettings.WSA, filter out [Obsolete(Error = true)] members first (see IsSafeAssetMember).
- Grep the project for `phoneAppIcon`, `phoneSmallTile`, `phoneMediumTile`, `phoneWideTile`, `phoneSplashScreen` and replace each hit.
When it happens
Trigger: Executing the get accessor of PlayerSettings.WSA.phoneSmallTile140 (the deprecated region throws in both branches). For example: var path = PlayerSettings.WSA.phoneSmallTile140; // get runs the accessor body, which immediately does `throw new NotSupportedException(...)`. Because [Obsolete(...,true)] turns the call into CS0619, normal compiled C# cannot reach it; the throw fires when the property is touched via reflection (PropertyInfo.GetValue/SetValue) or a dynamic/member-access path that bypasses the compiler check.
Common situations: Upgrading a project from a Unity version that still supported Windows Phone 8.1 (the phone* setters existed and worked); legacy editor scripts, build pipelines, or CI that configured phone tile/icon/splash assets; third-party plugins/extensions that enumerate or set PlayerSettings.WSA image members by name; reflection-based PlayerSettings automation; forum/wiki/Asset Store snippets copied before the UWP migration. The throw also surfaces during automated tests or tooling that round-trips every PlayerSettings property.
Related errors
- PlayerSettings.phoneAppIcon240 is deprecated. Use SetVisualA
- PlayerSettings.phoneSmallTile is deprecated. Use GetVisualAs
- PlayerSettings.phoneSmallTile is deprecated. Use SetVisualAs
- PlayerSettings.phoneSmallTile140 is deprecated. Use SetVisua
- PlayerSettings.phoneSmallTile240 is deprecated. Use GetVisua
AI-assisted analysis of Unity-Technologies/UnityCsReference@225b0fbdb5 (2026-08-13).
Data as JSON: /api/errors/d7d0a604082bae17.
Report an issue: GitHub.