public string Generate(string outputDirectory, ProjectSubstitutions projectSubstitutions, FileSubstitutions fileSubstitutions, PListSubstitutions plistReplacements = null, bool includeAssets = false) { plistReplacements = plistReplacements ?? PListSubstitutions.None; FileCopier templateEngine = CreateEngine(outputDirectory); if (includeAssets) { templateEngine.CopyDirectory("Icons/Assets.xcassets"); projectSubstitutions.ItemGroup += @"<ItemGroup> <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\Contents.json"" /> <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-128.png"" /> <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-128%402x.png"" /> <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-16.png"" /> <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-16%402x.png"" /> <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-256%402x.png"" /> <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-32.png"" /> <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-32%402x.png"" /> <ImageAsset Include=""Assets.xcassets\Contents.json"" /> </ItemGroup>"; // HACK - Should process using CopyFileWithSubstitutions plistReplacements.Replacements.Add("</dict>", @"<key>XSAppIconAssets</key><string>Assets.xcassets/AppIcon.appiconset</string></dict>"); } ReplacementGroup replacements = ReplacementGroup.Create(Replacement.Create("%CODE%", fileSubstitutions.TestCode), Replacement.Create("%DECL%", fileSubstitutions.TestDecl)); templateEngine.CopyTextWithSubstitutions(GetAppMainSourceText(TemplateInfo.Language), TemplateInfo.SourceName, replacements); templateEngine.CopyFileWithSubstitutions("Info-Unified.plist", plistReplacements.CreateReplacementAction(), "Info.plist"); return(templateEngine.CopyFileWithSubstitutions(TemplateInfo.ProjectName, GetStandardProjectReplacement(projectSubstitutions))); }
public static OutputText TestSystemMonoExecutable(UnifiedTestConfig config, bool shouldFail = false) { config.guid = Guid.NewGuid(); config.TestCode += GenerateOutputCommand(config.TmpDir, config.guid); var engine = new MacSystemMonoTemplateEngine(); ProjectSubstitutions projectSubstitutions = CreateDefaultSubstitutions(config); FileSubstitutions fileSubstitutions = new FileSubstitutions() { TestCode = config.TestCode }; string csprojTarget = engine.Generate(config.TmpDir, projectSubstitutions, fileSubstitutions); string buildOutput = BuildProject(csprojTarget, isUnified: true, shouldFail: shouldFail, release: config.Release); if (shouldFail) { return(new OutputText(buildOutput, "")); } string exePath = Path.Combine(config.TmpDir, "bin", config.Release ? "Release" : "Debug", "SystemMonoExample.app/Contents/MacOS/SystemMonoExample"); string runOutput = RunEXEAndVerifyGUID(config.TmpDir, config.guid, exePath); return(new OutputText(buildOutput, runOutput)); }
public static OutputText TestClassicExecutable(string tmpDir, string testCode = "", string csprojConfig = "", bool shouldFail = false, bool includeMonoRuntime = false) { Guid guid = Guid.NewGuid(); testCode += GenerateOutputCommand(tmpDir, guid); var engine = new MacClassicAppTemplateEngine(); ProjectSubstitutions projectSubstitutions = new ProjectSubstitutions { CSProjConfig = csprojConfig }; FileSubstitutions fileSubstitutions = new FileSubstitutions { TestCode = testCode }; string csprojTarget = engine.Generate(tmpDir, projectSubstitutions, fileSubstitutions, includeMonoRuntime); string buildOutput = BuildProject(csprojTarget, isUnified: false, shouldFail: shouldFail); if (shouldFail) { return(new OutputText(buildOutput, "")); } string exePath = Path.Combine(tmpDir, "bin/Debug/ClassicExample.app/Contents/MacOS/ClassicExample"); string runOutput = RunEXEAndVerifyGUID(tmpDir, guid, exePath); return(new OutputText(buildOutput, runOutput)); }
public string Generate(string outputDirectory, ProjectSubstitutions projectSubstitutions, FileSubstitutions fileSubstitutions, bool includeMonoRuntime = false) { const string TestCode = @"using MonoMac.Foundation; using MonoMac.AppKit; namespace TestCase { class MainClass { %DECL% static void Main (string[] args) { NSApplication.Init (); %CODE% } } }"; FileCopier templateEngine = CreateEngine(outputDirectory); ReplacementGroup replacements = ReplacementGroup.Create(Replacement.Create("%CODE%", fileSubstitutions.TestCode), Replacement.Create("%DECL%", fileSubstitutions.TestDecl)); templateEngine.CopyTextWithSubstitutions(TestCode, TemplateInfo.SourceName, replacements); templateEngine.CopyFile("Info-Classic.plist", "Info.plist"); ReplacementGroup replacementGroup = ReplacementGroup.Create(Replacement.Create("%CODE%", projectSubstitutions.CSProjConfig), Replacement.Create("%INCLUDE_MONO_RUNTIME%", includeMonoRuntime.ToString())); return(templateEngine.CopyFileWithSubstitutions(TemplateInfo.ProjectName, replacementGroup)); }
public string Generate(string outputDirectory, ProjectSubstitutions projectSubstitutions, FileSubstitutions fileSubstitutions) { FileCopier templateEngine = CreateEngine(outputDirectory); templateEngine.CopyFileWithSubstitutions(TemplateInfo.SourceName, Replacement.Create("%CODE%", fileSubstitutions.TestCode)); return(templateEngine.CopyFileWithSubstitutions(TemplateInfo.ProjectName, GetStandardProjectReplacement(projectSubstitutions))); }
public string Generate(string outputDirectory, ProjectSubstitutions projectSubstitutions, FileSubstitutions fileSubstitutions) { FileCopier templateEngine = CreateEngine(outputDirectory); templateEngine.CopyFileWithSubstitutions("ApiDefinition.cs", Replacement.Create("%CODE%", fileSubstitutions.ApiDefinition)); templateEngine.CopyFileWithSubstitutions("StructsAndEnums.cs", Replacement.Create("%CODE%", fileSubstitutions.StructsAndEnums)); return(templateEngine.CopyFileWithSubstitutions(TemplateInfo.ProjectName, GetStandardProjectReplacement(projectSubstitutions))); }
public string Generate(string outputDirectory, ProjectSubstitutions projectSubstitutions, FileSubstitutions fileSubstitutions) { FileCopier templateEngine = CreateEngine(outputDirectory); ReplacementGroup replacements = ReplacementGroup.Create(Replacement.Create("%CODE%", fileSubstitutions.TestCode), Replacement.Create("%DECL%", fileSubstitutions.TestDecl)); templateEngine.CopyTextWithSubstitutions(MacAppTemplateEngine.GetAppMainSourceText(ProjectLanguage.CSharp), TemplateInfo.SourceName, replacements); templateEngine.CopyFile("Info-Unified.plist", "Info.plist"); return(templateEngine.CopyFileWithSubstitutions(TemplateInfo.ProjectName, GetStandardProjectReplacement(projectSubstitutions))); }
public void MacTestApp() { var tmpDir = Cache.CreateTemporaryDirectory(); var engine = new MacAppTemplateEngine(ProjectFlavor.FullXM, ProjectLanguage.CSharp); var fileSubstitutions = new FileSubstitutions { TestCode = "System.Console.WriteLine (typeof (int));" }; var projectSubstitutions = new ProjectSubstitutions { References = "<Reference Include=\"System.Net.Http\" />", }; string projectPath = engine.Generate(tmpDir, projectSubstitutions, fileSubstitutions); ProjectBuilder.BuildProject(projectPath, "/"); /* Use system XM instead of _mac-build today */ }