앱스토어 업로드가 91169 에러로 거부될 때 (시뮬레이터 슬라이스 해결기)
Flutter 앱을 App Store에 올리다 91169 에러로 거부당했습니다. 시뮬레이터용 프레임워크가 딸려 들어간 원인과, 클린 재빌드 + otool로 확인해 해결한 과정을 직접 겪은 경험으로 정리했습니다.
안녕하세요. Jay입니다!
앱을 다 만들고, 심사 넣기 직전 마지막 관문인 업로드 단계. 여기서 빨간 에러 하나 뜨면 진짜 맥이 탁 풀리시죠? 저는 최근에 만든 Flutter 앱을 App Store에 올리다가, 마지막 업로드에서 91169 에러로 딱 막혔습니다. 빌드도 잘 됐고 서명도 통과했는데 업로드만 안 되니 더 답답하더라고요.
오늘은 같은 에러로 막히신 분들을 위해, 왜 이런 일이 생기고 어떻게 해결했는지 정리해 보겠습니다.
증상: 업로드가 91169로 거부됩니다
아카이브까지 멀쩡하게 만들어졌는데, Xcode Organizer나 Transporter로 올리는 순간 이런 메시지가 뜹니다.
Validation failed (91169)- 내용을 열어보면 "시뮬레이터(iOS Simulator)용으로 빌드된 프레임워크가 앱에 포함되어 있다" 는 취지의 안내
- 지목된 대상은 보통 앱 안
Frameworks/폴더의 특정.framework(제 경우엔objective_c.framework였습니다)
빌드 에러가 아니라 업로드 검증(validation) 단계에서 걸리는 거라, 로컬에서는 아무 문제 없이 실기기 설치까지 잘 되는 게 함정입니다.
원인: 시뮬레이터용 슬라이스가 딸려 들어갔다
iOS 프레임워크는 하나의 바이너리 안에 여러 슬라이스(slice) 를 담을 수 있습니다. 쉽게 말해 "실기기(arm64)용"과 "시뮬레이터용"이 한 파일에 같이 들어있을 수 있어요.
그런데 App Store에 올리는 빌드에는 실기기용 슬라이스만 들어있어야 합니다. 어떤 플러그인의 xcframework가 시뮬레이터 슬라이스를 함께 품고 있거나, 예전 빌드 캐시가 섞이면 시뮬레이터용 조각이 최종 앱에 딸려 들어가고, 애플이 그걸 잡아내 거부하는 겁니다.
해결 1: 우선 캐시를 싹 비우고 다시 빌드
가장 흔한 원인이 예전 빌드 산출물이 섞인 것이라, 저는 먼저 캐시를 전부 지우고 클린 재빌드부터 했습니다.
flutter clean
flutter pub get
cd ios && pod install && cd ..
# 실기기 릴리스 아카이브 다시 생성
flutter build ipa --release
많은 경우 여기서 해결됩니다. 시뮬레이터 슬라이스를 물고 있던 게 오래된 캐시였다면, 깨끗하게 다시 빌드하는 것만으로 사라지거든요.
해결 2: otool로 "진짜 iOS용"인지 눈으로 확인
재빌드했다고 무작정 다시 올리면, 또 거부당했을 때 시간만 날립니다. 그래서 저는 업로드 전에 문제의 프레임워크가 정말 실기기용인지 직접 확인했습니다. 맥에 기본 내장된 otool을 쓰면 됩니다.
# 아카이브 안 프레임워크 바이너리의 빌드 대상 플랫폼 확인
otool -l "build/ios/archive/Runner.xcarchive/Products/Applications/Runner.app/Frameworks/objective_c.framework/objective_c" | grep -A4 LC_BUILD_VERSION
출력에서 platform 값을 봅니다.
platform 2→ iOS(실기기). 정상입니다.platform 7→ iOS 시뮬레이터. 이게 보이면 아직 문제가 남은 겁니다.
저는 클린 재빌드 후 이 값이 platform 2로 찍히는 걸 확인하고 나서야 업로드했고, 그제서야 검증을 통과했습니다. "확인하고 올린다"는 이 한 단계가 재수 없는 재시도를 막아줍니다.
결론
정리하면 이렇습니다.
91169는 시뮬레이터용 프레임워크가 딸려 들어간 것 → 클린 재빌드로 캐시를 비우고, otool로 platform 2(iOS)인지 확인한 뒤 올린다.
빌드는 되는데 업로드만 막혀서 당황하기 쉬운 에러이지만, 원인만 알면 5분이면 잡히는 것 같습니다. 같은 벽에 부딪히셨다면 캐시부터 비우고 otool로 확인해 보세요! 다음에도 유익한 포스팅으로 찾아오겠습니다. 감사합니다!