iOS package size vs Android

Hi,

My question is pretty simple. When we package our game to android the total size is around 200 mb. Meanwhile on iOS the same assets is over 700 mb. When investigating the .Ipa file i can see that many of the materials are over 6-9+ mb while the same materials are 400% smaller on Android.

The project has 1 dynamic point light and 1 stationary Directional light. I have tried both to compile with and without Metal support and that differs around 40mb, so i don’t think the issues is shaders for both openGl and Metal.

Also removing setting dynamic point light to 0 will reduce the size to about 400 mb. But still this is twice the size of the Android build with dynamic point light set to 1.

Is there any reasonable answer for why this is?

Best Regards

Hello MaximFrisk,

I believe you will benefit from reading the documentation we have on iOS Packaged Game Size and Reducing Package Size.

The main thing to take away from these documents is that for iOS “We never compress the executable since it is encrypted when uploaded to the App Store and will not compress at all there.” We will continue to work on reducing the amount and size of required engine content over time, as well as look at optimizing the executable size.

The loading screens and icons are .png files that you create; you can provide fewer variations (Tappy Chicken has one for all the devices) or use simpler icons to reduce their size further.

It is important to understand that any content referenced in your game will get cooked; some common gotchas are referring to huge otherwise unused textures as the default for a texture sample in a material function or material, or referencing unused content in an disconnected node or unused variable in your blueprint. These count as referenced even if all of your material instances replace them with something else. You can look in the cooked asset folder and if you spot any unexpected assets, use the Reference Viewer to track down who refers to it.

Let me know if you have further questions or need additional assistance.

Cheers,

Hi @AndrewHurley
Thanks for the answer. I have looked at the links you provided and most of the settings that are used in “reducing package size” is used in our project as well. The main problem we are experiencing is that Materials are cooked in such a huge size on iOS. For example we have multiple materials used for our particles and those 10 materials have a total size of 5 mb on android and 55 mb+ on iOS.

All the other assets are fine. And both builds contain the exact same assets when looking in to the files in the APK and IPA. I do understand that you don’t compress the executable on iOS, but should this result in app size increase from 200 mb to 700 mb between Android and iOS?

Maybe i missed something important here. But the question remains why are the cooked materials are so… so… much larger on iOS than Android. i mean 1.8 mb vs 8.4 mb.

i will attach two screenshots one from the android and the other from the iOS package build.

Best reagards

Under what configuration are you packaging?

It is important to understand that any content referenced in your game will get cooked; some common gotchas are referring to huge otherwise unused textures as the default for a texture sample in a material function or material, or referencing unused content in an disconnected node or unused variable in your blueprint.

These count as referenced even if all of your material instances replace them with something else. You can look in the cooked asset folder and if you spot any unexpected assets, use the Reference Viewer to track down who refers to it.

Content-only projects have a larger executable since they cannot make any assumptions about which plugins and libraries you are using. You can usually shrink your executable a little bit by switching to C++, and disabling unnecessary plugins and libraries at compile time (via EnabledPlugins and the Project.Build.cs and Project.Target.cs files).

However, we have an optimization to remove more than 30 MB of Slate assets in content-only games since they cannot use Slate. If you make a C++ project that does not use Slate, you can save this space by setting bUsesSlate = false in the constructor of your TargetRules class in Project.Target.cs.

This is all the information I can provide in regards to the explanation of your Packaged Size for iOS. We will continue to provide resources and ways to reduce the overall size of your IPA and iOS projects as we move forward.

Thank you,