Skip to content

[BUG] Paywall preloading hangs main thread and crashes WebContent on iOS 26 #467

@georgecartridge

Description

@georgecartridge

New issue checklist

  • I have reviewed the README and documentation
  • I have searched existing issues and this is not a duplicate
  • I have attempted to reproduce the issue and include an example project.

General information

  • Superwall version: 4.14.2
  • iOS version(s): 26.1 / 26.3.1 / 26.4.1
  • Xcode version: 26.1
  • Devices/Simulators affected: iPhone 13 (Physical) / iPhone 15 Plus (Physical) / iPhone 12 (Simulator)

Describe the bug

We're calling Superwall.configure(apiKey:) on app launch with default options - no custom SuperwallOptions, no overrides, just the standard configuration as documented in the setup guide. All of the paywalls are being preloaded.

On iOS 26.1 (simulator) / 26.3.1 (physical device) / 26.4.1 (physical device) , this preload phase is causing visible app freezes for the user during launch. Instruments confirms a Brief Unresponsiveness hang of ~188 ms about 8 seconds into launch.

When the preload kicks in, the Xcode console fills with output like this (truncated - there are 180+ of these):

WebContent[36963] Unable to hide query parameters from script (missing data)
WebContent[36965] Unable to hide query parameters from script (missing data)
...

WebContent[36963] makeImagePlus:3798: *** ERROR: 'WEBP'-_reader->initImage[0] failed err=-50
WebContent[36963] makeImagePlus:3798: *** ERROR: 'WEBP'-_reader->initImage[0] failed err=-50
... (repeats ~15 times for PID 36963) ...

WebContent[36965] makeImagePlus:3798: *** ERROR: 'WEBP'-_reader->initImage[0] failed err=-50
WebContent[36965] makeImagePlus:3798: *** ERROR: 'WEBP'-_reader->initImage[0] failed err=-50
... (repeats ~15 times for PID 36965) ...

WebContent[36963] 0x10d04c100 - [sessionID=1] WebProcess::updateFreezerStatus: isFreezable=1, error=-1
WebContent[36965] 0x10d04c100 - [sessionID=1] WebProcess::updateFreezerStatus: isFreezable=1, error=-1
WebContent[36966] 0x11004c100 - [sessionID=1] WebProcess::updateFreezerStatus: isFreezable=1, error=-1
WebContent[36967] 0x11104c100 - [sessionID=1] WebProcess::updateFreezerStatus: isFreezable=1, error=-1
WebContent[36960] 0x11004c100 - [sessionID=1] WebProcess::updateFreezerStatus: isFreezable=1, error=-1

0x130088680 - [PID=36963] WebProcessProxy::didClose: (web process 0 crash)
0x130088680 - [PID=36963] WebProcessProxy::processDidTerminateOrFailedToLaunch: reason=Crash
0x130088c40 - [PID=36965] WebProcessProxy::didClose: (web process 0 crash)
0x130089200 - [PID=36966] WebProcessProxy::didClose: (web process 0 crash)
0x1300897c0 - [PID=36967] WebProcessProxy::didClose: (web process 0 crash)
0x1300880c0 - [PID=36960] WebProcessProxy::didClose: (web process 0 crash)

When tested on iOS 18.2, these errors do not appear in the console and the app no longer freezes.
On iOS 26.x, if I disable paywall preloading – paywalls.shouldPreload = false – then the app no longer freezes. However, once a paywall appears, the console shows output like the above (but a smaller amount)

Whilst I see all of these errors and freezes, the app still renders the paywalls. There's no missing images or assets

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions