From 7bedba5837283b98aa7d04c8aec23d3a9622828d Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 30 Dec 2020 15:20:39 +0000 Subject: [PATCH] Switch macOS packages to .NET 5. --- .github/workflows/packaging.yml | 5 +++++ packaging/functions.sh | 2 +- packaging/macos/Info.plist.in | 2 +- packaging/macos/buildpackage.sh | 38 ++++++++++++++++----------------- packaging/macos/launcher-mono.m | 3 ++- packaging/macos/launcher.m | 20 ++++------------- 6 files changed, 31 insertions(+), 39 deletions(-) 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:)