diff --git a/.github/workflows/packaging.yml b/.github/workflows/packaging.yml
index 12ded6d867..45582a1c9e 100644
--- a/.github/workflows/packaging.yml
+++ b/.github/workflows/packaging.yml
@@ -39,6 +39,11 @@ jobs:
- name: Clone Repository
uses: actions/checkout@v2
+ - name: Install .NET 5
+ uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: '5.0.x'
+
- name: Prepare Environment
run: echo "GIT_TAG=${GITHUB_REF#refs/tags/}" >> ${GITHUB_ENV}
diff --git a/packaging/functions.sh b/packaging/functions.sh
index 2e4e04d9a0..dc06962c32 100755
--- a/packaging/functions.sh
+++ b/packaging/functions.sh
@@ -17,7 +17,6 @@
# Used by:
# Makefile (install target for local installs and downstream packaging)
# Linux AppImage packaging
-# macOS packaging
# Mod SDK Linux AppImage packaging
# Mod SDK macOS packaging
# Mod SDK Windows packaging
@@ -107,6 +106,7 @@ install_assemblies_mono() {
# COPY_D2K_DLL: If set to True the OpenRA.Mods.D2k.dll will also be copied (True, False)
# Used by:
# Windows packaging
+# macOS packaging
install_assemblies() {
SRC_PATH="${1}"
DEST_PATH="${2}"
diff --git a/packaging/macos/Info.plist.in b/packaging/macos/Info.plist.in
index ce626cea6a..61cf754f48 100644
--- a/packaging/macos/Info.plist.in
+++ b/packaging/macos/Info.plist.in
@@ -7,7 +7,7 @@
CFBundleDisplayName
{MOD_NAME}
CFBundleExecutable
- OpenRA
+ Launcher
CFBundleIconFile
{MOD_ID}.icns
CFBundleIdentifier
diff --git a/packaging/macos/buildpackage.sh b/packaging/macos/buildpackage.sh
index b606721def..87430d7794 100755
--- a/packaging/macos/buildpackage.sh
+++ b/packaging/macos/buildpackage.sh
@@ -55,13 +55,15 @@ modify_plist() {
# Copies the game files and sets metadata
build_app() {
- TEMPLATE_DIR="${1}"
- LAUNCHER_DIR="${2}"
- MOD_ID="${3}"
- MOD_NAME="${4}"
- DISCORD_APPID="${5}"
+ PLATFORM="${1}"
+ TEMPLATE_DIR="${2}"
+ LAUNCHER_DIR="${3}"
+ MOD_ID="${4}"
+ MOD_NAME="${5}"
+ DISCORD_APPID="${6}"
LAUNCHER_CONTENTS_DIR="${LAUNCHER_DIR}/Contents"
+ LAUNCHER_ASSEMBLY_DIR="${LAUNCHER_CONTENTS_DIR}/MacOS"
LAUNCHER_RESOURCES_DIR="${LAUNCHER_CONTENTS_DIR}/Resources"
cp -r "${TEMPLATE_DIR}" "${LAUNCHER_DIR}"
@@ -72,7 +74,12 @@ build_app() {
fi
# Install engine and mod files
- install_assemblies_mono "${SRCDIR}" "${LAUNCHER_RESOURCES_DIR}" "osx-x64" "True" "True" "${IS_D2K}"
+ if [ "${PLATFORM}" = "compat" ]; then
+ install_assemblies_mono "${SRCDIR}" "${LAUNCHER_ASSEMBLY_DIR}" "osx-x64" "True" "True" "${IS_D2K}"
+ else
+ install_assemblies "${SRCDIR}" "${LAUNCHER_ASSEMBLY_DIR}" "osx-x64" "True" "True" "${IS_D2K}"
+ fi
+
install_data "${SRCDIR}" "${LAUNCHER_RESOURCES_DIR}" "${MOD_ID}"
set_engine_version "${TAG}" "${LAUNCHER_RESOURCES_DIR}"
set_mod_version "${TAG}" "${LAUNCHER_RESOURCES_DIR}/mods/${MOD_ID}/mod.yaml" "${LAUNCHER_RESOURCES_DIR}/mods/modcontent/mod.yaml"
@@ -99,7 +106,6 @@ build_app() {
# Sign binaries with developer certificate
if [ -n "${MACOS_DEVELOPER_IDENTITY}" ]; then
- codesign -s "${MACOS_DEVELOPER_IDENTITY}" --timestamp --options runtime -f --entitlements entitlements.plist "${LAUNCHER_RESOURCES_DIR}/"*.dylib
codesign -s "${MACOS_DEVELOPER_IDENTITY}" --timestamp --options runtime -f --entitlements entitlements.plist --deep "${LAUNCHER_DIR}"
fi
}
@@ -120,23 +126,15 @@ build_platform() {
if [ "${PLATFORM}" = "compat" ]; then
modify_plist "{MINIMUM_SYSTEM_VERSION}" "10.9" "${TEMPLATE_DIR}/Contents/Info.plist"
- clang -m64 launcher-mono.m -o "${TEMPLATE_DIR}/Contents/MacOS/OpenRA" -framework AppKit -mmacosx-version-min=10.9
+ clang -m64 launcher-mono.m -o "${TEMPLATE_DIR}/Contents/MacOS/Launcher" -framework AppKit -mmacosx-version-min=10.9
else
modify_plist "{MINIMUM_SYSTEM_VERSION}" "10.13" "${TEMPLATE_DIR}/Contents/Info.plist"
- clang -m64 launcher.m -o "${TEMPLATE_DIR}/Contents/MacOS/OpenRA" -framework AppKit -mmacosx-version-min=10.13
-
- curl -s -L -O https://github.com/OpenRA/OpenRALauncherOSX/releases/download/${MONO_TAG}/mono.zip || exit 3
- unzip -qq -d "${BUILTDIR}/mono" mono.zip
- mv "${BUILTDIR}/mono/mono" "${TEMPLATE_DIR}/Contents/MacOS/"
- mv "${BUILTDIR}/mono/etc" "${TEMPLATE_DIR}/Contents/Resources"
- mv "${BUILTDIR}/mono/lib" "${TEMPLATE_DIR}/Contents/Resources"
- rm mono.zip
- rmdir "${BUILTDIR}/mono"
+ clang -m64 launcher.m -o "${TEMPLATE_DIR}/Contents/MacOS/Launcher" -framework AppKit -mmacosx-version-min=10.13
fi
- build_app "${TEMPLATE_DIR}" "${BUILTDIR}/OpenRA - Red Alert.app" "ra" "Red Alert" "699222659766026240"
- build_app "${TEMPLATE_DIR}" "${BUILTDIR}/OpenRA - Tiberian Dawn.app" "cnc" "Tiberian Dawn" "699223250181292033"
- build_app "${TEMPLATE_DIR}" "${BUILTDIR}/OpenRA - Dune 2000.app" "d2k" "Dune 2000" "712711732770111550"
+ build_app "${PLATFORM}" "${TEMPLATE_DIR}" "${BUILTDIR}/OpenRA - Red Alert.app" "ra" "Red Alert" "699222659766026240"
+ build_app "${PLATFORM}" "${TEMPLATE_DIR}" "${BUILTDIR}/OpenRA - Tiberian Dawn.app" "cnc" "Tiberian Dawn" "699223250181292033"
+ build_app "${PLATFORM}" "${TEMPLATE_DIR}" "${BUILTDIR}/OpenRA - Dune 2000.app" "d2k" "Dune 2000" "712711732770111550"
rm -rf "${TEMPLATE_DIR}"
diff --git a/packaging/macos/launcher-mono.m b/packaging/macos/launcher-mono.m
index d726c4989a..a2388f50e0 100644
--- a/packaging/macos/launcher-mono.m
+++ b/packaging/macos/launcher-mono.m
@@ -262,8 +262,9 @@ static int check_mono_version(const char *version, const char *req_version)
NSMutableArray *launchArgs = [NSMutableArray arrayWithCapacity: [gameArgs count] + 2];
[launchArgs addObject: @"--debug"];
- [launchArgs addObject: [gamePath stringByAppendingPathComponent: gameName]];
+ [launchArgs addObject: [exePath stringByAppendingPathComponent: gameName]];
[launchArgs addObject: [NSString stringWithFormat:@"Engine.LaunchPath=\"%@\"", engineLaunchPath]];
+ [launchArgs addObject: [NSString stringWithFormat:@"Engine.EngineDir=../Resources"]];
if (modId)
[launchArgs addObject: [NSString stringWithFormat:@"Game.Mod=%@", modId]];
diff --git a/packaging/macos/launcher.m b/packaging/macos/launcher.m
index 95153a9d31..5ef62bb191 100644
--- a/packaging/macos/launcher.m
+++ b/packaging/macos/launcher.m
@@ -131,16 +131,11 @@ NSTask *gameTask;
launched = YES;
// Default values - can be overriden by setting certain keys Info.plist
- NSString *gameName = @"OpenRA.dll";
NSString *modId = nil;
NSDictionary *plist = [[NSBundle mainBundle] infoDictionary];
if (plist)
{
- NSString *exeValue = [plist objectForKey:@"MonoGameExe"];
- if (exeValue && [exeValue length] > 0)
- gameName = exeValue;
-
NSString *modIdValue = [plist objectForKey:@"ModId"];
if (modIdValue && [modIdValue length] > 0)
modId = modIdValue;
@@ -149,21 +144,20 @@ NSTask *gameTask;
NSString *exePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent: @"Contents/MacOS/"];
NSString *gamePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent: @"Contents/Resources/"];
- NSString *launchPath = [exePath stringByAppendingPathComponent: @"mono"];
- NSString *appPath = [exePath stringByAppendingPathComponent: @"OpenRA"];
+ NSString *launchPath = [exePath stringByAppendingPathComponent: @"OpenRA"];
+ NSString *appPath = [exePath stringByAppendingPathComponent: @"Launcher"];
NSString *engineLaunchPath = [self resolveTranslocatedPath: appPath];
NSMutableArray *launchArgs = [NSMutableArray arrayWithCapacity: [gameArgs count] + 2];
- [launchArgs addObject: @"--debug"];
- [launchArgs addObject: [gamePath stringByAppendingPathComponent: gameName]];
[launchArgs addObject: [NSString stringWithFormat:@"Engine.LaunchPath=\"%@\"", engineLaunchPath]];
+ [launchArgs addObject: [NSString stringWithFormat:@"Engine.EngineDir=../Resources"]];
if (modId)
[launchArgs addObject: [NSString stringWithFormat:@"Game.Mod=%@", modId]];
[launchArgs addObjectsFromArray: gameArgs];
- NSLog(@"Running mono with arguments:");
+ NSLog(@"Running OpenRA with arguments:");
for (size_t i = 0; i < [launchArgs count]; i++)
NSLog(@"%@", [launchArgs objectAtIndex: i]);
@@ -172,12 +166,6 @@ NSTask *gameTask;
[gameTask setLaunchPath: launchPath];
[gameTask setArguments: launchArgs];
- NSMutableDictionary *environment = [NSMutableDictionary dictionaryWithDictionary: [[NSProcessInfo processInfo] environment]];
- [environment setObject: [gamePath stringByAppendingPathComponent: @"lib/mono/4.5"] forKey: @"MONO_PATH"];
- [environment setObject: [gamePath stringByAppendingPathComponent: @"etc"] forKey: @"MONO_CFG_DIR"];
- [environment setObject: [gamePath stringByAppendingPathComponent: @"etc/mono/config"] forKey: @"MONO_CONFIG"];
- [gameTask setEnvironment: environment];
-
[[NSNotificationCenter defaultCenter]
addObserver: self
selector: @selector(taskExited:)