publicstaticList<string>classic_only_arguments=newList<string>();// list of deprecated arguments, which (if used) will cause errors in Unified profile)
//
// We need to put a hard dep on Mono.Cecil.Mdb.dll so that it get's mkbundled
throwErrorHelper.CreateError(71,"Unknown platform: {0}. This usually indicates a bug in Xamarin.iOS; please file a bug report at http://bugzilla.xamarin.com with a test case.",app.Platform);
throwErrorHelper.CreateError(71,"Unknown platform: {0}. This usually indicates a bug in Xamarin.iOS; please file a bug report at http://bugzilla.xamarin.com with a test case.",app.Platform);
throwErrorHelper.CreateError(71,"Unknown platform: {0}. This usually indicates a bug in Xamarin.iOS; please file a bug report at http://bugzilla.xamarin.com with a test case.",app.Platform);
throwErrorHelper.CreateError(71,"Unknown platform: {0}. This usually indicates a bug in Xamarin.iOS; please file a bug report at http://bugzilla.xamarin.com with a test case.",app.Platform);
}
}
}
publicstaticstringProductAssembly{
get{
switch(app.Platform){
caseApplePlatform.iOS:
returnapp.IsUnified?"Xamarin.iOS":"monotouch";
caseApplePlatform.WatchOS:
return"Xamarin.WatchOS";
caseApplePlatform.TVOS:
return"Xamarin.TVOS";
default:
throwErrorHelper.CreateError(71,"Unknown platform: {0}. This usually indicates a bug in Xamarin.iOS; please file a bug report at http://bugzilla.xamarin.com with a test case.",app.Platform);
}
}
}
publicstaticboolLLVMAsmWriter{
get{
if(llvm_asmwriter.HasValue)
returnllvm_asmwriter.Value;
switch(app.Platform){
caseApplePlatform.iOS:
returnfalse;
caseApplePlatform.TVOS:
caseApplePlatform.WatchOS:
returntrue;
default:
throwErrorHelper.CreateError(71,"Unknown platform: {0}. This usually indicates a bug in Xamarin.iOS; please file a bug report at http://bugzilla.xamarin.com with a test case.",app.Platform);
// FindSystemXcode showed a warning in this case. In particular do not use 'string.IsNullOrEmpty' here,
// because FindSystemXcode may return an empty string (with no warning printed) if the xcode-select command
// succeeds, but returns nothing.
sdk_root=null;
}elseif(!Directory.Exists(sdk_root)){
ErrorHelper.Warning(60,"Could not find the currently selected Xcode on the system. 'xcode-select --print-path' returned '{0}', but that directory does not exist.",sdk_root);
sdk_root=null;
}else{
if(!accept_any_xcode_version)
ErrorHelper.Warning(61,"No Xcode.app specified (using --sdkroot), using the system Xcode as reported by 'xcode-select --print-path': {0}",sdk_root);
}
if(sdk_root==null){
sdk_root=XcodeDefault;
if(!Directory.Exists(sdk_root))
throwErrorHelper.CreateError(56,"Cannot find Xcode in the default location (/Applications/Xcode.app). Please install Xcode, or pass a custom path using --sdkroot <path>.");
ErrorHelper.Warning(62,"No Xcode.app specified (using --sdkroot or 'xcode-select --print-path'), using the default Xcode instead: {0}",sdk_root);
}
}elseif(!Directory.Exists(sdk_root)){
throwErrorHelper.CreateError(55,"The Xcode path '{0}' does not exist.",sdk_root);
throwErrorHelper.CreateError(57,"Cannot determine the path to Xcode.app from the sdk root '{0}'. Please specify the full path to the Xcode.app bundle.",sdk_root);
throwErrorHelper.CreateError(58,"The Xcode.app '{0}' is invalid (the file '{1}' does not exist).",Path.GetDirectoryName(Path.GetDirectoryName(developer_directory)),plist_path);
ErrorHelper.Error(51,"Xamarin.iOS {0} requires Xcode 6.0 or later. The current Xcode version (found in {2}) is {1}.",Constants.Version,XcodeVersion.ToString(),sdk_root);
ErrorHelper.Warning(79,"The recommended Xcode version for Xamarin.iOS {0} is Xcode 7.0 or later. The current Xcode version (found in {2}) is {1}.",Constants.Version,XcodeVersion.ToString(),sdk_root);
Driver.Log(1,"Using Xcode {0} found in {1}",XcodeVersion,sdk_root);
throwErrorHelper.CreateError(71,"Unknown platform: {0}. This usually indicates a bug in Xamarin.iOS; please file a bug report at http://bugzilla.xamarin.com with a test case.",app.Platform);
thrownewException("Unsupported flag to -aot-options");
aot_other_args=v+" "+aot_other_args;
}
},
{"gsharedvt:","Generic sharing for value-types - always enabled [Deprecated]",v=>{}},
{"libdir","Directories that contains the assemblies to use for compiling [Deprecated]",v=>{classic_only_arguments.Add("--libdir");},true},
{"v","Verbose",v=>verbose++},
{"q","Quiet",v=>verbose--},
{"n","Dry run [Deprecated]",v=>{dry_run=true;classic_only_arguments.Add("-n");},true},
{"keeptemp","[Deprecated]",v=>{classic_only_arguments.Add("--keeptemp");},true/* deprecated, hide it for the future, but don't show errors if it's present */},
{"time",v=>watch_level++},
{"executable=","Specifies the native executable name to output",v=>app.ExecutableName=v},
{"m|main=","Specifies the name of the main startup file, defaults to main.m [Deprecated]",v=>{classic_only_arguments.Add("--main");},true},
{"nomanifest","Do not generate PkgInfo and Info.plist [Deprecated in the Unified API]",v=>{app.GenerateManifests=false;classic_only_arguments.Add("--nomanifest");}},
{"nofastsim","Do not run the simulator fast-path build",v=>fast_sim=false},
{"nolink","Do not link the assemblies",v=>app.LinkMode=LinkMode.None},
{"nodebugtrack","Disable debug tracking of object resurrection bugs",v=>debug_track=false},
{"debugtrack:","Enable debug tracking of object resurrection bugs (enabled by default for the simulator)",v=>{debug_track=ParseBool(v,"--debugtrack");}},
{"linkerdumpdependencies","Dump linker dependencies for linker-analyzer tool",v=>app.LinkerDumpDependencies=true},
{"linksdkonly","Link only the SDK assemblies",v=>app.LinkMode=LinkMode.SDKOnly},
{"linkskip=","Skip linking of the specified assembly",v=>app.LinkSkipped.Add(v)},
{"nolinkaway","Disable the linker step which replace code with a 'Linked Away' exception.",v=>app.LinkAway=false},
{"xml=","Provide an extra XML definition file to the linker",v=>app.Definitions.Add(v)},
{"i18n=","List of i18n assemblies to copy to the output directory, separated by commas (none,all,cjk,mideast,other,rare,west)",v=>app.I18n=LinkerOptions.ParseI18nAssemblies(v)},
{"symbollist=","Asks mtouch to create a file with all the symbols that should not be stripped instead of stripping.",v=>app.SymbolList=v,true/* hidden, this is only used between mtouch and the MSBuild tasks, not for public consumption */},
{"nostrip","Do not strip the AOT compiled assemblies",v=>app.ManagedStrip=false},
{"nosymbolstrip:","A comma-separated list of symbols to not strip from the app (if the list is empty, stripping is disabled completely)",v=>
{
if(string.IsNullOrEmpty(v)){
app.NativeStrip=false;
}else{
app.NoSymbolStrip.AddRange(v.Split(','));
}
}},
{"dsym:","Turn on (default for device) or off (default for simulator) .dSYM symbols.",v=>app.BuildDSym=ParseBool(v,"dsym")},
{"nosign","Do not sign the application [Deprecated in the Unified API]",v=>{app.Sign=false;classic_only_arguments.Add("--nosign");}},
{"dlsym:","Use dlsym to resolve pinvokes in AOT compiled assemblies",v=>app.ParseDlsymOptions(v)},
{"r|ref=","Add an assembly to the resolver",v=>app.References.Add(v)},
{"gcc_flags=","Set flags to be passed along to gcc at link time",v=>app.UserGccFlags=v},
{"framework=","Link with the specified framework. This can either be a system framework (like 'UIKit'), or it can be a path to a custom framework ('/path/to/My.framework'). In the latter case the entire 'My.framework' directory is copied into the app as well.",(v)=>app.Frameworks.Add(v)},
{"weak-framework=","Weak link with the specified framework. This can either be a system framework (like 'UIKit'), or it can be a path to a custom framework ('/path/to/My.framework'). In the latter case the entire 'My.framework' directory is copied into the app as well.",(v)=>app.Frameworks.Add(v)},
//
// Bundle configuration
//
{"displayname=","Specifies the display name [Deprecated]",v=>{app.BundleDisplayName=v;classic_only_arguments.Add("--displayname");},true},
{"bundleid=","Specifies the bundle identifier (com.foo.exe) [Deprecated]",v=>{app.BundleId=v;classic_only_arguments.Add("--bundleid");},true},
{"mainnib=","Specifies the name of the main Nib file to load [Deprecated]",v=>{app.MainNib=v;classic_only_arguments.Add("--mainnib");},true},
{"icon=","Specifies the name of the icon to use [Deprecated]",v=>{app.Icon=v;classic_only_arguments.Add("--icon");},true},
// What we do
{"sim=","Compile for the Simulator, specify the output directory for code",v=>
{
SetAction(Action.Build);
output_dir=v;
app.BuildTarget=BuildTarget.Simulator;
}
},
{"dev=","Compile for the Device, specify the output directory for the code",v=>{
SetAction(Action.Build);
output_dir=v;
app.BuildTarget=BuildTarget.Device;
}
},
{"c|certificate=","The Code Signing certificate for the application [Deprecated]",v=>{app.CertificateName=v;classic_only_arguments.Add("--certificate");},true},
// Configures the tooling used to build code.
{"sdk=","Specifies the name of the SDK to compile against (version, for example \"3.2\")",
v=>{
try{
sdk_version=Version.Parse(v);
}catch(Exceptionex){
ErrorHelper.Error(26,ex,"Could not parse the command line argument '{0}': {1}","-sdk",ex.Message);
}
}
},
{"targetver=","Specifies the name of the minimum deployment target (version, for example \""+Xamarin.SdkVersions.iOS.ToString()+"\")",
v=>{
try{
app.DeploymentTarget=Version.Parse(v);
}catch(Exceptionex){
thrownewMonoTouchException(26,true,ex,"Could not parse the command line argument '{0}': {1}","-targetver",ex.Message);
}
}
},
{"device=","Specifies the device type to launch the simulator as [DEPRECATED]",v=>{},true},
// Launch/debug options
{"timeout:","Specify a timeout (in seconds) for the commands that doesn't have fixed/known duration. Default: 0.5 [DEPRECATED]",v=>{},true},
{"listapps","List the apps installed on the device to stderr. [DEPRECATED]",v=>{SetAction(Action.ListApps);},true},
{"listsim=","List the available simulators. The output is xml, and written to the specified file. [DEPRECATED]",v=>{SetAction(Action.ListSimulators);},true},
{"listdev:","List the currently connected devices and their UDIDs [DEPRECATED]",v=>{SetAction(Action.ListDevices);},true},
{"installdev=","Install the specified MonoTouch.app in the device [DEPRECATED]",v=>{SetAction(Action.InstallDevice);},true},
{"launchdev=","Launch an app that is installed on device, specified by bundle identifier [DEPRECATED]",v=>{SetAction(Action.LaunchDevice);},true},
{"debugdev=","Launch app app that is installed on device, specified by bundle identifer, and wait for a native debugger to attach. [DEPRECATED]",v=>{SetAction(Action.DebugDevice);},true},
{"provide-assets=","If the app contains on-demand resources, then mtouch should provide those from this .app directory. [DEPRECATED]",v=>{},true},
{"wait-for-exit:","If mtouch should wait until the launched app exits before existing. [DEPRECATED]",v=>{},true},
{"wait-for-unlock:","If mtouch should wait until the device is unlocked when launching an app (or exit with an error code). [DEPRECATED]",v=>{},true},
{"killdev=","Kill an app that is running on device, specified by bundle identifier [DEPRECATED]",v=>{SetAction(Action.KillApp);},true},
{"logdev","Write the syslog from the device to the console [DEPRECATED]",v=>{SetAction(Action.LogDev);},true},
{"list-crash-reports:","Lists crash reports on the specified device [DEPRECATED]",v=>{SetAction(Action.ListCrashReports);},true},
{"download-crash-report=","Download a crash report from the specified device [DEPRECATED]",v=>{SetAction(Action.DownloadCrashReport);},true},
{"download-crash-report-to=","Specifies the file to save the downloaded crash report. [DEPRECATED]",v=>{},true},
{"devname=","Specify which device (when many are present) the [install|lauch|kill|log]dev command applies [DEPRECATED]",v=>{},true},
{"isappinstalled=","Check if the specified app id is installed. Returns 0 when installed, 1 if not. [DEPRECATED]",v=>{SetAction(Action.IsAppInstalled);},true},
{"launchsim=","Launch the specified MonoTouch.app in the simulator [DEPRECATED]",v=>{SetAction(Action.LaunchSim);},true},
{"enable-native-debugging:","Don't do anything that may interfere with native debugging (such as avoiding the iOS simulator launch timeout). [DEPRECATED]",v=>{},true},
{"installsim=","Install the specified MonoTouch.app in the simulator [DEPRECATED]",v=>{SetAction(Action.InstallSim);},true},
{"launchsimwatch=","Specify the watch app to launch [DEPRECATED]",v=>{SetAction(Action.LaunchWatchApp);},true},
{"killsimwatch=","Specify the watch app to kill [DEPRECATED]",v=>{SetAction(Action.KillWatchApp);},true},
{"watchnotificationpayload=","Specify the jSON notification payload file [DEPRECATED]",v=>{},true},
{"watchlaunchmode=","Specify the watch launch mode (Default|Glance|Notification) [DEPRECATED]",v=>{},true},
{"enable-background-fetch","Enable mode to send background fetch requests [Deprecated]",v=>{},true},
{"launch-for-background-fetch","Launch due to a background fetch [DEPRECATED]",v=>{},true},
{"debugsim=","Debug the specified MonoTouch.app in the simulator [DEPRECATED]",v=>{SetAction(Action.DebugSim);},true},
{"argument=","Launch the app with this command line argument. This must be specified multiple times for multiple arguments [DEPRECATED]",v=>{},true},
{"setenv=","Set the environment variable in the application on startup",v=>
{
inteq=v.IndexOf('=');
if(eq<=0)
thrownewMonoTouchException(2,true,"Could not parse the environment variable '{0}'",v);
stringname=v.Substring(0,eq);
stringvalue=v.Substring(eq+1);
environment_variables.Add(name,value);
}
},
{"sgen:","Enable the SGen garbage collector",
v=>{
if(!ParseBool(v,"sgen"))
ErrorHelper.Warning(43,"The Boehm garbage collector is not supported. The SGen garbage collector has been selected instead.");
},
true// do not show the option anymore
},
{"boehm:","Enable the Boehm garbage collector",
v=>{
if(ParseBool(v,"boehm"))
ErrorHelper.Warning(43,"The Boehm garbage collector is not supported. The SGen garbage collector has been selected instead.");},
true// do not show the option anymore
},
{"new-refcount:","Enable new refcounting logic",
v=>{
if(!ParseBool(v,"new-refcount"))
ErrorHelper.Warning(80,"Disabling the new refcount logic is deprecated.");
},
true// do not show the option anymore
},
{"llvm","Enable the LLVM compiler [Deprecated, use --abi instead]",v=>{app.ParseAbi("armv7+llvm");classic_only_arguments.Add("--llvm");},true},
{"thumb","Enable LLVM-Thumb support [Deprecated, use --abi instead]",v=>{app.ParseAbi("armv7+llvm+thumb2");classic_only_arguments.Add("--thumb");},true},
{"armv7","Enable ARMv7 support [Deprecated, use --abi instead]",v=>{app.ParseAbi("armv7");classic_only_arguments.Add("--armv7");},true},
{"abi=","Comma-separated list of ABIs to target. Currently supported: armv7, armv7+llvm, armv7+llvm+thumb2, armv7s, armv7s+llvm, armv7s+llvm+thumb2, arm64, arm64+llvm, i386, x86_64",v=>app.ParseAbi(v)},
{"override-abi=","Override any previous abi. Only used for testing.",v=>{app.ClearAbi();app.ParseAbi(v);},true},// Temporary command line arg until XS has better support for 64bit architectures.
{"cxx","Enable C++ support",v=>{app.EnableCxx=true;}},
{"enable-repl:","Enable REPL support (simulator and not linking only)",v=>{app.EnableRepl=ParseBool(v,"enable-repl");},true/* this is a hidden option until we've actually used it and made sure it works as expected */},
{"pie:","Enable (default) or disable PIE (Position Independent Executable).",v=>{app.EnablePie=ParseBool(v,"pie");}},
{"compiler=","Specify the Objective-C compiler to use (valid values are gcc, g++, clang, clang++ or the full path to a GCC-compatible compiler).",v=>{compiler=v;}},
{"fastdev","Build an app that supports fastdev (this app will only work when launched using Xamarin Studio)",v=>{app.FastDev=true;}},
{"debug:","Generate debug code in Mono for the specified assembly (set to 'all' to generate debug code for all assemblies, the default is to generate debug code for user assemblies only)",
v=>{
app.EnableDebug=true;
if(v!=null){
if(v=="all"){
debug_all=true;
return;
}
debug_assemblies.Add(Path.GetFileName(v));
}
}
},
{"package-mdb:","Specify whether debug info files (*.mdb) should be packaged in the app. Default is 'true' for debug builds and 'false' for release builds.",v=>app.PackageMdb=ParseBool(v,"package-mdb")},
{"msym:","Specify whether managed symbolication files (*.msym) should be created. Default is 'false' for debug builds and 'true' for release builds.",v=>app.EnableMSym=ParseBool(v,"msym")},
{"extension",v=>app.IsExtension=true},
{"app-extension=","The path of app extensions that are included in the app. This must be specified once for each app extension.",v=>app.Extensions.Add(v),true/* MSBuild-internal for now */},
{"noregistrar","Disable the optimized class registrar [Deprecated, use --registrar:dynamic instead]",v=>{app.Registrar=RegistrarMode.Dynamic;classic_only_arguments.Add("--noregistrar");},true},
{"registrar:","Specify the registrar to use (dynamic, static or default (dynamic in the simulator, static on device))",v=>
{
varsplit=v.Split('=');
varname=split[0];
varvalue=split.Length>1?split[1]:string.Empty;
switch(name){
case"static":
app.Registrar=RegistrarMode.Static;
break;
case"dynamic":
app.Registrar=RegistrarMode.Dynamic;
break;
case"default":
app.Registrar=RegistrarMode.Default;
break;
case"legacy":
app.Registrar=RegistrarMode.Legacy;
break;
case"legacystatic":
case"oldstatic":
app.Registrar=RegistrarMode.LegacyStatic;
break;
case"legacydynamic":
case"olddynamic":
app.Registrar=RegistrarMode.LegacyDynamic;
break;
default:
thrownewMonoTouchException(20,true,"The valid options for '{0}' are '{1}'.","--registrar","static, dynamic or default");
}
switch(value){
case"trace":
app.RegistrarOptions=RegistrarOptions.Trace;
break;
case"default":
case"":
app.RegistrarOptions=RegistrarOptions.Default;
break;
default:
thrownewMonoTouchException(20,true,"The valid options for '{0}' are '{1}'.","--registrar","static, dynamic or default");
}
}
},
{"runregistrar:","Runs the registrar on the input assembly and outputs a corresponding native library.",
{"crashreporting-api-key=","Specify the Crashlytics API key to use (which will also enable Crashlytics support). [Deprecated].",v=>
{
thrownewMonoTouchException(16,true,"The option '{0}' has been deprecated.","--crashreporting-api-key");
},true
},
{"crashreporting-delay=","Specify the delay before Crashlytics should process crash reports in the backgorund. [Deprecated].",v=>
{
thrownewMonoTouchException(16,true,"The option '{0}' has been deprecated.","--crashreporting-delay");
},true
},
{"crashreporting-console-poll-interval=","Specify how often (in milliseconds) to poll the Device Console for new messages to be copied to crash reports (set to 0 to disable). Disabled by default. [Deprecated].",v=>
{
thrownewMonoTouchException(16,true,"The option '{0}' has been deprecated.","--crashreporting-console-poll-interval");
},true
},
{"no-xcode-version-check","Ignores the Xcode version check.",v=>{xcode_version_check=false;},true/* This is a non-documented option. Please discuss any customers running into the xcode version check on the maciosdev@ list before giving this option out to customers. */},
{"mono:","Comma-separated list of options for how the Mono runtime should be included. Possible values: 'static' (link statically), 'framework' (linked as a user framework), '[no-]package-framework' (if the Mono.framework should be copied to the app bundle or not. The default value is 'framework' for extensions, and main apps if the app targets iOS 8.0 or later and contains extensions, otherwise 'static'. The Mono.framework will be copied to the app bundle if mtouch detects it's needed, but this may be overridden if the default values for 'framework' vs 'static' is overwridden.",v=>
{
foreach(varoptinv.Split(newchar[]{','})){
switch(v){
case"static":
app.UseMonoFramework=false;
break;
case"framework":
app.UseMonoFramework=true;
break;
case"package-framework":
app.PackageMonoFramework=true;
break;
case"no-package-framework":
app.PackageMonoFramework=false;
break;
default:
thrownewMonoTouchException(20,true,"The valid options for '{0}' are '{1}'.","--mono","static, framework or [no-]package-framework");
}
}
}
},
{"target-framework=","Specify target framework to use. Currently supported: 'MonoTouch,v1.0', 'Xamarin.iOS,v1.0', 'Xamarin.WatchOS,v1.0' and 'Xamarin.TVOS,v1.0' (defaults to '"+TargetFramework.Default+"')",v=>SetTargetFramework(v)},
{"bitcode:","Enable generation of bitcode (asmonly, full, marker)",v=>
{
switch(v){
case"asmonly":
app.BitCodeMode=BitCodeMode.ASMOnly;
break;
case"full":
app.BitCodeMode=BitCodeMode.LLVMOnly;
break;
case"marker":
app.BitCodeMode=BitCodeMode.MarkerOnly;
break;
default:
thrownewMonoTouchException(20,true,"The valid options for '{0}' are '{1}'.","--bitcode","asmonly, full or marker");
}
}
},
{"llvm-asm","Make the LLVM compiler emit assembly files instead of object files. [Deprecated]",v=>{llvm_asmwriter=true;},true},
{"http-message-handler=","Specify the default HTTP message handler for HttpClient",v=>{http_message_handler=v;}},
{"output-format=","Specify the output format for some commands. Possible values: Default, XML",v=>
{
}
},
{"tls-provider=","Specify the default TLS provider",v=>{tls_provider=v;}},
thrownewMonoTouchException(6,true,"There is no devel platform at {0}, use --platform=PLAT to specify the SDK",PlatformDirectory);
if(!Directory.Exists(output_dir))
thrownewMonoTouchException(5,true,"The output directory '{0}' does not exist",output_dir);
if(assemblies.Count!=1){
varexceptions=newList<Exception>();
for(inti=assemblies.Count-1;i>=0;i--){
if(assemblies[i].StartsWith("-")){
exceptions.Add(newMonoTouchException(18,true,"Unknown command line argument: '{0}'",assemblies[i]));
assemblies.RemoveAt(i);
}
}
if(assemblies.Count>1){
exceptions.Add(newMonoTouchException(8,true,"You should provide one root assembly only, found {0} assemblies: '{1}'",assemblies.Count,string.Join("', '",assemblies.ToArray())));
}elseif(assemblies.Count==0){
exceptions.Add(newMonoTouchException(17,true,"You should provide a root assembly."));
thrownewMonoTouchException(5103,true,"Could not find neither the '{0}' nor the '{1}' compiler. Please install Xcode 'Command-Line Tools' component",compiler,original_compiler);
}
}
}
// workaround issues like:
// * Xcode 4.x versus 4.3 (location of /Developer); and
// * the (optional) installation of "Command-Line Tools" by Xcode
publicstaticvoidRunStrip(stringoptions)
{
// either /Developer (Xcode 4.2 and earlier), /Applications/Xcode.app/Contents/Developer (Xcode 4.3) or user override
thrownewException(string.Format("Could not lstat '{0}': {1}",file,Marshal.GetLastWin32Error()));
constintS_IFLNK=40960;
return(buf.st_mode&S_IFLNK)==S_IFLNK;
}
publicstaticFrameworksFrameworks{
get{
switch(app.Platform){
caseApplePlatform.iOS:
returnFrameworks.iOSFrameworks;
caseApplePlatform.WatchOS:
returnFrameworks.WatchFrameworks;
caseApplePlatform.TVOS:
returnFrameworks.TVOSFrameworks;
default:
throwErrorHelper.CreateError(71,"Unknown platform: {0}. This usually indicates a bug in Xamarin.iOS; please file a bug report at http://bugzilla.xamarin.com with a test case.",app.Platform);