mirror of
https://github.com/Ellpeck/GameBundle.git
synced 2024-11-22 16:48:34 +01:00
added the option to create an app bundle for mac
This commit is contained in:
parent
dc77203ee2
commit
ee2c51e648
6 changed files with 56 additions and 4 deletions
|
@ -13,7 +13,7 @@
|
||||||
<PackageIconUrl>https://raw.githubusercontent.com/Ellpeck/GameBundle/master/Logo.png</PackageIconUrl>
|
<PackageIconUrl>https://raw.githubusercontent.com/Ellpeck/GameBundle/master/Logo.png</PackageIconUrl>
|
||||||
<PackAsTool>true</PackAsTool>
|
<PackAsTool>true</PackAsTool>
|
||||||
<ToolCommandName>gamebundle</ToolCommandName>
|
<ToolCommandName>gamebundle</ToolCommandName>
|
||||||
<VersionPrefix>1.1.0</VersionPrefix>
|
<VersionPrefix>1.1.1</VersionPrefix>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -19,6 +19,11 @@ namespace GameBundle {
|
||||||
[Option('m', "mac", HelpText = "Bundle for mac")]
|
[Option('m', "mac", HelpText = "Bundle for mac")]
|
||||||
public bool BuildMac { get; set; }
|
public bool BuildMac { get; set; }
|
||||||
|
|
||||||
|
[Option('b', "mac-bundle", HelpText = "Create an app bundle for mac")]
|
||||||
|
public bool MacBundle { get; set; }
|
||||||
|
[Option("mac-bundle-resources", Default = new[] {"Content", "*.icns"}, HelpText = "When creating an app bundle for mac, things that should go into the Resources folder rather than the MacOS folder")]
|
||||||
|
public IEnumerable<string> MacBundleResources { get; set; }
|
||||||
|
|
||||||
[Option('e', "exclude", HelpText = "Files that should not be moved to the library folder")]
|
[Option('e', "exclude", HelpText = "Files that should not be moved to the library folder")]
|
||||||
public IEnumerable<string> ExcludedFiles { get; set; }
|
public IEnumerable<string> ExcludedFiles { get; set; }
|
||||||
[Option("32-bit", HelpText = "Publish for 32 bit instead of 64 bit. Note that this is only possible on Windows")]
|
[Option("32-bit", HelpText = "Publish for 32 bit instead of 64 bit. Note that this is only possible on Windows")]
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
@ -37,7 +38,10 @@ namespace GameBundle {
|
||||||
}
|
}
|
||||||
if (options.BuildMac) {
|
if (options.BuildMac) {
|
||||||
Console.WriteLine("Bundling for mac");
|
Console.WriteLine("Bundling for mac");
|
||||||
Publish(options, proj, $"{bundleDir}/mac", "osx-x64");
|
var dir = $"{bundleDir}/mac";
|
||||||
|
Publish(options, proj, dir, "osx-x64");
|
||||||
|
if (options.MacBundle)
|
||||||
|
CreateMacBundle(options, new DirectoryInfo(dir), proj.FullName);
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("Done");
|
Console.WriteLine("Done");
|
||||||
|
@ -82,5 +86,32 @@ namespace GameBundle {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void CreateMacBundle(Options options, DirectoryInfo dir, string proj) {
|
||||||
|
var app = dir.CreateSubdirectory($"{Path.GetFileNameWithoutExtension(proj)}.app");
|
||||||
|
var contents = app.CreateSubdirectory("Contents");
|
||||||
|
var resources = contents.CreateSubdirectory("Resources");
|
||||||
|
var macOs = contents.CreateSubdirectory("MacOS");
|
||||||
|
var resRegex = GlobRegex(options.MacBundleResources);
|
||||||
|
foreach (var file in dir.GetFiles()) {
|
||||||
|
var destDir = resRegex.IsMatch(file.Name) ? resources : macOs;
|
||||||
|
if (file.Name.EndsWith("plist"))
|
||||||
|
destDir = app;
|
||||||
|
file.MoveTo(Path.Combine(destDir.FullName, file.Name), true);
|
||||||
|
}
|
||||||
|
foreach (var sub in dir.GetDirectories()) {
|
||||||
|
if (sub.Name == app.Name)
|
||||||
|
continue;
|
||||||
|
var destDir = resRegex.IsMatch(sub.Name) ? resources : macOs;
|
||||||
|
var dest = new DirectoryInfo(Path.Combine(destDir.FullName, sub.Name));
|
||||||
|
if (dest.Exists)
|
||||||
|
dest.Delete(true);
|
||||||
|
sub.MoveTo(dest.FullName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Regex GlobRegex(IEnumerable<string> strings) {
|
||||||
|
return new Regex('(' + string.Join("|", strings.Select(s => s.Replace(".", "[.]").Replace("*", ".*").Replace("?", "."))) + ')');
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -25,6 +25,6 @@ gamebundle --help
|
||||||
|
|
||||||
# Future features
|
# Future features
|
||||||
In the future, GameBundle plans to include the following features:
|
In the future, GameBundle plans to include the following features:
|
||||||
- An option to create a `.app` folder for Mac
|
- ~~An option to create a `.app` folder for Mac~~ Implemented in `1.1.1`
|
||||||
- An option to create an installer for Windows
|
- An option to create an installer for Windows
|
||||||
- An option to create a flatpak (or similar) installer for Linux
|
- An option to create a flatpak (or similar) installer for Linux
|
|
@ -1 +1 @@
|
||||||
"../GameBundle/bin/Debug/netcoreapp3.1/GameBundle.exe" -wlm -s Test.csproj -o bin/Bundled -v
|
"../GameBundle/bin/Debug/netcoreapp3.1/GameBundle.exe" -wlm -s Test.csproj -o bin/Bundled -v -b
|
|
@ -1,13 +1,29 @@
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
using MLEM.Startup;
|
using MLEM.Startup;
|
||||||
|
|
||||||
namespace Test {
|
namespace Test {
|
||||||
public class GameImpl : MlemGame {
|
public class GameImpl : MlemGame {
|
||||||
|
|
||||||
public static GameImpl Instance { get; private set; }
|
public static GameImpl Instance { get; private set; }
|
||||||
|
private Texture2D texture;
|
||||||
|
|
||||||
public GameImpl() {
|
public GameImpl() {
|
||||||
Instance = this;
|
Instance = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void LoadContent() {
|
||||||
|
base.LoadContent();
|
||||||
|
this.texture = LoadContent<Texture2D>("Textures/Test");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void DoDraw(GameTime gameTime) {
|
||||||
|
this.GraphicsDevice.Clear(Color.Black);
|
||||||
|
base.DoDraw(gameTime);
|
||||||
|
this.SpriteBatch.Begin(samplerState: SamplerState.PointClamp, transformMatrix: Matrix.CreateScale(10));
|
||||||
|
this.SpriteBatch.Draw(this.texture, Vector2.Zero, Color.White);
|
||||||
|
this.SpriteBatch.End();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue