Updates on iOS app packging

This commit is contained in:
Wojtek Figat
2023-04-13 23:01:31 +02:00
parent 2c653f8c92
commit 7a01ccb5fb

View File

@@ -69,9 +69,9 @@ void iOSPlatformTools::OnBuildStarted(CookingData& data)
{
// Adjust the cooking output folders for packaging app
const auto appName = GetAppName();
String contents = appName + TEXT(".app/Contents/");
String contents = appName + TEXT(".app/");
data.DataOutputPath /= contents;
data.NativeCodeOutputPath /= contents / TEXT("iPhoneOS");
data.NativeCodeOutputPath /= contents;
data.ManagedCodeOutputPath /= contents;
PlatformTools::OnBuildStarted(data);
@@ -134,8 +134,7 @@ bool iOSPlatformTools::OnPostProcess(CookingData& data)
TextureData iconData;
if (!EditorUtilities::GetApplicationImage(platformSettings->OverrideIcon, iconData))
{
String iconFolderPath = data.DataOutputPath / TEXT("Resources");
String tmpFolderPath = iconFolderPath / TEXT("icon.iconset");
String tmpFolderPath = data.DataOutputPath / TEXT("icon.iconset");
if (!FileSystem::DirectoryExists(tmpFolderPath))
FileSystem::CreateDirectory(tmpFolderPath);
String srcIconPath = tmpFolderPath / TEXT("icon_1024x1024.png");
@@ -154,7 +153,7 @@ bool iOSPlatformTools::OnPostProcess(CookingData& data)
failed |= Platform::RunProcess(TEXT("sips -z 512 512 icon_1024x1024.png --out icon_256x256@2x.png"), tmpFolderPath);
failed |= Platform::RunProcess(TEXT("sips -z 512 512 icon_1024x1024.png --out icon_512x512.png"), tmpFolderPath);
failed |= Platform::RunProcess(TEXT("sips -z 1024 1024 icon_1024x1024.png --out icon_512x512@2x.png"), tmpFolderPath);
failed |= Platform::RunProcess(TEXT("iconutil -c icns icon.iconset"), iconFolderPath);
failed |= Platform::RunProcess(TEXT("iconutil -c icns icon.iconset"), data.DataOutputPath);
if (failed)
{
LOG(Error, "Failed to export application icon.");
@@ -178,6 +177,18 @@ bool iOSPlatformTools::OnPostProcess(CookingData& data)
dict.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT("LSRequiresIPhoneOS"));
dict.append_child(PUGIXML_TEXT("true"));
dict.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT("UIStatusBarHidden"));
dict.append_child(PUGIXML_TEXT("true"));
dict.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT("UIRequiresFullScreen"));
dict.append_child(PUGIXML_TEXT("true"));
dict.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT("UIViewControllerBasedStatusBarAppearance"));
dict.append_child(PUGIXML_TEXT("false"));
dict.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT("CFBundleIcons"));
dict.append_child(PUGIXML_TEXT("dict"));
#define ADD_ENTRY(key, value) \
dict.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT(key)); \
dict.append_child(PUGIXML_TEXT("string")).set_child_value(PUGIXML_TEXT(value))
@@ -188,21 +199,24 @@ bool iOSPlatformTools::OnPostProcess(CookingData& data)
ADD_ENTRY("CFBundleDevelopmentRegion", "English");
ADD_ENTRY("CFBundlePackageType", "APPL");
ADD_ENTRY("NSPrincipalClass", "NSApplication");
ADD_ENTRY("CFBundleSignature", "????");
ADD_ENTRY("LSApplicationCategoryType", "public.app-category.games");
ADD_ENTRY("LSMinimumSystemVersion", "14");
ADD_ENTRY("CFBundleInfoDictionaryVersion", "6.0");
ADD_ENTRY("CFBundleIconFile", "icon.icns");
ADD_ENTRY("MinimumOSVersion", "14.0");
ADD_ENTRY_STR("CFBundleExecutable", executableName);
ADD_ENTRY_STR("CFBundleIdentifier", appIdentifier);
ADD_ENTRY_STR("CFBundleName", appName); // TODO: limit to 15 chars max
ADD_ENTRY_STR("CFBundleDisplayName", gameSettings->ProductName);
ADD_ENTRY_STR("CFBundleGetInfoString", gameSettings->ProductName);
ADD_ENTRY_STR("CFBundleVersion", projectVersion);
ADD_ENTRY_STR("CFBundleShortVersionString", projectVersion);
ADD_ENTRY_STR("NSHumanReadableCopyright", gameSettings->CopyrightNotice);
ADD_ENTRY("UIRequiresFullScreen", "true");
ADD_ENTRY("UIStatusBarHidden", "true");
dict.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT("UIRequiredDeviceCapabilities"));
xml_node UIRequiredDeviceCapabilities = dict.append_child(PUGIXML_TEXT("array"));
UIRequiredDeviceCapabilities.append_child(PUGIXML_TEXT("string")).set_child_value(PUGIXML_TEXT("arm64"));
UIRequiredDeviceCapabilities.append_child(PUGIXML_TEXT("string")).set_child_value(PUGIXML_TEXT("metal"));
dict.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT("UISupportedInterfaceOrientations"));
xml_node UISupportedInterfaceOrientations = dict.append_child(PUGIXML_TEXT("array"));
@@ -210,6 +224,10 @@ bool iOSPlatformTools::OnPostProcess(CookingData& data)
UISupportedInterfaceOrientations.append_child(PUGIXML_TEXT("string")).set_child_value(PUGIXML_TEXT("UIInterfaceOrientationLandscapeLeft"));
UISupportedInterfaceOrientations.append_child(PUGIXML_TEXT("string")).set_child_value(PUGIXML_TEXT("UIInterfaceOrientationLandscapeRight"));
dict.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT("CFBundleSupportedPlatforms"));
xml_node CFBundleSupportedPlatforms = dict.append_child(PUGIXML_TEXT("array"));
CFBundleSupportedPlatforms.append_child(PUGIXML_TEXT("string")).set_child_value(PUGIXML_TEXT("iPhoneOS"));
#undef ADD_ENTRY
#undef ADD_ENTRY_STR
@@ -225,7 +243,7 @@ bool iOSPlatformTools::OnPostProcess(CookingData& data)
// TODO: expose event to inject custom post-processing before app packaging (eg. third-party plugins)
// Package application
const auto buildSettings = BuildSettings::Get();
/*const auto buildSettings = BuildSettings::Get();
if (buildSettings->SkipPackaging)
return false;
GameCooker::PackageFiles();
@@ -240,7 +258,7 @@ bool iOSPlatformTools::OnPostProcess(CookingData& data)
}
// TODO: sign dmg
LOG(Info, "Output application package: {0} (size: {1} MB)", dmgPath, FileSystem::GetFileSize(dmgPath) / 1024 / 1024);
*/
return false;
}