Expo SDK 53 + EAS Update로 OTA 푸시하는데 푸시 후 Sentry에 native crash가 0.4% 정도 보고됩니다.
변경사항은 JS 한 줄짜리 텍스트 수정 (button label). native code 손도 안 댔습니다.
Sentry stack:
NSInvalidArgumentException: -[__NSCFConstantString objectForKey:]: unrecognized selector
at FBReactNativeSpec.mm:142
...
영향 받는 디바이스
- iOS 17.4 — crash 0.8%
- iOS 17.5+ — crash 0%
- Android 13 — crash 0.2%
EAS Update는 native code 변경 없으면 안전한 거 아닌가요?
댓글 4
EAS Update는 native code "변경"은 안 되지만, runtime version이 매칭되지 않는 사용자에게도 update가 푸시되면 native crash가 발생합니다.
원인 추정 — runtime version
JS 변경 1줄이지만 그 변경에 사용된 React Native API가 특정 native binary 버전 이상이 필요한 경우. 이전 native binary를 깐 사용자(0.4%)는 새 JS가 호출하는 함수가 native에 없어서 crash.
해결 — runtime version을 native binary 단위로:
또는 자동:
fingerprint policy가 가장 안전. native code 1바이트라도 바뀌면 자동 다른 runtime version 부여. update가 호환되지 않는 사용자에게 푸시 안 됨.
긴급 대응 — rollback
장기 정착
iOS 17.4가 약 2%인데 그 안에서 0.4%면 일부만 영향. native API surface 변경된 라이브러리(React Native 0.78+) 업데이트가 원인 가능성 큽니다.
fingerprint policy로 전환 후 OTA 사고 진짜 줄어들었습니다. 다만 fingerprint 변경 시 사용자가 App Store에서 새 binary 받아야 하니까 OTA 빈도는 좀 줄어요. trade-off지만 안정성 압승.