Search Unity

Choosing the right architecture / device requirements for the long term

Discussion in 'iOS and tvOS' started by Swah, May 5, 2021.

  1. Swah

    Swah

    Joined:
    May 13, 2015
    Posts:
    80
    Hello,

    We will soon ship an app that we intend to update for several (5+) years. It is an app for kids with 2D graphics without huge performance requirements. We want the app to be compatible with older devices as much as possible, since kids often get second hand devices. We're on Unity 2019.4.25f1 (LTS), but will want to migrate to 2020 eventually.

    I'm trying to avoid the serious problem of being stuck on a unity version because we set the wrong requirements on iOS, as seen in this thread.

    Our current settings are:
    - Architecture: Universal (ARMv7 + ARM64)
    - Target minimum iOS version: 10.0
    - Auto Graphics API = true

    In XCode Info.plist, Required device capabilities has "armv7" and "Metal". Once a requirement is added to that list, you can't ever remove it. So should we ship with these settings, we would need to always support armv7, and would therefore not be able to update to Unity 2020 as it dropped support for it. If Apple and therefore Unity deprecates Metal in several years, we'd be stuck on a Unity version in order to keep supporting Metal.

    Given the long term strategy mentioned above, I'm wondering why I would ever want anything in "Required device capabilities". We could instead just increase the minimum iOS version over time. Metal is included in any devices with iOS 11+, so we could just require iOS version 11. Same thing for armv7: based on this, all devices that can install iOS 11 are using arm64. The settings would thus be:
    - Architecture: ARM64
    - Target minimum iOS version: 11.0
    - Auto Graphics API = true
    - delete everything in UIRequiredDeviceCapabilities through a post process script, as mentioned at the end of this thread.

    Is this a sensible ship strategy, or did I miss anything? Also if this is the way to go, why isn't this the default setting in Unity 2019 LTS? I'm aware that the downside of this approach is that we're not supporting devices on iOS10 and with metal, but that seems like an acceptable loss for longer term compatibility.
     
    Last edited: May 5, 2021
  2. Swah

    Swah

    Joined:
    May 13, 2015
    Posts:
    80
    I think I might have misunderstood how UIRequiredDeviceCapabilities works. It's ok to remove things from that list later, because you're effectively removing requirements. But you can't add to it later, as this would exclude existing customers.

    Let's say that Apple ships devices with a new graphics API that don't have Metal, and we can't update our app right away. Having "metal" in the requirements is actually a good thing in that scenario, since the app wouldn't work on these devices.

    Same reasoning for armv7/arm64, but here I'm not sure what to set. As mentioned above, Unity 2020 doesn't support armv7 anymore. I think this means we should have arm64 in UIRequiredDeviceCapabilities, since we won't be able to change from armv7 to arm64 in the future. So the project config should now be:
    - Architecture: ARM64
    - Target minimum iOS version: 10.0
    - Auto Graphics API = true
    And we don't change the default UIRequiredDeviceCapabilities output, which would be arm64 and metal in this case.

    Is this correct given our long term goals?
     
  3. theoaraujo

    theoaraujo

    Joined:
    May 12, 2018
    Posts:
    23
    @Swah I made my game in Unity 2019, but I recently had to migrate to Unity 2020 to be able to use the Unity Mediation package, and now I'm getting emails from iphone 5s and 6s users saying they can't open the game anymore after the update. Would there be any way out to use Unity 2020 and make the game open on older iphones?