[iOS] saveBase64Data 호출 시 앱 크래시

이 글의 성격은 무엇인가요?

질문 / 문제 해결

내용을 설명해주세요

환경

  • 플랫폼: iOS Sandbox 앱
  • SDK 버전: @apps-in-toss/web-framework@1.6.0
  • 앱 유형: WebView 기반 미니앱
  • Android: 정상 동작

증상

saveBase64Data 호출 시 iOS에서 앱이 즉시 크래시됩니다.
JavaScript 에러 없이 앱 자체가 종료됩니다.


조사 과정 및 인사이트

  1. 데이터 크기 문제 가능성 배제

처음에는 PDF 파일(수 MB) 저장 시 크래시가 발생하여 데이터 크기
문제를 의심했습니다. 이를 검증하기 위해 1x1 픽셀 PNG (96 bytes)
로 테스트한 결과 동일하게 크래시가 발생했습니다.

→ 데이터 크기와 무관한 문제

  1. JavaScript 레벨 오류 가능성 배제

SDK 내부 동작을 추적하기 위해 두 패키지에 디버그 로그를
삽입했습니다.

@apps-in-toss/web-bridge (bridge.js)

  • saveBase64Data 함수 진입점에 로그 추가
  • 목적: 함수 호출 여부 및 파라미터 확인

@apps-in-toss/bridge-core (index.js)

  • createAsyncBridge 내부 각 단계에 로그 추가
  • 목적: 네이티브 통신 흐름의 어느 시점에서 크래시가 발생하는지
    특정
  1. 로그 결과

:white_check_mark: saveBase64Data 함수 진입
:white_check_mark: createAsyncBridge로 bridge 함수 생성
:white_check_mark: eventId 생성: “w9q9v0qvtlr”
:white_check_mark: resolve/reject 이벤트 리스너 등록
:white_check_mark: postMessage 호출 (메시지 구성 완료)
:white_check_mark: ReactNativeWebView.postMessage() 호출
:white_check_mark: ReactNativeWebView.postMessage() 반환 (메시지가 네이티브로
전달됨)
:white_check_mark: “waiting for native response…” 로그 출력
:cross_mark: 이후 앱 크래시 (resolve/reject 콜백 도달 전)

  1. 결론

ReactNativeWebView.postMessage()가 정상적으로 반환된 후
크래시가 발생합니다. 이는 JavaScript → Native 메시지 전달은
성공했으나, iOS 네이티브의 saveBase64Data 핸들러가 메시지를
처리하는 과정에서 크래시가 발생함을 의미합니다.


재현 방법

  1. WebView 기반 미니앱에서 아래 코드 실행
 import { saveBase64Data } from ‘@apps-in-toss/web-framework’;

// 1x1 pixel PNG (96 bytes)
const TINY_PNG = ‘iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJA
AAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==’;

await saveBase64Data({
data: TINY_PNG,
fileName: ‘test.png’,
mimeType: ‘image/png’,
});
  1. iOS Sandbox 앱에서 실행 → 즉시 크래시
  2. Android에서 동일 코드 실행 → 정상 동작

질문

iOS 네이티브 saveBase64Data 핸들러 쪽 크래시 로그 확인이
가능할까요? WebView에서 전달한 메시지는 정상이며, 네이티브
핸들러 내부에서 문제가 발생하는 것으로 보입니다.

appName (선택)

qanda-scanner

1개의 좋아요

안녕하세요 :slight_smile:
확인해보겠습니다!

2개의 좋아요

저도 동일한 현상이 발생합니다!

안녕하세요 :slight_smile:
현재 개발자센터에 업로드 되어있는 최신버전의 ios 샌드박스 앱으로 테스트 해봐주실 수 있을까요 ?