Merge pull request #40173 from naithar/feature/ios-storyboard-usage
[3.2] [iOS] Option to use storyboards for launch screens.
This commit is contained in:
commit
6fd712c874
|
@ -14,6 +14,7 @@
|
||||||
D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D07CD44D1C5D589C00B7FB28 /* Images.xcassets */; };
|
D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D07CD44D1C5D589C00B7FB28 /* Images.xcassets */; };
|
||||||
D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */; };
|
D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */; };
|
||||||
D0BCFE7818AEBFEB004A7AAE /* $binary.pck in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7718AEBFEB004A7AAE /* $binary.pck */; };
|
D0BCFE7818AEBFEB004A7AAE /* $binary.pck in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7718AEBFEB004A7AAE /* $binary.pck */; };
|
||||||
|
$pbx_launch_screen_build_reference
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
@ -41,6 +42,7 @@
|
||||||
D0BCFE4318AEBDA2004A7AAE /* $binary-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "$binary-Info.plist"; sourceTree = "<group>"; };
|
D0BCFE4318AEBDA2004A7AAE /* $binary-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "$binary-Info.plist"; sourceTree = "<group>"; };
|
||||||
D0BCFE4518AEBDA2004A7AAE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
D0BCFE4518AEBDA2004A7AAE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
D0BCFE7718AEBFEB004A7AAE /* $binary.pck */ = {isa = PBXFileReference; lastKnownFileType = file; path = "$binary.pck"; sourceTree = "<group>"; };
|
D0BCFE7718AEBFEB004A7AAE /* $binary.pck */ = {isa = PBXFileReference; lastKnownFileType = file; path = "$binary.pck"; sourceTree = "<group>"; };
|
||||||
|
$pbx_launch_screen_file_reference
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
$additional_pbx_files
|
$additional_pbx_files
|
||||||
|
@ -92,6 +94,7 @@
|
||||||
D0BCFE4118AEBDA2004A7AAE /* $binary */ = {
|
D0BCFE4118AEBDA2004A7AAE /* $binary */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
$pbx_launch_screen_copy_files
|
||||||
1FF4C1881F584E6300A41E41 /* $binary.entitlements */,
|
1FF4C1881F584E6300A41E41 /* $binary.entitlements */,
|
||||||
D07CD44D1C5D589C00B7FB28 /* Images.xcassets */,
|
D07CD44D1C5D589C00B7FB28 /* Images.xcassets */,
|
||||||
D0BCFE4218AEBDA2004A7AAE /* Supporting Files */,
|
D0BCFE4218AEBDA2004A7AAE /* Supporting Files */,
|
||||||
|
@ -247,6 +250,7 @@
|
||||||
files = (
|
files = (
|
||||||
D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */,
|
D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */,
|
||||||
D0BCFE7818AEBFEB004A7AAE /* $binary.pck in Resources */,
|
D0BCFE7818AEBFEB004A7AAE /* $binary.pck in Resources */,
|
||||||
|
$pbx_launch_screen_build_phase
|
||||||
D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */,
|
D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */,
|
||||||
$additional_pbx_resources_build
|
$additional_pbx_resources_build
|
||||||
);
|
);
|
||||||
|
@ -367,7 +371,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = "$godot_archs";
|
ARCHS = "$godot_archs";
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
$pbx_launch_image_usage_setting
|
||||||
CODE_SIGN_ENTITLEMENTS = "$binary/$binary.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "$binary/$binary.entitlements";
|
||||||
CODE_SIGN_IDENTITY = "$code_sign_identity_debug";
|
CODE_SIGN_IDENTITY = "$code_sign_identity_debug";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_debug";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_debug";
|
||||||
|
@ -397,7 +401,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = "$godot_archs";
|
ARCHS = "$godot_archs";
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
$pbx_launch_image_usage_setting
|
||||||
CODE_SIGN_ENTITLEMENTS = "$binary/$binary.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "$binary/$binary.entitlements";
|
||||||
CODE_SIGN_IDENTITY = "$code_sign_identity_release";
|
CODE_SIGN_IDENTITY = "$code_sign_identity_release";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_release";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "$code_sign_identity_release";
|
||||||
|
|
22
misc/dist/ios_xcode/godot_ios/Images.xcassets/SplashImage.imageset/Contents.json
vendored
Normal file
22
misc/dist/ios_xcode/godot_ios/Images.xcassets/SplashImage.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "splash@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "splash@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/SplashImage.imageset/splash@2x.png
vendored
Normal file
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/SplashImage.imageset/splash@2x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/SplashImage.imageset/splash@3x.png
vendored
Normal file
BIN
misc/dist/ios_xcode/godot_ios/Images.xcassets/SplashImage.imageset/splash@3x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
|
@ -0,0 +1,41 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16097" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||||
|
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
|
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<scenes>
|
||||||
|
<!--View Controller-->
|
||||||
|
<scene sceneID="EHf-IW-A2E">
|
||||||
|
<objects>
|
||||||
|
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="$launch_screen_image_mode" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="SplashImage" translatesAutoresizingMaskIntoConstraints="NO" id="tjZ-vn-Lsv">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
</imageView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" $launch_screen_background_color colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="tjZ-vn-Lsv" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="Ak7-I4-yrQ"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="tjZ-vn-Lsv" secondAttribute="trailing" id="Fon-JO-5cz"/>
|
||||||
|
<constraint firstItem="tjZ-vn-Lsv" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="bkx-rj-PKc"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="tjZ-vn-Lsv" secondAttribute="bottom" id="yjq-MJ-tym"/>
|
||||||
|
</constraints>
|
||||||
|
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
|
||||||
|
</view>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="52.173913043478265" y="375"/>
|
||||||
|
</scene>
|
||||||
|
</scenes>
|
||||||
|
<resources>
|
||||||
|
<image name="SplashImage" width="266.66665649414062" height="200"/>
|
||||||
|
</resources>
|
||||||
|
</document>
|
|
@ -57,5 +57,6 @@
|
||||||
$interface_orientations
|
$interface_orientations
|
||||||
</array>
|
</array>
|
||||||
$additional_plist_content
|
$additional_plist_content
|
||||||
|
$plist_launch_screen_name
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include "editor/editor_export.h"
|
#include "editor/editor_export.h"
|
||||||
#include "editor/editor_node.h"
|
#include "editor/editor_node.h"
|
||||||
#include "editor/editor_settings.h"
|
#include "editor/editor_settings.h"
|
||||||
|
#include "main/splash.gen.h"
|
||||||
#include "platform/iphone/logo.gen.h"
|
#include "platform/iphone/logo.gen.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
|
|
||||||
|
@ -93,7 +94,8 @@ class EditorExportPlatformIOS : public EditorExportPlatform {
|
||||||
String _get_linker_flags();
|
String _get_linker_flags();
|
||||||
String _get_cpp_code();
|
String _get_cpp_code();
|
||||||
void _fix_config_file(const Ref<EditorExportPreset> &p_preset, Vector<uint8_t> &pfile, const IOSConfigData &p_config, bool p_debug);
|
void _fix_config_file(const Ref<EditorExportPreset> &p_preset, Vector<uint8_t> &pfile, const IOSConfigData &p_config, bool p_debug);
|
||||||
Error _export_loading_screens(const Ref<EditorExportPreset> &p_preset, const String &p_dest_dir);
|
Error _export_loading_screen_images(const Ref<EditorExportPreset> &p_preset, const String &p_dest_dir);
|
||||||
|
Error _export_loading_screen_file(const Ref<EditorExportPreset> &p_preset, const String &p_dest_dir);
|
||||||
Error _export_icons(const Ref<EditorExportPreset> &p_preset, const String &p_iconset_dir);
|
Error _export_icons(const Ref<EditorExportPreset> &p_preset, const String &p_iconset_dir);
|
||||||
|
|
||||||
Vector<ExportArchitecture> _get_supported_architectures();
|
Vector<ExportArchitecture> _get_supported_architectures();
|
||||||
|
@ -257,6 +259,13 @@ void EditorExportPlatformIOS::get_export_options(List<ExportOption> *r_options)
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/spotlight_40x40", PROPERTY_HINT_FILE, "*.png"), "")); // Spotlight
|
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/spotlight_40x40", PROPERTY_HINT_FILE, "*.png"), "")); // Spotlight
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/spotlight_80x80", PROPERTY_HINT_FILE, "*.png"), "")); // Spotlight on devices with retina display
|
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/spotlight_80x80", PROPERTY_HINT_FILE, "*.png"), "")); // Spotlight on devices with retina display
|
||||||
|
|
||||||
|
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "storyboard/use_launch_screen_storyboard"), false));
|
||||||
|
r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "storyboard/image_scale_mode", PROPERTY_HINT_ENUM, "Same as Logo,Center,Scale To Fit,Scale To Fill,Scale"), 0));
|
||||||
|
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "storyboard/custom_image@2x", PROPERTY_HINT_FILE, "*.png"), ""));
|
||||||
|
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "storyboard/custom_image@3x", PROPERTY_HINT_FILE, "*.png"), ""));
|
||||||
|
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "storyboard/use_custom_bg_color"), false));
|
||||||
|
r_options->push_back(ExportOption(PropertyInfo(Variant::COLOR, "storyboard/custom_bg_color"), Color()));
|
||||||
|
|
||||||
for (uint64_t i = 0; i < sizeof(loading_screen_infos) / sizeof(loading_screen_infos[0]); ++i) {
|
for (uint64_t i = 0; i < sizeof(loading_screen_infos) / sizeof(loading_screen_infos[0]); ++i) {
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, loading_screen_infos[i].preset_key, PROPERTY_HINT_FILE, "*.png"), ""));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, loading_screen_infos[i].preset_key, PROPERTY_HINT_FILE, "*.png"), ""));
|
||||||
}
|
}
|
||||||
|
@ -274,6 +283,12 @@ void EditorExportPlatformIOS::_fix_config_file(const Ref<EditorExportPreset> &p_
|
||||||
"ad-hoc",
|
"ad-hoc",
|
||||||
"enterprise"
|
"enterprise"
|
||||||
};
|
};
|
||||||
|
static const String storyboard_image_scale_mode[] = {
|
||||||
|
"center",
|
||||||
|
"scaleAspectFit",
|
||||||
|
"scaleAspectFill",
|
||||||
|
"scaleToFill"
|
||||||
|
};
|
||||||
String str;
|
String str;
|
||||||
String strnew;
|
String strnew;
|
||||||
str.parse_utf8((const char *)pfile.ptr(), pfile.size());
|
str.parse_utf8((const char *)pfile.ptr(), pfile.size());
|
||||||
|
@ -390,6 +405,60 @@ void EditorExportPlatformIOS::_fix_config_file(const Ref<EditorExportPreset> &p_
|
||||||
} else if (lines[i].find("$photolibrary_usage_description") != -1) {
|
} else if (lines[i].find("$photolibrary_usage_description") != -1) {
|
||||||
String description = p_preset->get("privacy/photolibrary_usage_description");
|
String description = p_preset->get("privacy/photolibrary_usage_description");
|
||||||
strnew += lines[i].replace("$photolibrary_usage_description", description) + "\n";
|
strnew += lines[i].replace("$photolibrary_usage_description", description) + "\n";
|
||||||
|
} else if (lines[i].find("$plist_launch_screen_name") != -1) {
|
||||||
|
bool is_on = p_preset->get("storyboard/use_launch_screen_storyboard");
|
||||||
|
String value = is_on ? "<key>UILaunchStoryboardName</key>\n<string>Launch Screen</string>" : "";
|
||||||
|
strnew += lines[i].replace("$plist_launch_screen_name", value) + "\n";
|
||||||
|
} else if (lines[i].find("$pbx_launch_screen_file_reference") != -1) {
|
||||||
|
bool is_on = p_preset->get("storyboard/use_launch_screen_storyboard");
|
||||||
|
String value = is_on ? "90DD2D9D24B36E8000717FE1 = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = \"Launch Screen.storyboard\"; sourceTree = \"<group>\"; };" : "";
|
||||||
|
strnew += lines[i].replace("$pbx_launch_screen_file_reference", value) + "\n";
|
||||||
|
} else if (lines[i].find("$pbx_launch_screen_copy_files") != -1) {
|
||||||
|
bool is_on = p_preset->get("storyboard/use_launch_screen_storyboard");
|
||||||
|
String value = is_on ? "90DD2D9D24B36E8000717FE1 /* Launch Screen.storyboard */," : "";
|
||||||
|
strnew += lines[i].replace("$pbx_launch_screen_copy_files", value) + "\n";
|
||||||
|
} else if (lines[i].find("$pbx_launch_screen_build_phase") != -1) {
|
||||||
|
bool is_on = p_preset->get("storyboard/use_launch_screen_storyboard");
|
||||||
|
String value = is_on ? "90DD2D9E24B36E8000717FE1 /* Launch Screen.storyboard in Resources */," : "";
|
||||||
|
strnew += lines[i].replace("$pbx_launch_screen_build_phase", value) + "\n";
|
||||||
|
} else if (lines[i].find("$pbx_launch_screen_build_reference") != -1) {
|
||||||
|
bool is_on = p_preset->get("storyboard/use_launch_screen_storyboard");
|
||||||
|
String value = is_on ? "90DD2D9E24B36E8000717FE1 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 90DD2D9D24B36E8000717FE1 /* Launch Screen.storyboard */; };" : "";
|
||||||
|
strnew += lines[i].replace("$pbx_launch_screen_build_reference", value) + "\n";
|
||||||
|
} else if (lines[i].find("$pbx_launch_image_usage_setting") != -1) {
|
||||||
|
bool is_on = p_preset->get("storyboard/use_launch_screen_storyboard");
|
||||||
|
String value = is_on ? "" : "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;";
|
||||||
|
strnew += lines[i].replace("$pbx_launch_image_usage_setting", value) + "\n";
|
||||||
|
} else if (lines[i].find("$launch_screen_image_mode") != -1) {
|
||||||
|
int image_scale_mode = p_preset->get("storyboard/image_scale_mode");
|
||||||
|
String value;
|
||||||
|
|
||||||
|
switch (image_scale_mode) {
|
||||||
|
case 0: {
|
||||||
|
String logo_path = ProjectSettings::get_singleton()->get("application/boot_splash/image");
|
||||||
|
bool is_on = ProjectSettings::get_singleton()->get("application/boot_splash/fullsize");
|
||||||
|
// If custom logo is not specified, Godot does not scale default one, so we should do the same.
|
||||||
|
value = (is_on && logo_path.length() > 0) ? "scaleAspectFit" : "center";
|
||||||
|
} break;
|
||||||
|
default: {
|
||||||
|
value = storyboard_image_scale_mode[image_scale_mode - 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
strnew += lines[i].replace("$launch_screen_image_mode", value) + "\n";
|
||||||
|
} else if (lines[i].find("$launch_screen_background_color") != -1) {
|
||||||
|
bool use_custom = p_preset->get("storyboard/use_custom_bg_color");
|
||||||
|
Color color = use_custom ? p_preset->get("storyboard/custom_bg_color") : ProjectSettings::get_singleton()->get("application/boot_splash/bg_color");
|
||||||
|
const String value_format = "red=\"$red\" green=\"$green\" blue=\"$blue\" alpha=\"$alpha\"";
|
||||||
|
|
||||||
|
Dictionary value_dictionary;
|
||||||
|
value_dictionary["red"] = color.r;
|
||||||
|
value_dictionary["green"] = color.g;
|
||||||
|
value_dictionary["blue"] = color.b;
|
||||||
|
value_dictionary["alpha"] = color.a;
|
||||||
|
String value = value_format.format(value_dictionary, "$_");
|
||||||
|
|
||||||
|
strnew += lines[i].replace("$launch_screen_background_color", value) + "\n";
|
||||||
} else {
|
} else {
|
||||||
strnew += lines[i] + "\n";
|
strnew += lines[i] + "\n";
|
||||||
}
|
}
|
||||||
|
@ -520,7 +589,75 @@ Error EditorExportPlatformIOS::_export_icons(const Ref<EditorExportPreset> &p_pr
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
Error EditorExportPlatformIOS::_export_loading_screens(const Ref<EditorExportPreset> &p_preset, const String &p_dest_dir) {
|
Error EditorExportPlatformIOS::_export_loading_screen_file(const Ref<EditorExportPreset> &p_preset, const String &p_dest_dir) {
|
||||||
|
const String custom_launch_image_2x = p_preset->get("storyboard/custom_image@2x");
|
||||||
|
const String custom_launch_image_3x = p_preset->get("storyboard/custom_image@3x");
|
||||||
|
|
||||||
|
if (custom_launch_image_2x.length() > 0 && custom_launch_image_3x.length() > 0) {
|
||||||
|
Ref<Image> image;
|
||||||
|
String image_path = p_dest_dir.plus_file("splash@2x.png");
|
||||||
|
image.instance();
|
||||||
|
Error err = image->load(custom_launch_image_2x);
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
image.unref();
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (image->save_png(image_path) != OK) {
|
||||||
|
return ERR_FILE_CANT_WRITE;
|
||||||
|
}
|
||||||
|
|
||||||
|
image.unref();
|
||||||
|
image_path = p_dest_dir.plus_file("splash@3x.png");
|
||||||
|
image.instance();
|
||||||
|
err = image->load(custom_launch_image_3x);
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
image.unref();
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (image->save_png(image_path) != OK) {
|
||||||
|
return ERR_FILE_CANT_WRITE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Ref<Image> splash;
|
||||||
|
|
||||||
|
const String splash_path = ProjectSettings::get_singleton()->get("application/boot_splash/image");
|
||||||
|
|
||||||
|
if (!splash_path.empty()) {
|
||||||
|
splash.instance();
|
||||||
|
const Error err = splash->load(splash_path);
|
||||||
|
if (err) {
|
||||||
|
splash.unref();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (splash.is_null()) {
|
||||||
|
splash = Ref<Image>(memnew(Image(boot_splash_png)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Using same image for both @2x and @3x
|
||||||
|
// because Godot's own boot logo uses single image for all resolutions.
|
||||||
|
// Also not using @1x image, because devices using this image variant
|
||||||
|
// are not supported by iOS 9, which is minimal target.
|
||||||
|
const String splash_png_path_2x = p_dest_dir.plus_file("splash@2x.png");
|
||||||
|
const String splash_png_path_3x = p_dest_dir.plus_file("splash@3x.png");
|
||||||
|
|
||||||
|
if (splash->save_png(splash_png_path_2x) != OK) {
|
||||||
|
return ERR_FILE_CANT_WRITE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (splash->save_png(splash_png_path_3x) != OK) {
|
||||||
|
return ERR_FILE_CANT_WRITE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
Error EditorExportPlatformIOS::_export_loading_screen_images(const Ref<EditorExportPreset> &p_preset, const String &p_dest_dir) {
|
||||||
DirAccess *da = DirAccess::open(p_dest_dir);
|
DirAccess *da = DirAccess::open(p_dest_dir);
|
||||||
ERR_FAIL_COND_V_MSG(!da, ERR_CANT_OPEN, "Cannot open directory '" + p_dest_dir + "'.");
|
ERR_FAIL_COND_V_MSG(!da, ERR_CANT_OPEN, "Cannot open directory '" + p_dest_dir + "'.");
|
||||||
|
|
||||||
|
@ -1043,6 +1180,7 @@ Error EditorExportPlatformIOS::export_project(const Ref<EditorExportPreset> &p_p
|
||||||
files_to_parse.insert("godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata");
|
files_to_parse.insert("godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata");
|
||||||
files_to_parse.insert("godot_ios.xcodeproj/xcshareddata/xcschemes/godot_ios.xcscheme");
|
files_to_parse.insert("godot_ios.xcodeproj/xcshareddata/xcschemes/godot_ios.xcscheme");
|
||||||
files_to_parse.insert("godot_ios/godot_ios.entitlements");
|
files_to_parse.insert("godot_ios/godot_ios.entitlements");
|
||||||
|
files_to_parse.insert("godot_ios/Launch Screen.storyboard");
|
||||||
|
|
||||||
IOSConfigData config_data = {
|
IOSConfigData config_data = {
|
||||||
pkg_name,
|
pkg_name,
|
||||||
|
@ -1216,9 +1354,46 @@ Error EditorExportPlatformIOS::export_project(const Ref<EditorExportPreset> &p_p
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
err = _export_loading_screens(p_preset, dest_dir + binary_name + "/Images.xcassets/LaunchImage.launchimage/");
|
bool use_storyboard = p_preset->get("storyboard/use_launch_screen_storyboard");
|
||||||
if (err)
|
|
||||||
|
String launch_image_path = dest_dir + binary_name + "/Images.xcassets/LaunchImage.launchimage/";
|
||||||
|
String splash_image_path = dest_dir + binary_name + "/Images.xcassets/SplashImage.imageset/";
|
||||||
|
|
||||||
|
DirAccess *launch_screen_da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
|
||||||
|
|
||||||
|
if (!launch_screen_da) {
|
||||||
|
return ERR_CANT_CREATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (use_storyboard) {
|
||||||
|
print_line("Using Launch Storyboard");
|
||||||
|
|
||||||
|
if (launch_screen_da->change_dir(launch_image_path) == OK) {
|
||||||
|
launch_screen_da->erase_contents_recursive();
|
||||||
|
launch_screen_da->remove(launch_image_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
err = _export_loading_screen_file(p_preset, splash_image_path);
|
||||||
|
} else {
|
||||||
|
print_line("Using Launch Images");
|
||||||
|
|
||||||
|
const String launch_screen_path = dest_dir + binary_name + "/Launch Screen.storyboard";
|
||||||
|
|
||||||
|
launch_screen_da->remove(launch_screen_path);
|
||||||
|
|
||||||
|
if (launch_screen_da->change_dir(splash_image_path) == OK) {
|
||||||
|
launch_screen_da->erase_contents_recursive();
|
||||||
|
launch_screen_da->remove(splash_image_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
err = _export_loading_screen_images(p_preset, launch_image_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
memdelete(launch_screen_da);
|
||||||
|
|
||||||
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
print_line("Exporting additional assets");
|
print_line("Exporting additional assets");
|
||||||
Vector<IOSExportAsset> assets;
|
Vector<IOSExportAsset> assets;
|
||||||
|
|
Loading…
Reference in New Issue