diff --git a/editor/export/export_template_manager.cpp b/editor/export/export_template_manager.cpp index a90c16f66e6..1e1999ddb70 100644 --- a/editor/export/export_template_manager.cpp +++ b/editor/export/export_template_manager.cpp @@ -437,6 +437,13 @@ bool ExportTemplateManager::_install_file_selected(const String &p_file, bool p_ } String file = String::utf8(fname); + + // Skip the __MACOSX directory created by macOS's built-in file zipper. + if (file.begins_with("__MACOSX")) { + ret = unzGoToNextFile(pkg); + continue; + } + if (file.ends_with("version.txt")) { Vector uncomp_data; uncomp_data.resize(info.uncompressed_size); @@ -512,7 +519,8 @@ bool ExportTemplateManager::_install_file_selected(const String &p_file, bool p_ String file = file_path.get_file(); - if (file.size() == 0) { + // Skip the __MACOSX directory created by macOS's built-in file zipper. + if (file.is_empty() || file.begins_with("__MACOSX")) { ret = unzGoToNextFile(pkg); continue; } diff --git a/editor/project_manager/project_dialog.cpp b/editor/project_manager/project_dialog.cpp index 01dc9229090..82e2bda0ac2 100644 --- a/editor/project_manager/project_dialog.cpp +++ b/editor/project_manager/project_dialog.cpp @@ -132,6 +132,13 @@ void ProjectDialog::_validate_path() { ERR_FAIL_COND_MSG(ret != UNZ_OK, "Failed to get current file info."); String name = String::utf8(fname); + + // Skip the __MACOSX directory created by macOS's built-in file zipper. + if (name.begins_with("__MACOSX")) { + ret = unzGoToNextFile(pkg); + continue; + } + if (name.get_file() == "project.godot") { break; // ret == UNZ_OK. } @@ -604,6 +611,13 @@ void ProjectDialog::ok_pressed() { ERR_FAIL_COND_MSG(ret != UNZ_OK, "Failed to get current file info."); String name = String::utf8(fname); + + // Skip the __MACOSX directory created by macOS's built-in file zipper. + if (name.begins_with("__MACOSX")) { + ret = unzGoToNextFile(pkg); + continue; + } + if (name.get_file() == "project.godot") { zip_root = name.get_base_dir(); break; @@ -636,7 +650,15 @@ void ProjectDialog::ok_pressed() { ret = unzGetCurrentFileInfo(pkg, &info, fname, 16384, nullptr, 0, nullptr, 0); ERR_FAIL_COND_MSG(ret != UNZ_OK, "Failed to get current file info."); - String rel_path = String::utf8(fname).trim_prefix(zip_root); + String name = String::utf8(fname); + + // Skip the __MACOSX directory created by macOS's built-in file zipper. + if (name.begins_with("__MACOSX")) { + ret = unzGoToNextFile(pkg); + continue; + } + + String rel_path = name.trim_prefix(zip_root); if (rel_path.is_empty()) { // Root. } else if (rel_path.ends_with("/")) { // Directory. Ref da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);