Skip to main content
Question

Revenuecat paywall HEIC images causes iOS app hang/crashes

  • December 8, 2025
  • 0 replies
  • 12 views

Forum|alt.badge.img

Our app is experiencing native crashes on iOS when displaying RevenueCat paywalls. The crash occurs in Apple's HEIF image decoder when trying to render paywall images served in HEIC format.

Environment

  • RevenueCat SDK (react-native) version: 9.6.9
  • iOS versions affected: iOS 17.x, iOS 18.5 (confirmed)
  • Devices: iPhone 13, and likely others
  • App framework: React Native / Expo

Crash Stack Trace

Thread #0 (main):
VideoToolbox VTDecompressionSessionRemoteClient_CopyProperty
VideoToolbox VTDecompressionSessionRemote_CopyProperty
CMPhoto VTDecompressionPluginClass_copyPixelBufferAttributes
CMPhoto HEIFItemDecoderCreate
CMPhoto _decodeItem
CMPhoto _applyDecodeStrategy
CMPhoto _decodeImage
CMPhoto _decodeAuxiliaryImage
CMPhoto _createAuxiliaryImageForIndex
CMPhoto _createImageForIndex
CMPhoto CMPhotoDecompressionContainerCreateImageForIndex
ImageIO HEIFReadPlugin::copyImageBlockSetImp
ImageIO HEIFReadPlugin::decodeImageImp
...
QuartzCore CA::Render::copy_image
QuartzCore CA::Render::prepare_image
QuartzCore CA::Layer::prepare_contents

Root Cause

RevenueCat serves paywall images in HEIC format (e.g., https://assets.pawwalls.com/xxxxx.heic).

 

Apple's ImageIO HEIF decoder has known bugs in iOS 17+ and iOS 18 that cause crashes during image decoding. This was acknowledged by Apple and documented in several open-source projects:

The crash occurs in the native rendering pipeline (QuartzCore → ImageIO → HEIFReadPlugin) and cannot be caught by application-level error handlers.

Request

Could RevenueCat consider:

  1. Serving paywall images in JPEG/PNG format instead of HEIC to avoid iOS decoder bugs
  2. Or providing an option to specify preferred image format
  3. Or using a more resilient image loading approach that handles HEIC decoder failures gracefully

Impact

This crash affects a portion of our iOS users and results in the app terminating when trying to display paywalls - directly impacting our ability to convert users to paid subscriptions.