fix(ios): 아카이브 strip이 TFLite 심볼 제거 → 분석 항상 실패 - #43
Merged
Conversation
TestFlight에서 분석이 항상 실패했다: Failed to lookup symbol 'TfLiteInterpreterOptionsCreate': dlsym(RTLD_DEFAULT, ...): symbol not found tflite_flutter는 iOS에서 DynamicLibrary.process()로 TensorFlowLiteC 심볼을 런타임 조회한다. Xcode 기본값 STRIP_STYLE=all로 아카이브하면 strip이 실행 파일 export trie에서 전역 심볼을 제거해 조회가 깨진다. flutter build ios는 strip을 돌리지 않아 로컬 릴리즈 빌드는 정상이고 xcodebuild archive만 실패해 TestFlight에서만 재현됐다. [ios/Flutter/Release.xcconfig] - STRIP_STYLE = non-global. 로컬 심볼만 제거하므로 바이너리 크기 감소폭은 all과 동일(41MB)하고 전역 심볼은 보존된다 검증: - 로컬 릴리즈 빌드 바이너리: TFLite export 심볼 2개 존재 - 수동 strip(all) 실행 시 0개로 소멸 — TestFlight 증상 재현 - 수정 후 xcodebuild archive: ARCHIVE SUCCEEDED, 40.5MB, 심볼 2개 생존
devpark435
marked this pull request as ready for review
July 30, 2026 08:29
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
증상
TestFlight에서 분석이 매번 실패. PR #42로 넣은 진단 로그가 원인을 그대로 잡아냄:
스택:
ball_detection_service.dart:115(InterpreterOptions()) — GPU 시도와 CPU 폴백이 같은 지점에서 죽어 폴백이 무의미했음.파이프라인 앞단은 정상이었다:
[FrameExtractor] 추출 완료: 210개 프레임.원인
tflite_flutter는 iOS에서DynamicLibrary.process()를 쓴다 — TensorFlowLiteC 심볼을 런타임에dlsym으로 찾음STRIP_STYLE = allxcodebuild archive가 실행 파일 export trie에서 전역 심볼을 제거dlsym실패flutter build ios --release는 strip을 돌리지 않는다. 그래서 로컬 릴리즈 빌드는 정상이고 CI의xcodebuild archive만 깨져 TestFlight에서만 재현됐다.수정
ios/Flutter/Release.xcconfig에STRIP_STYLE = non-global(Runner Release 베이스 컨피그).검증
flutter build ios --release산출물 (56MB)strip(=all) 수동 실행 (41MB)strip -x(non-global) (41MB)xcodebuild archive(40.5MB, ARCHIVE SUCCEEDED)크기 감소폭이
all과 동일(41MB) — non-global 전환 비용 없음.참고
CI가
--build-number=$((GITHUB_RUN_NUMBER + 10))으로 빌드번호를 덮어쓴다. pubspec의 빌드번호는 무시되고 실제 배포는1.3.0+44였다. 앞으로 빌드번호 수동 bump 불필요.