From 948de96d64c79272f3205d97a4a4cdb727c6588c Mon Sep 17 00:00:00 2001 From: Martin Guillon Date: Fri, 4 Sep 2026 21:37:48 +0200 Subject: [PATCH] fix(ios): do not assign the 'spring' curve as a timing function `curve === 'spring'` selects CASpringAnimation, then fell through to `basicAnimation.timingFunction = curve` and put the string 'spring' where CoreAnimation expects a CAMediaTimingFunction. The assignment is silent; the app aborts at the next CA commit, inside -[CASpringAnimation _copyRenderAnimationForLayer:], with `-[NSTaggedPointerString _getPoints:]: unrecognized selector sent to instance`. Every other curve value is a real CAMediaTimingFunction, so only `curve: 'spring'` was affected - any view animated with it crashed the app. Co-Authored-By: Claude Opus 5 --- packages/core/ui/animation/index.ios.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core/ui/animation/index.ios.ts b/packages/core/ui/animation/index.ios.ts index c6089bc9d4..ef9407e4d7 100644 --- a/packages/core/ui/animation/index.ios.ts +++ b/packages/core/ui/animation/index.ios.ts @@ -516,7 +516,9 @@ export class Animation extends AnimationBase { if (delay !== undefined) { basicAnimation.beginTime = CACurrentMediaTime() + delay; } - if (curve !== undefined) { + // 'spring' selected CASpringAnimation above, it is not a timing function: assigning the + // string here aborts at the next CA commit with `-[NSTaggedPointerString _getPoints:]`. + if (curve !== undefined && curve !== 'spring') { basicAnimation.timingFunction = curve; }