public override void Convert() { var inputProject = new XmlDocument(); var xml = File.ReadAllText(TemplatePath); xml = xml.Replace("#FILES#", GetFileList()); inputProject.LoadXmlWithoutNetworkAccess(xml); switch (Flavor) { case MacFlavors.Modern: inputProject.SetTargetFrameworkIdentifier("Xamarin.Mac"); inputProject.SetTargetFrameworkVersion("v2.0"); inputProject.RemoveNode("UseXamMacFullFramework"); inputProject.AddAdditionalDefines("MOBILE;XAMMAC"); inputProject.AddReference("Mono.Security"); break; case MacFlavors.Full: inputProject.AddAdditionalDefines("XAMMAC_4_5"); break; default: throw new NotImplementedException(Flavor.ToString()); } inputProject.SetOutputPath("bin\\$(Platform)\\$(Configuration)" + FlavorSuffix); inputProject.SetIntermediateOutputPath("obj\\$(Platform)\\$(Configuration)" + FlavorSuffix); inputProject.SetAssemblyName(inputProject.GetAssemblyName() + FlavorSuffix); Harness.Save(inputProject, ProjectPath); }
public static void AddProjectDefines( XmlDocument project, MonoNativeLinkMode link, string platform, string config) { switch (link) { case MonoNativeLinkMode.Static: project.AddAdditionalDefines("MONO_NATIVE_STATIC", platform, config); project.RemoveDefines("MONO_NATIVE_DYNAMIC; MONO_NATIVE_SYMLINK", platform, config); break; case MonoNativeLinkMode.Dynamic: project.AddAdditionalDefines("MONO_NATIVE_DYNAMIC", platform, config); project.RemoveDefines("MONO_NATIVE_STATIC; MONO_NATIVE_SYMLINK", platform, config); break; case MonoNativeLinkMode.Symlink: project.AddAdditionalDefines("MONO_NATIVE_SYMLINK", platform, config); project.RemoveDefines("MONO_NATIVE_MONO_NATIVE_STATIC; MONO_NATIVE_DYNAMIC", platform, config); break; default: throw new Exception($"Unknown MonoNativeLinkMode: {link}"); } }
public static void AddProjectDefines( XmlDocument project, MonoNativeFlavor flavor, string platform = null, string config = null) { switch (flavor) { case MonoNativeFlavor.Compat: if (platform != null) { project.AddAdditionalDefines("MONO_NATIVE_COMPAT", platform, config); } else { project.AddAdditionalDefines("MONO_NATIVE_COMPAT"); } break; case MonoNativeFlavor.Unified: if (platform != null) { project.AddAdditionalDefines("MONO_NATIVE_UNIFIED", platform, config); } else { project.AddAdditionalDefines("MONO_NATIVE_UNIFIED"); } break; default: throw new Exception($"Unknown MonoNativeFlavor: {flavor}"); } }
void CreateWatchOSContainerProject() { var csproj = new XmlDocument(); csproj.LoadWithoutNetworkAccess(Path.Combine(Harness.WatchOSContainerTemplate, "Container.csproj")); csproj.FindAndReplace("%CONTAINER_PATH%", Path.GetFullPath(Harness.WatchOSContainerTemplate).Replace('/', '\\') + "\\"); csproj.FindAndReplace("%WATCHAPP_CSPROJ%", Path.GetFileName(WatchOSAppProjectPath)); csproj.SetProjectReferenceValue(Path.GetFileName(WatchOSAppProjectPath), "Name", Path.GetFileNameWithoutExtension(WatchOSAppProjectPath)); WatchOSGuid = "{" + Harness.NewStableGuid().ToString().ToUpper() + "}"; csproj.SetProjectGuid(WatchOSGuid); csproj.FixInfoPListInclude(Suffix); if (MonoNativeInfo != null) { csproj.AddAdditionalDefines("MONO_NATIVE_WATCH"); MonoNativeHelper.AddProjectDefines(csproj, MonoNativeInfo.Flavor); MonoNativeHelper.RemoveSymlinkMode(csproj); } Harness.Save(csproj, WatchOSProjectPath); XmlDocument info_plist = new XmlDocument(); var target_info_plist = Path.Combine(TargetDirectory, $"Info{Suffix}.plist"); info_plist.LoadWithoutNetworkAccess(Path.Combine(Harness.WatchOSContainerTemplate, "Info.plist")); info_plist.SetCFBundleIdentifier(BundleIdentifier); info_plist.SetCFBundleName(Name); info_plist.SetMinimumOSVersion("9.0"); Harness.Save(info_plist, target_info_plist); }
void CreateWatchOSAppProject() { var csproj = new XmlDocument(); var suffix = Suffix + "-app"; csproj.LoadWithoutNetworkAccess(Path.Combine(Harness.WatchOSAppTemplate, "App.csproj")); csproj.FindAndReplace("%WATCHAPP_PATH%", Path.GetFullPath(Harness.WatchOSAppTemplate).Replace('/', '\\') + "\\"); csproj.FindAndReplace("%WATCHEXTENSION_CSPROJ%", Path.GetFileName(WatchOSExtensionProjectPath)); csproj.SetProjectReferenceValue(Path.GetFileName(WatchOSExtensionProjectPath), "Project", WatchOSExtensionGuid); csproj.SetProjectReferenceValue(Path.GetFileName(WatchOSExtensionProjectPath), "Name", Path.GetFileNameWithoutExtension(WatchOSExtensionProjectPath)); WatchOSAppGuid = "{" + Harness.NewStableGuid().ToString().ToUpper() + "}"; csproj.SetProjectGuid(WatchOSAppGuid); csproj.FixInfoPListInclude(suffix); if (MonoNativeInfo != null) { csproj.AddAdditionalDefines("MONO_NATIVE_WATCH"); MonoNativeHelper.AddProjectDefines(csproj, MonoNativeInfo.Flavor); MonoNativeHelper.RemoveSymlinkMode(csproj); } Harness.Save(csproj, WatchOSAppProjectPath); XmlDocument info_plist = new XmlDocument(); var target_info_plist = Path.Combine(TargetDirectory, $"Info{Suffix}-app.plist"); info_plist.LoadWithoutNetworkAccess(Path.Combine(Harness.WatchOSAppTemplate, "Info.plist")); info_plist.SetCFBundleIdentifier(BundleIdentifier + ".watchkitapp"); info_plist.SetPListStringValue("WKCompanionAppBundleIdentifier", BundleIdentifier); info_plist.SetPListStringValue("CFBundleName", Name); info_plist.SetMinimumOSVersion(GetMinimumOSVersion(info_plist.GetMinimumOSVersion())); Harness.Save(info_plist, target_info_plist); }
void CreateTodayContainerProject() { var csproj = new XmlDocument(); var suffix = Suffix; csproj.LoadWithoutNetworkAccess(Path.Combine(Harness.TodayContainerTemplate, "TodayContainer.csproj")); csproj.SetOutputPath("bin\\$(Platform)\\$(Configuration)" + suffix, false); csproj.SetIntermediateOutputPath("obj\\$(Platform)\\$(Configuration)" + suffix); csproj.SetProjectReferenceValue("TodayExtension.csproj", "Name", Path.GetFileNameWithoutExtension(TodayExtensionProjectPath)); csproj.SetProjectReferenceValue("TodayExtension.csproj", "Project", TodayExtensionGuid); csproj.SetProjectReferenceInclude("TodayExtension.csproj", TodayExtensionProjectPath.Replace('/', '\\')); csproj.FixCompileInclude("Main.cs", Path.Combine(Harness.TodayContainerTemplate, "Main.cs").Replace('/', '\\')); csproj.FixInfoPListInclude(suffix); TodayContainerGuid = "{" + Harness.NewStableGuid().ToString().ToUpper() + "}"; ProjectGuid = TodayContainerGuid; csproj.SetProjectGuid(TodayContainerGuid); if (MonoNativeInfo != null) { MonoNativeInfo.AddProjectDefines(csproj); csproj.AddAdditionalDefines("MONO_NATIVE_TODAY"); } Harness.Save(csproj, TodayContainerProjectPath); XmlDocument info_plist = new XmlDocument(); var target_info_plist = Path.Combine(TargetDirectory, $"Info{suffix}.plist"); info_plist.LoadWithoutNetworkAccess(Path.Combine(Harness.TodayContainerTemplate, "Info.plist")); info_plist.SetCFBundleIdentifier(BundleIdentifier); info_plist.SetCFBundleName(Name); info_plist.SetMinimumOSVersion(GetMinimumOSVersion("8.0")); Harness.Save(info_plist, target_info_plist); }
protected override void Convert(XmlDocument inputProject) { switch (MacFlavor) { case MacFlavors.Modern: inputProject.SetTargetFrameworkIdentifier("Xamarin.Mac"); inputProject.SetTargetFrameworkVersion("v2.0"); inputProject.RemoveNode("UseXamMacFullFramework"); inputProject.AddAdditionalDefines("MOBILE;XAMMAC"); inputProject.AddReference("Mono.Security"); break; case MacFlavors.Full: inputProject.AddAdditionalDefines("XAMMAC_4_5"); break; } base.Convert(inputProject); }
protected virtual void ProcessProject() { if (SupportsBitcode) { inputProject.CloneConfiguration("iPhone", "Release", "Release-bitcode"); inputProject.AddExtraMtouchArgs("--bitcode:full", "iPhone", "Release-bitcode"); inputProject.SetMtouchUseLlvm(true, "iPhone", "Release-bitcode"); } if (!IsMultiArchitecture && IsExe) { inputProject.DeleteConfiguration("iPhone", "Debug32"); inputProject.DeleteConfiguration("iPhone", "Debug64"); } inputProject.SetOutputPath("bin\\$(Platform)\\$(Configuration)" + Suffix); inputProject.SetIntermediateOutputPath("obj\\$(Platform)\\$(Configuration)" + Suffix); if (ShouldSetTargetFrameworkIdentifier) { inputProject.SetTargetFrameworkIdentifier(TargetFrameworkIdentifier); } inputProject.SetAssemblyReference(DefaultAssemblyReference, TargetFrameworkIdentifier); foreach (var r in ReferenceToRemove) { inputProject.RemoveReferences(r); } var newProperties = NewPropertiesToAdd; foreach (var k in newProperties.Keys) { inputProject.SetTopLevelPropertyGroupValue(k, newProperties[k]); } inputProject.FixProjectReferences(Suffix, FixProjectReference); inputProject.SetAssemblyReference("OpenTK", "OpenTK-1.0"); inputProject.SetProjectTypeGuids(IsBindingProject ? BindingsProjectTypeGuids : ProjectTypeGuids); inputProject.SetImport("$(MSBuildExtensionsPath)\\Xamarin\\" + (IsBindingProject ? BindingsImports : Imports)); inputProject.FixTestLibrariesReferences(Platform); if (!string.IsNullOrEmpty(AdditionalDefines)) { inputProject.AddAdditionalDefines(AdditionalDefines); } }
public override void Convert() { var inputProject = new XmlDocument(); var xml = File.ReadAllText(TemplatePath); xml = xml.Replace("#FILES#", GetFileList()); inputProject.LoadXmlWithoutNetworkAccess(xml); // The csproj template is Xamarin.Mac/Full, so make it Modern instead inputProject.SetTargetFrameworkIdentifier("Xamarin.Mac"); inputProject.SetTargetFrameworkVersion("v2.0"); inputProject.RemoveNode("UseXamMacFullFramework"); inputProject.AddAdditionalDefines("MOBILE;XAMMAC"); inputProject.AddReference("Mono.Security"); Harness.Save(inputProject, ProjectPath); }
public void Convert() { var inputProject = new XmlDocument(); var xml = File.ReadAllText(TemplatePath); inputProject.LoadXmlWithoutNetworkAccess(xml); inputProject.SetAssemblyName(inputProject.GetAssemblyName() + FlavorSuffix); inputProject.AddAdditionalDefines(Flavor == MonoNativeFlavor.Compat ? "MONO_NATIVE_COMPAT" : "MONO_NATIVE_UNIFIED"); inputProject.ResolveAllPaths(TemplatePath); var template_info_plist = inputProject.GetInfoPListInclude().Replace('\\', '/'); var target_info_plist = Path.Combine(Path.GetDirectoryName(ProjectPath), "Info" + FlavorSuffix + ".plist"); SetInfoPListMinimumOSVersion(template_info_plist, target_info_plist); inputProject.FixInfoPListInclude(FlavorSuffix, newName: target_info_plist); inputProject.Save(ProjectPath, log); }