Fix portable mode on macOS (#552)

This commit is contained in:
squidbus 2025-03-23 12:23:44 -07:00 committed by GitHub
parent 1c8668fb65
commit 3d3524ffe7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 19 additions and 6 deletions

View File

@ -12,7 +12,8 @@ namespace zelda64 {
// Apple specific methods that usually require Objective-C. Implemented in support_apple.mm.
#ifdef __APPLE__
void dispatch_on_ui_thread(std::function<void()> func);
const char* get_bundle_resource_directory();
std::filesystem::path get_bundle_resource_directory();
std::filesystem::path get_bundle_directory();
#endif
}

View File

@ -2,6 +2,7 @@
#include "recomp_input.h"
#include "zelda_sound.h"
#include "zelda_render.h"
#include "zelda_support.h"
#include "ultramodern/config.hpp"
#include "librecomp/files.hpp"
#include <filesystem>
@ -136,6 +137,14 @@ std::filesystem::path zelda64::get_app_folder_path() {
return std::filesystem::current_path();
}
#if defined(__APPLE__)
// Check for portable file in the directory containing the app bundle.
const auto app_bundle_path = zelda64::get_bundle_directory().parent_path();
if (std::filesystem::exists(app_bundle_path / "portable.txt")) {
return app_bundle_path;
}
#endif
std::filesystem::path recomp_dir{};
#if defined(_WIN32)

View File

@ -25,9 +25,7 @@ namespace zelda64 {
std::filesystem::path get_asset_path(const char* asset) {
std::filesystem::path base_path = "";
#if defined(__APPLE__)
const char* resource_dir = get_bundle_resource_directory();
base_path = resource_dir;
free((void*)resource_dir);
base_path = get_bundle_resource_directory();
#endif
return base_path / "assets" / asset;

View File

@ -12,9 +12,14 @@ namespace zelda64 {
});
}
const char* get_bundle_resource_directory() {
std::filesystem::path get_bundle_resource_directory() {
NSString *bundlePath = [[NSBundle mainBundle] resourcePath];
return strdup([bundlePath UTF8String]);
return std::filesystem::path([bundlePath UTF8String]);
}
std::filesystem::path get_bundle_directory() {
NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
return std::filesystem::path([bundlePath UTF8String]);
}
}