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 = 프로젝트명
해결 절차
- 중복 Info.plist 제거
- SnapTextOCR/Config/Info.plist 파일 삭제
- 빌드 설정 재확인
- Targets > Build Settings > INFOPLIST_FILE → Config/Info.plist
- INFOPLIST_EXPAND_BUILD_SETTINGS = YES 유지
- 번들 리소스 점검
- Build Phases > Copy Bundle Resources → Info.plist가 포함되지 않도록 확인
- 정리 후 재시도
- 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종 에러는 말끔히 해결할 수 있습니다.
'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 |