You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-12-30 18:30:54 +00:00
Merge pull request #113645 from bruvzg/mac_ios_escape
[macOS/iOS] Escape .plist strings on export.
This commit is contained in:
@@ -844,7 +844,7 @@ void EditorExportPlatformMacOS::_fix_plist(const Ref<EditorExportPreset> &p_pres
|
||||
if (lines[i].contains("$binary")) {
|
||||
strnew += lines[i].replace("$binary", p_binary) + "\n";
|
||||
} else if (lines[i].contains("$name")) {
|
||||
strnew += lines[i].replace("$name", get_project_setting(p_preset, "application/config/name")) + "\n";
|
||||
strnew += lines[i].replace("$name", get_project_setting(p_preset, "application/config/name").operator String().xml_escape(true)) + "\n";
|
||||
} else if (lines[i].contains("$bundle_identifier")) {
|
||||
strnew += lines[i].replace("$bundle_identifier", p_preset->get("application/bundle_identifier")) + "\n";
|
||||
} else if (lines[i].contains("$short_version")) {
|
||||
@@ -857,7 +857,7 @@ void EditorExportPlatformMacOS::_fix_plist(const Ref<EditorExportPreset> &p_pres
|
||||
String cat = p_preset->get("application/app_category");
|
||||
strnew += lines[i].replace("$app_category", cat.to_lower()) + "\n";
|
||||
} else if (lines[i].contains("$copyright")) {
|
||||
strnew += lines[i].replace("$copyright", p_preset->get("application/copyright")) + "\n";
|
||||
strnew += lines[i].replace("$copyright", p_preset->get("application/copyright").operator String().xml_escape(true)) + "\n";
|
||||
} else if (lines[i].contains("$min_version_arm64")) {
|
||||
strnew += lines[i].replace("$min_version_arm64", p_preset->get("application/min_macos_version_arm64")) + "\n";
|
||||
} else if (lines[i].contains("$min_version_x86_64")) {
|
||||
@@ -890,47 +890,47 @@ void EditorExportPlatformMacOS::_fix_plist(const Ref<EditorExportPreset> &p_pres
|
||||
String descriptions;
|
||||
if (!((String)p_preset->get("privacy/microphone_usage_description")).is_empty()) {
|
||||
descriptions += "\t<key>NSMicrophoneUsageDescription</key>\n";
|
||||
descriptions += "\t<string>" + (String)p_preset->get("privacy/microphone_usage_description") + "</string>\n";
|
||||
descriptions += "\t<string>" + p_preset->get("privacy/microphone_usage_description").operator String().xml_escape(true) + "</string>\n";
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/camera_usage_description")).is_empty()) {
|
||||
descriptions += "\t<key>NSCameraUsageDescription</key>\n";
|
||||
descriptions += "\t<string>" + (String)p_preset->get("privacy/camera_usage_description") + "</string>\n";
|
||||
descriptions += "\t<string>" + p_preset->get("privacy/camera_usage_description").operator String().xml_escape(true) + "</string>\n";
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/location_usage_description")).is_empty()) {
|
||||
descriptions += "\t<key>NSLocationUsageDescription</key>\n";
|
||||
descriptions += "\t<string>" + (String)p_preset->get("privacy/location_usage_description") + "</string>\n";
|
||||
descriptions += "\t<string>" + p_preset->get("privacy/location_usage_description").operator String().xml_escape(true) + "</string>\n";
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/address_book_usage_description")).is_empty()) {
|
||||
descriptions += "\t<key>NSContactsUsageDescription</key>\n";
|
||||
descriptions += "\t<string>" + (String)p_preset->get("privacy/address_book_usage_description") + "</string>\n";
|
||||
descriptions += "\t<string>" + p_preset->get("privacy/address_book_usage_description").operator String().xml_escape(true) + "</string>\n";
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/calendar_usage_description")).is_empty()) {
|
||||
descriptions += "\t<key>NSCalendarsUsageDescription</key>\n";
|
||||
descriptions += "\t<string>" + (String)p_preset->get("privacy/calendar_usage_description") + "</string>\n";
|
||||
descriptions += "\t<string>" + p_preset->get("privacy/calendar_usage_description").operator String().xml_escape(true) + "</string>\n";
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/photos_library_usage_description")).is_empty()) {
|
||||
descriptions += "\t<key>NSPhotoLibraryUsageDescription</key>\n";
|
||||
descriptions += "\t<string>" + (String)p_preset->get("privacy/photos_library_usage_description") + "</string>\n";
|
||||
descriptions += "\t<string>" + p_preset->get("privacy/photos_library_usage_description").operator String().xml_escape(true) + "</string>\n";
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/desktop_folder_usage_description")).is_empty()) {
|
||||
descriptions += "\t<key>NSDesktopFolderUsageDescription</key>\n";
|
||||
descriptions += "\t<string>" + (String)p_preset->get("privacy/desktop_folder_usage_description") + "</string>\n";
|
||||
descriptions += "\t<string>" + p_preset->get("privacy/desktop_folder_usage_description").operator String().xml_escape(true) + "</string>\n";
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/documents_folder_usage_description")).is_empty()) {
|
||||
descriptions += "\t<key>NSDocumentsFolderUsageDescription</key>\n";
|
||||
descriptions += "\t<string>" + (String)p_preset->get("privacy/documents_folder_usage_description") + "</string>\n";
|
||||
descriptions += "\t<string>" + p_preset->get("privacy/documents_folder_usage_description").operator String().xml_escape(true) + "</string>\n";
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/downloads_folder_usage_description")).is_empty()) {
|
||||
descriptions += "\t<key>NSDownloadsFolderUsageDescription</key>\n";
|
||||
descriptions += "\t<string>" + (String)p_preset->get("privacy/downloads_folder_usage_description") + "</string>\n";
|
||||
descriptions += "\t<string>" + p_preset->get("privacy/downloads_folder_usage_description").operator String().xml_escape(true) + "</string>\n";
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/network_volumes_usage_description")).is_empty()) {
|
||||
descriptions += "\t<key>NSNetworkVolumesUsageDescription</key>\n";
|
||||
descriptions += "\t<string>" + (String)p_preset->get("privacy/network_volumes_usage_description") + "</string>\n";
|
||||
descriptions += "\t<string>" + p_preset->get("privacy/network_volumes_usage_description").operator String().xml_escape(true) + "</string>\n";
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/removable_volumes_usage_description")).is_empty()) {
|
||||
descriptions += "\t<key>NSRemovableVolumesUsageDescription</key>\n";
|
||||
descriptions += "\t<string>" + (String)p_preset->get("privacy/removable_volumes_usage_description") + "</string>\n";
|
||||
descriptions += "\t<string>" + p_preset->get("privacy/removable_volumes_usage_description").operator String().xml_escape(true) + "</string>\n";
|
||||
}
|
||||
if (!descriptions.is_empty()) {
|
||||
strnew += lines[i].replace("$usage_descriptions", descriptions);
|
||||
@@ -1785,41 +1785,41 @@ Error EditorExportPlatformMacOS::export_project(const Ref<EditorExportPreset> &p
|
||||
Ref<FileAccess> f = FileAccess::open(fname + "/InfoPlist.strings", FileAccess::WRITE);
|
||||
f->store_line("/* Localized versions of Info.plist keys */");
|
||||
f->store_line("");
|
||||
f->store_line("CFBundleDisplayName = \"" + project_name + "\";");
|
||||
f->store_line("CFBundleDisplayName = \"" + project_name.xml_escape(true) + "\";");
|
||||
if (!((String)p_preset->get("privacy/microphone_usage_description")).is_empty()) {
|
||||
f->store_line("NSMicrophoneUsageDescription = \"" + p_preset->get("privacy/microphone_usage_description").operator String() + "\";");
|
||||
f->store_line("NSMicrophoneUsageDescription = \"" + p_preset->get("privacy/microphone_usage_description").operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/camera_usage_description")).is_empty()) {
|
||||
f->store_line("NSCameraUsageDescription = \"" + p_preset->get("privacy/camera_usage_description").operator String() + "\";");
|
||||
f->store_line("NSCameraUsageDescription = \"" + p_preset->get("privacy/camera_usage_description").operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/location_usage_description")).is_empty()) {
|
||||
f->store_line("NSLocationUsageDescription = \"" + p_preset->get("privacy/location_usage_description").operator String() + "\";");
|
||||
f->store_line("NSLocationUsageDescription = \"" + p_preset->get("privacy/location_usage_description").operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/address_book_usage_description")).is_empty()) {
|
||||
f->store_line("NSContactsUsageDescription = \"" + p_preset->get("privacy/address_book_usage_description").operator String() + "\";");
|
||||
f->store_line("NSContactsUsageDescription = \"" + p_preset->get("privacy/address_book_usage_description").operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/calendar_usage_description")).is_empty()) {
|
||||
f->store_line("NSCalendarsUsageDescription = \"" + p_preset->get("privacy/calendar_usage_description").operator String() + "\";");
|
||||
f->store_line("NSCalendarsUsageDescription = \"" + p_preset->get("privacy/calendar_usage_description").operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/photos_library_usage_description")).is_empty()) {
|
||||
f->store_line("NSPhotoLibraryUsageDescription = \"" + p_preset->get("privacy/photos_library_usage_description").operator String() + "\";");
|
||||
f->store_line("NSPhotoLibraryUsageDescription = \"" + p_preset->get("privacy/photos_library_usage_description").operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/desktop_folder_usage_description")).is_empty()) {
|
||||
f->store_line("NSDesktopFolderUsageDescription = \"" + p_preset->get("privacy/desktop_folder_usage_description").operator String() + "\";");
|
||||
f->store_line("NSDesktopFolderUsageDescription = \"" + p_preset->get("privacy/desktop_folder_usage_description").operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/documents_folder_usage_description")).is_empty()) {
|
||||
f->store_line("NSDocumentsFolderUsageDescription = \"" + p_preset->get("privacy/documents_folder_usage_description").operator String() + "\";");
|
||||
f->store_line("NSDocumentsFolderUsageDescription = \"" + p_preset->get("privacy/documents_folder_usage_description").operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/downloads_folder_usage_description")).is_empty()) {
|
||||
f->store_line("NSDownloadsFolderUsageDescription = \"" + p_preset->get("privacy/downloads_folder_usage_description").operator String() + "\";");
|
||||
f->store_line("NSDownloadsFolderUsageDescription = \"" + p_preset->get("privacy/downloads_folder_usage_description").operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/network_volumes_usage_description")).is_empty()) {
|
||||
f->store_line("NSNetworkVolumesUsageDescription = \"" + p_preset->get("privacy/network_volumes_usage_description").operator String() + "\";");
|
||||
f->store_line("NSNetworkVolumesUsageDescription = \"" + p_preset->get("privacy/network_volumes_usage_description").operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (!((String)p_preset->get("privacy/removable_volumes_usage_description")).is_empty()) {
|
||||
f->store_line("NSRemovableVolumesUsageDescription = \"" + p_preset->get("privacy/removable_volumes_usage_description").operator String() + "\";");
|
||||
f->store_line("NSRemovableVolumesUsageDescription = \"" + p_preset->get("privacy/removable_volumes_usage_description").operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
f->store_line("NSHumanReadableCopyright = \"" + p_preset->get("application/copyright").operator String() + "\";");
|
||||
f->store_line("NSHumanReadableCopyright = \"" + p_preset->get("application/copyright").operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
|
||||
for (const String &lang : locales) {
|
||||
@@ -1837,47 +1837,47 @@ Error EditorExportPlatformMacOS::export_project(const Ref<EditorExportPreset> &p
|
||||
domain->set_locale_override(lang);
|
||||
const String &name = domain->translate(project_name, String());
|
||||
if (name != project_name) {
|
||||
f->store_line("CFBundleDisplayName = \"" + name + "\";");
|
||||
f->store_line("CFBundleDisplayName = \"" + name.xml_escape(true) + "\";");
|
||||
}
|
||||
} else if (appnames.has(lang)) {
|
||||
f->store_line("CFBundleDisplayName = \"" + appnames[lang].operator String() + "\";");
|
||||
f->store_line("CFBundleDisplayName = \"" + appnames[lang].operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
|
||||
if (microphone_usage_descriptions.has(lang)) {
|
||||
f->store_line("NSMicrophoneUsageDescription = \"" + microphone_usage_descriptions[lang].operator String() + "\";");
|
||||
f->store_line("NSMicrophoneUsageDescription = \"" + microphone_usage_descriptions[lang].operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (camera_usage_descriptions.has(lang)) {
|
||||
f->store_line("NSCameraUsageDescription = \"" + camera_usage_descriptions[lang].operator String() + "\";");
|
||||
f->store_line("NSCameraUsageDescription = \"" + camera_usage_descriptions[lang].operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (location_usage_descriptions.has(lang)) {
|
||||
f->store_line("NSLocationUsageDescription = \"" + location_usage_descriptions[lang].operator String() + "\";");
|
||||
f->store_line("NSLocationUsageDescription = \"" + location_usage_descriptions[lang].operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (address_book_usage_descriptions.has(lang)) {
|
||||
f->store_line("NSContactsUsageDescription = \"" + address_book_usage_descriptions[lang].operator String() + "\";");
|
||||
f->store_line("NSContactsUsageDescription = \"" + address_book_usage_descriptions[lang].operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (calendar_usage_descriptions.has(lang)) {
|
||||
f->store_line("NSCalendarsUsageDescription = \"" + calendar_usage_descriptions[lang].operator String() + "\";");
|
||||
f->store_line("NSCalendarsUsageDescription = \"" + calendar_usage_descriptions[lang].operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (photos_library_usage_descriptions.has(lang)) {
|
||||
f->store_line("NSPhotoLibraryUsageDescription = \"" + photos_library_usage_descriptions[lang].operator String() + "\";");
|
||||
f->store_line("NSPhotoLibraryUsageDescription = \"" + photos_library_usage_descriptions[lang].operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (desktop_folder_usage_descriptions.has(lang)) {
|
||||
f->store_line("NSDesktopFolderUsageDescription = \"" + desktop_folder_usage_descriptions[lang].operator String() + "\";");
|
||||
f->store_line("NSDesktopFolderUsageDescription = \"" + desktop_folder_usage_descriptions[lang].operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (documents_folder_usage_descriptions.has(lang)) {
|
||||
f->store_line("NSDocumentsFolderUsageDescription = \"" + documents_folder_usage_descriptions[lang].operator String() + "\";");
|
||||
f->store_line("NSDocumentsFolderUsageDescription = \"" + documents_folder_usage_descriptions[lang].operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (downloads_folder_usage_descriptions.has(lang)) {
|
||||
f->store_line("NSDownloadsFolderUsageDescription = \"" + downloads_folder_usage_descriptions[lang].operator String() + "\";");
|
||||
f->store_line("NSDownloadsFolderUsageDescription = \"" + downloads_folder_usage_descriptions[lang].operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (network_volumes_usage_descriptions.has(lang)) {
|
||||
f->store_line("NSNetworkVolumesUsageDescription = \"" + network_volumes_usage_descriptions[lang].operator String() + "\";");
|
||||
f->store_line("NSNetworkVolumesUsageDescription = \"" + network_volumes_usage_descriptions[lang].operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (removable_volumes_usage_descriptions.has(lang)) {
|
||||
f->store_line("NSRemovableVolumesUsageDescription = \"" + removable_volumes_usage_descriptions[lang].operator String() + "\";");
|
||||
f->store_line("NSRemovableVolumesUsageDescription = \"" + removable_volumes_usage_descriptions[lang].operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
if (copyrights.has(lang)) {
|
||||
f->store_line("NSHumanReadableCopyright = \"" + copyrights[lang].operator String() + "\";");
|
||||
f->store_line("NSHumanReadableCopyright = \"" + copyrights[lang].operator String().xml_escape(true) + "\";");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user