Updates on iOS app packging
This commit is contained in:
@@ -69,9 +69,9 @@ void iOSPlatformTools::OnBuildStarted(CookingData& data)
|
|||||||
{
|
{
|
||||||
// Adjust the cooking output folders for packaging app
|
// Adjust the cooking output folders for packaging app
|
||||||
const auto appName = GetAppName();
|
const auto appName = GetAppName();
|
||||||
String contents = appName + TEXT(".app/Contents/");
|
String contents = appName + TEXT(".app/");
|
||||||
data.DataOutputPath /= contents;
|
data.DataOutputPath /= contents;
|
||||||
data.NativeCodeOutputPath /= contents / TEXT("iPhoneOS");
|
data.NativeCodeOutputPath /= contents;
|
||||||
data.ManagedCodeOutputPath /= contents;
|
data.ManagedCodeOutputPath /= contents;
|
||||||
|
|
||||||
PlatformTools::OnBuildStarted(data);
|
PlatformTools::OnBuildStarted(data);
|
||||||
@@ -134,8 +134,7 @@ bool iOSPlatformTools::OnPostProcess(CookingData& data)
|
|||||||
TextureData iconData;
|
TextureData iconData;
|
||||||
if (!EditorUtilities::GetApplicationImage(platformSettings->OverrideIcon, iconData))
|
if (!EditorUtilities::GetApplicationImage(platformSettings->OverrideIcon, iconData))
|
||||||
{
|
{
|
||||||
String iconFolderPath = data.DataOutputPath / TEXT("Resources");
|
String tmpFolderPath = data.DataOutputPath / TEXT("icon.iconset");
|
||||||
String tmpFolderPath = iconFolderPath / TEXT("icon.iconset");
|
|
||||||
if (!FileSystem::DirectoryExists(tmpFolderPath))
|
if (!FileSystem::DirectoryExists(tmpFolderPath))
|
||||||
FileSystem::CreateDirectory(tmpFolderPath);
|
FileSystem::CreateDirectory(tmpFolderPath);
|
||||||
String srcIconPath = tmpFolderPath / TEXT("icon_1024x1024.png");
|
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_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 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("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)
|
if (failed)
|
||||||
{
|
{
|
||||||
LOG(Error, "Failed to export application icon.");
|
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("key")).set_child_value(PUGIXML_TEXT("LSRequiresIPhoneOS"));
|
||||||
dict.append_child(PUGIXML_TEXT("true"));
|
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) \
|
#define ADD_ENTRY(key, value) \
|
||||||
dict.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT(key)); \
|
dict.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT(key)); \
|
||||||
dict.append_child(PUGIXML_TEXT("string")).set_child_value(PUGIXML_TEXT(value))
|
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("CFBundleDevelopmentRegion", "English");
|
||||||
ADD_ENTRY("CFBundlePackageType", "APPL");
|
ADD_ENTRY("CFBundlePackageType", "APPL");
|
||||||
ADD_ENTRY("NSPrincipalClass", "NSApplication");
|
ADD_ENTRY("CFBundleSignature", "????");
|
||||||
ADD_ENTRY("LSApplicationCategoryType", "public.app-category.games");
|
ADD_ENTRY("LSApplicationCategoryType", "public.app-category.games");
|
||||||
ADD_ENTRY("LSMinimumSystemVersion", "14");
|
ADD_ENTRY("CFBundleInfoDictionaryVersion", "6.0");
|
||||||
ADD_ENTRY("CFBundleIconFile", "icon.icns");
|
ADD_ENTRY("CFBundleIconFile", "icon.icns");
|
||||||
|
ADD_ENTRY("MinimumOSVersion", "14.0");
|
||||||
ADD_ENTRY_STR("CFBundleExecutable", executableName);
|
ADD_ENTRY_STR("CFBundleExecutable", executableName);
|
||||||
ADD_ENTRY_STR("CFBundleIdentifier", appIdentifier);
|
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("CFBundleGetInfoString", gameSettings->ProductName);
|
||||||
ADD_ENTRY_STR("CFBundleVersion", projectVersion);
|
ADD_ENTRY_STR("CFBundleVersion", projectVersion);
|
||||||
|
ADD_ENTRY_STR("CFBundleShortVersionString", projectVersion);
|
||||||
ADD_ENTRY_STR("NSHumanReadableCopyright", gameSettings->CopyrightNotice);
|
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"));
|
dict.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT("UIRequiredDeviceCapabilities"));
|
||||||
xml_node UIRequiredDeviceCapabilities = dict.append_child(PUGIXML_TEXT("array"));
|
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("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"));
|
dict.append_child(PUGIXML_TEXT("key")).set_child_value(PUGIXML_TEXT("UISupportedInterfaceOrientations"));
|
||||||
xml_node UISupportedInterfaceOrientations = dict.append_child(PUGIXML_TEXT("array"));
|
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("UIInterfaceOrientationLandscapeLeft"));
|
||||||
UISupportedInterfaceOrientations.append_child(PUGIXML_TEXT("string")).set_child_value(PUGIXML_TEXT("UIInterfaceOrientationLandscapeRight"));
|
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
|
||||||
#undef ADD_ENTRY_STR
|
#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)
|
// TODO: expose event to inject custom post-processing before app packaging (eg. third-party plugins)
|
||||||
|
|
||||||
// Package application
|
// Package application
|
||||||
const auto buildSettings = BuildSettings::Get();
|
/*const auto buildSettings = BuildSettings::Get();
|
||||||
if (buildSettings->SkipPackaging)
|
if (buildSettings->SkipPackaging)
|
||||||
return false;
|
return false;
|
||||||
GameCooker::PackageFiles();
|
GameCooker::PackageFiles();
|
||||||
@@ -240,7 +258,7 @@ bool iOSPlatformTools::OnPostProcess(CookingData& data)
|
|||||||
}
|
}
|
||||||
// TODO: sign dmg
|
// TODO: sign dmg
|
||||||
LOG(Info, "Output application package: {0} (size: {1} MB)", dmgPath, FileSystem::GetFileSize(dmgPath) / 1024 / 1024);
|
LOG(Info, "Output application package: {0} (size: {1} MB)", dmgPath, FileSystem::GetFileSize(dmgPath) / 1024 / 1024);
|
||||||
|
*/
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user