private static void ApplyIosConfig(BuildConfig config)
		{
			PlayerSettings.iOS.sdkVersion = config.Ios.SdkVersion;
			PlayerSettings.iOS.targetOSVersion = config.Ios.TargetIosVersion;

			// TODO add missing properties
		}
		private static void ApplyCommonConfig(BuildConfig config)
		{
			EditorUserBuildSettings.SwitchActiveBuildTarget(config.TargetPlatform);
			
			EditorUserBuildSettings.development = config.IsDevelopmentBuild;
			EditorUserBuildSettings.allowDebugging = config.EnableScriptDebugging;
			PlayerSettings.bundleIdentifier = config.BundleId;
			PlayerSettings.bundleVersion = config.BundleVersion;
		}
        private static void ApplyAdroidConfig(BuildConfig config)
        {
            PlayerSettings.Android.keystoreName = config.Android.SigningConfig.StorePath;
            PlayerSettings.Android.keystorePass = config.Android.SigningConfig.StorePassword;
            PlayerSettings.Android.keyaliasName = config.Android.SigningConfig.KeyAlias;
            PlayerSettings.Android.keyaliasPass = config.Android.SigningConfig.KeyPassword;

            PlayerSettings.Android.bundleVersionCode    = config.Android.BundleVersionCode;
            PlayerSettings.Android.useAPKExpansionFiles = config.Android.SplitApplicationBinary;

            // TODO make configurable
            EditorUserBuildSettings.androidBuildSubtarget = MobileTextureSubtarget.ETC;
        }
		private static void ApplyAdroidConfig(BuildConfig config)
		{
			PlayerSettings.Android.keystoreName = config.Android.SigningConfig.StorePath;
			PlayerSettings.Android.keystorePass = config.Android.SigningConfig.StorePassword;
			PlayerSettings.Android.keyaliasName = config.Android.SigningConfig.KeyAlias;
			PlayerSettings.Android.keyaliasPass = config.Android.SigningConfig.KeyPassword;

			PlayerSettings.Android.bundleVersionCode = config.Android.BundleVersionCode;
			PlayerSettings.Android.useAPKExpansionFiles = config.Android.SplitApplicationBinary;

			// TODO make configurable
			EditorUserBuildSettings.androidBuildSubtarget = AndroidBuildSubtarget.ETC;
		}
		private static void ApplyConfig(BuildConfig config)
		{
			ApplyCommonConfig(config);

			switch(config.TargetPlatform) {
			case BuildTarget.Android:
				ApplyAdroidConfig(config);
				break;
			case BuildTarget.iPhone:
				ApplyIosConfig(config);
				break;
			}
		}
        private static void ApplyConfig(BuildConfig config)
        {
            ApplyCommonConfig(config);

            switch (config.TargetPlatform)
            {
            case BuildTarget.Android:
                ApplyAdroidConfig(config);
                break;

            case BuildTarget.iOS:
                ApplyIosConfig(config);
                break;
            }
        }
        private static void PerformBuild(BuildConfig config)
        {
            if ((config.TargetPlatform != BuildTarget.Android) && (config.TargetPlatform != BuildTarget.iOS))
            {
                Debug.LogError("GradleBuildHelper error. Unsupported platform: " + config.TargetPlatform);
                return;
            }

            Debug.Log("GradleBuildHelper: start build " + config.TargetPlatform);

            RecreateDirectory(config.OutputPath);

            var errorMessage = BuildPipeline.BuildPlayer(
                config.Scenes,
                Path.Combine(config.OutputPath, config.OutputName),
                config.TargetPlatform,
                config.IsDevelopmentBuild ? BuildOptions.Development :BuildOptions.None
                );

            OutputBuildResult(errorMessage);
        }
		private static void PerformBuild(BuildConfig config)
		{
			if((config.TargetPlatform != BuildTarget.Android) && (config.TargetPlatform != BuildTarget.iPhone))
			{
				Debug.LogError("GradleBuildHelper error. Unsupported platform: " + config.TargetPlatform);
				return;
			}

			Debug.Log("GradleBuildHelper: start build " + config.TargetPlatform);

			RecreateDirectory(config.OutputPath);

			var errorMessage = BuildPipeline.BuildPlayer(
				config.Scenes, 
				Path.Combine(config.OutputPath, config.OutputName), 
				config.TargetPlatform, 
				config.IsDevelopmentBuild ? BuildOptions.Development :BuildOptions.None
			);

			OutputBuildResult(errorMessage);
		}