아카이브/배포 검증 에러 해결기: Invalid Bundle Identifier, Bad CFBundleExecutable, Shared bundle path

2025. 8. 17. 16:30·Swift
728x90

Invalid Bundle Identifier / Bad CFBundleExecutable / Shared bundle path

앱을 아카이브 후 App Store Connect에 올리려다 보면, 검증 단계에서 가끔 애매한 에러를 세트로 마주할 때가 있습니다. 이번에 겪은 케이스는 다음과 같았습니다.

  • Invalid Bundle Identifier
  • Bad CFBundleExecutable
  • The CFBundleExecutable of two bundles may not point to the same file

처음엔 무슨 문제인지 감도 안 잡혔지만, 원인을 찾고 정리해 보니 꽤 전형적인 케이스였습니다.


증상

Validate / Distribute 단계에서 아래 메시지가 그대로 나타났습니다.

  • Invalid Bundle Identifier: $(PRODUCT_BUNDLE_IDENTIFIER) 값이 그대로 감지됨
  • Bad CFBundleExecutable: $(EXECUTABLE_NAME)과 일치하는 실행 파일을 찾지 못함
  • Shared bundle path: 두 번들이 동일한 실행 파일 경로를 가리킨다고 판단됨

즉, 빌드 변수가 해석되지 않은 채 Info.plist 내부에 남아 있었던 것이 문제였습니다.


원인 분석

조사해보니 프로젝트 내부에 Info.plist 파일이 두 개 있었습니다.

  • 유효한 파일: Config/Info.plist
  • 문제 파일: 프로젝트명/Config/Info.plist

아카이브 시 두 Info.plist가 모두 번들에 포함되면서, 검증 시스템이 “중첩 번들”로 잘못 인식한 겁니다. 특히 문제의 Info.plist는 CFBundleIdentifier = $(PRODUCT_BUNDLE_IDENTIFIER) 같은 미확장 값을 그대로 가지고 있어 에러를 유발했습니다.


실제 프로젝트 상태

  • 남긴 파일: Config/Info.plist
  • 삭제한 파일: 프로젝트명/Config/Info.plist
  • 빌드 설정:
    • INFOPLIST_FILE = Config/Info.plist
    • INFOPLIST_EXPAND_BUILD_SETTINGS = YES
    • PRODUCT_BUNDLE_IDENTIFIER = com.번들.번들
    • EXECUTABLE_NAME = 프로젝트명
    • PRODUCT_NAME = 프로젝트명

해결 절차

  1. 중복 Info.plist 제거
    • SnapTextOCR/Config/Info.plist 파일 삭제
  2. 빌드 설정 재확인
    • Targets > Build Settings > INFOPLIST_FILE → Config/Info.plist
    • INFOPLIST_EXPAND_BUILD_SETTINGS = YES 유지
  3. 번들 리소스 점검
    • Build Phases > Copy Bundle Resources → Info.plist가 포함되지 않도록 확인
  4. 정리 후 재시도
    • Product > Clean Build Folder
    • 다시 Archive → Validate / Distribute

왜 이게 한 번에 해결되는가?

App Store 검증기는 번들 내부의 모든 Info.plist를 스캔합니다.
만약 그중 하나라도 빌드 변수가 미확장 상태($(...))로 남아 있으면, 곧바로 잘못된 Bundle Identifier / Executable로 판정합니다.

즉, 중복 Info.plist 제거 → 단일화된 메타데이터 유지 → 3종 에러가 동시에 사라지는 구조입니다.


재발 방지 체크리스트

  • Info.plist는 반드시 하나만 유지 (보통 Config/ 디렉토리)
  • Copy Bundle Resources 단계에 Info.plist 추가 금지
  • 파일 추가 시 경로를 꼼꼼히 확인 (Config/Info.plist를 소스에 다시 복사하지 않기)
  • 대안: 특별한 커스텀이 없다면 GENERATE_INFOPLIST_FILE = YES 옵션을 사용해 수동 Info.plist 자체를 제거하는 것도 가능

마무리

결국 이번 문제는 “중복된 Info.plist 한 장” 때문에 발생한 전형적인 검증 에러였습니다.
핵심은 간단합니다.

-> 앱 번들 안에 Info.plist는 반드시 하나만 존재해야 한다.

위 절차대로 정리하면 동일한 3종 에러는 말끔히 해결할 수 있습니다.

728x90
LIST

'Swift' 카테고리의 다른 글

our app is missing support for the following URL schemes  (0) 2025.06.16
Ios 배포 후 Log 보는법  (0) 2025.06.16
Xcode 다른 버전 실행하는 방법  (1) 2025.01.14
Swift 기본 문법  (1) 2023.09.26
'Swift' 카테고리의 다른 글
  • our app is missing support for the following URL schemes
  • Ios 배포 후 Log 보는법
  • Xcode 다른 버전 실행하는 방법
  • Swift 기본 문법
Mr. Joo
Mr. Joo
  • Mr. Joo
    삽질의 시작
    Mr. Joo
  • 전체
    오늘
    어제
    • 분류 전체보기 (230) N
      • 개발 요약 (9) N
      • Flutter (71)
      • Android (9)
      • Swift (5)
      • React (11)
      • 인공지능 (4)
      • CS (10)
      • 개발 뉴스 (108)
      • IT 기기 (1)
      • 알면 유용한 정보 (2)
  • 인기 글

  • 태그

    기술 뉴스
    Flutter
    오늘의 기술 뉴스
    Dart 기초
    android
    개발 이슈
    이슈
    앱
    개발 뉴스
    개발
    DART
    Swift
    기술
    뉴스
    플러터
    react
    오늘의 뉴스
    앱 개발
    오늘의 이슈
    오늘의 개발 뉴스
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Mr. Joo
아카이브/배포 검증 에러 해결기: Invalid Bundle Identifier, Bad CFBundleExecutable, Shared bundle path
상단으로

티스토리툴바