| 
					
				 | 
			
			
				@@ -42,6 +42,7 @@ namespace Grpc.Core.Internal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         static readonly bool isMono; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         static readonly bool isNetCore; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         static readonly bool isUnity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        static readonly bool isUnityIOS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         static readonly bool isXamarin; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         static readonly bool isXamarinIOS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         static readonly bool isXamarinAndroid; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -63,7 +64,25 @@ namespace Grpc.Core.Internal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             isNetCore = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             isMono = Type.GetType("Mono.Runtime") != null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            isUnity = Type.GetType(UnityEngineApplicationClassName) != null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // Unity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var unityApplicationClass = Type.GetType(UnityEngineApplicationClassName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (unityApplicationClass != null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                isUnity = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // Consult value of Application.platform via reflection 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // https://docs.unity3d.com/ScriptReference/Application-platform.html 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var platformProperty = unityApplicationClass.GetTypeInfo().GetProperty("platform"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var unityRuntimePlatform = platformProperty?.GetValue(null)?.ToString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                isUnityIOS = (unityRuntimePlatform == "IPhonePlayer"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                isUnity = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                isUnityIOS = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // Xamarin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             isXamarinIOS = Type.GetType(XamarinIOSObjectClassName) != null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             isXamarinAndroid = Type.GetType(XamarinAndroidObjectClassName) != null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             isXamarin = isXamarinIOS || isXamarinAndroid; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -97,6 +116,14 @@ namespace Grpc.Core.Internal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             get { return isUnity; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /// true if running on Unity iOS, false otherwise. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /// </summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public static bool IsUnityIOS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            get { return isUnityIOS; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// true if running on a Xamarin platform (either Xamarin.Android or Xamarin.iOS), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /// false otherwise. 
			 |