Battery usage considerations in an iOS app that makes heavy use of ARKit

We need to develop an iOS app that will make heavy use of ARSessions with ARFaceTrackingConfiguration, in more or less 100% of the screens. Our main concern is related to battery usage. We're in discovery phase, so I'm trying to find/research all possible risks related to it.

For now, what I found is:

  1. ARKit sessions don't "drain" the battery (I did some testing with my phone), they just consume more that common apps (more or less the same amount of battery than having the iPhone camera open for a long period of time, with the addition that ARSession is continually creating frames in order to track the face -real time video processing).

  2. I'm aware of run(_:options:) and pause() methods on ARSession, in order to pause the tracking functionality when it's not necessary.

  3. I'm aware about lowPowerModeEnabled and we can react to changes in that property.

I searched Apple Developer for some official article that provides general considerations about battery usage in an ARKit session, but I couldn't find anything dedicated to the topic. I'm wondering if there is a really important thing that I should be aware and I'm missing when implementing the feature. It's the first time I'll work with ARKit and it's critical for the project.

Thanks in advance!

If you want your app to be extra conscious about battery consumption and performance of the ARFaceTrackingConfiguration, then the thing to do to that would have the largest impact is to select and set a 30 fps video format instead of 60 fps:

        let configuration = ARFaceTrackingConfiguration()

        for format in ARFaceTrackingConfiguration.supportedVideoFormats {

            // Use the framesPerSecond and imageResolution properties of the format to make your selection.
            if selectionCriteriaIsMet {
                configuration.videoFormat = format
                break
            }
        }

        session.run(configuration)

Beyond this, you could make sure that you don't enable properties on your configuration that you don't actually utilize. For example, if your app doesn't need world tracking during the face tracking, don't enable isWorldTrackingEnabled. If your app doesn't need person segmentation, don't enable the personSegmentation frame semantic. If your app doesn't need light estimation, disable it by setting isLightEstimationEnabled to false.

Battery usage considerations in an iOS app that makes heavy use of ARKit
 
 
Q