한눈에 보기
- 문제: Xcode 16에서 App Store에 빌드를 올리면, 앱의 BitCode를 꺼 뒀는데도 BitCode 바이너리를 지우고 다시 올리라는 오류가 나며 업로드가 실패합니다.
- 원인: Apple은 Xcode 14에서 BitCode를 폐지했고, App Store는 그때부터 BitCode가 든 제출을 받지 않습니다. 미리 빌드된 Facebook SDK 프레임워크 6개(FBAEMKit, FBSDKCoreKit 등)에 BitCode가 남아 있었습니다.
- 해결: 프레임워크마다
xcrun bitcode_strip -r <바이너리> -o <바이너리>로 BitCode를 지우면 업로드됩니다. Facebook iOS SDK는 15.0.0부터 BitCode를 뺐기 때문에, 15.0.0 이상으로 올리면 이 단계가 필요 없을 수 있습니다.
확인한 환경: Xcode 16.1, Facebook SDK(CocoaPods), Jenkins 빌드 · 처음 쓴 날 2025-07-10 · 마지막 확인 2026-10-28
원인: Xcode 16 업로드에서 Facebook SDK의 BitCode가 걸립니다
Apple은 Xcode 14에서 BitCode를 폐지(deprecated)했고, 이때부터 App Store는 BitCode가 든 제출을 받지 않습니다. 다만 Xcode 14 릴리스 노트에는 BitCode가 든 IPA는 BitCode를 지운 뒤 제출된다고 적혀 있습니다(Xcode 14 릴리스 노트). Xcode 15에서는 BitCode 지원이 아예 없어져서 ENABLE_BITCODE 설정도 아무 효과가 없습니다(Xcode 15 릴리스 노트).
그래서 Xcode 15까지는 BitCode Enabled = FALSE로만 둬도, 만든 빌드를 앱스토어에 올리는 데 문제가 없었습니다. 그런데 Xcode 16부터는 업로드할 때 오류를 내면서 BitCode 바이너리를 지우고 다시 올리라고 합니다.
우리 프로젝트의 BitCode를 꺼도, Facebook SDK처럼 미리 빌드되어 들어오는 프레임워크에는 BitCode 바이너리가 그대로 남아 있습니다. 그래서 명령어나 Podfile로 BitCode를 강제로 지워서 해결해야 합니다.

Xcode 프로젝트에서 bitcode_strip으로 직접 지우기
먼저 해당 Xcode 프로젝트에서 아래 명령을 직접 실행했더니, Facebook SDK 기본 프레임워크의 BitCode가 지워지고 업로드에 성공했습니다. [xcode_path]는 Pods 폴더가 들어 있는 Xcode 프로젝트 폴더 경로로 바꿔서 씁니다. -r은 BitCode가 들어 있는 부분(__LLVM 세그먼트)을 통째로 지우는 옵션입니다(man bitcode_strip).
% xcrun bitcode_strip -r [xcode_path]/Pods/FBAEMKit/XCFrameworks/FBAEMKit.xcframework/ios-arm64/FBAEMKit.framework/FBAEMKit -o [xcode_path]/Pods/FBAEMKit/XCFrameworks/FBAEMKit.xcframework/ios-arm64/FBAEMKit.framework/FBAEMKit
% xcrun bitcode_strip -r [xcode_path]/Pods/FBSDKCoreKit/XCFrameworks/FBSDKCoreKit.xcframework/ios-arm64/FBSDKCoreKit.framework/FBSDKCoreKit -o [xcode_path]/Pods/FBSDKCoreKit/XCFrameworks/FBSDKCoreKit.xcframework/ios-arm64/FBSDKCoreKit.framework/FBSDKCoreKit
% xcrun bitcode_strip -r [xcode_path]/Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework/ios-arm64/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics -o [xcode_path]/Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework/ios-arm64/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics
% xcrun bitcode_strip -r [xcode_path]/Pods/FBSDKGamingServicesKit/XCFrameworks/FBSDKGamingServicesKit.xcframework/ios-arm64/FBSDKGamingServicesKit.framework/FBSDKGamingServicesKit -o [xcode_path]/Pods/FBSDKGamingServicesKit/XCFrameworks/FBSDKGamingServicesKit.xcframework/ios-arm64/FBSDKGamingServicesKit.framework/FBSDKGamingServicesKit
% xcrun bitcode_strip -r [xcode_path]/Pods/FBSDKLoginKit/XCFrameworks/FBSDKLoginKit.xcframework/ios-arm64/FBSDKLoginKit.framework/FBSDKLoginKit -o [xcode_path]/Pods/FBSDKLoginKit/XCFrameworks/FBSDKLoginKit.xcframework/ios-arm64/FBSDKLoginKit.framework/FBSDKLoginKit
% xcrun bitcode_strip -r [xcode_path]/Pods/FBSDKShareKit/XCFrameworks/FBSDKShareKit.xcframework/ios-arm64/FBSDKShareKit.framework/FBSDKShareKit -o [xcode_path]/Pods/FBSDKShareKit/XCFrameworks/FBSDKShareKit.xcframework/ios-arm64/FBSDKShareKit.framework/FBSDKShareKitJenkins 빌드 뒤 단계로 자동화하기
이 과정을 자동화하려면 Podfile을 고치는 방법도 있는데, 이 방법은 따로 글로 정리해 두는 게 좋겠습니다. 우리는 Jenkins로 빌드를 자동화하고 있어서(Jenkins에서 Unity 빌드 후 AppStore에 자동 업로드 환경 구축), Xcode 빌드 뒤에 단계를 하나 더해서 실행하면 됩니다.
아래 명령을 그 단계에서 실행하면 BitCode가 들어 있는 Facebook SDK가 잘 처리됩니다. 경로는 Jenkins 작업 폴더 안의 Xcode 프로젝트(build/ios) 기준입니다. 이렇게 해서 Xcode 16.1에서 앱스토어 업로드도 문제없이 됐습니다.
xcrun bitcode_strip -r build/ios/Pods/FBAEMKit/XCFrameworks/FBAEMKit.xcframework/ios-arm64/FBAEMKit.framework/FBAEMKit -o build/ios/Pods/FBAEMKit/XCFrameworks/FBAEMKit.xcframework/ios-arm64/FBAEMKit.framework/FBAEMKit
xcrun bitcode_strip -r build/ios/Pods/FBSDKCoreKit/XCFrameworks/FBSDKCoreKit.xcframework/ios-arm64/FBSDKCoreKit.framework/FBSDKCoreKit -o build/ios/Pods/FBSDKCoreKit/XCFrameworks/FBSDKCoreKit.xcframework/ios-arm64/FBSDKCoreKit.framework/FBSDKCoreKit
xcrun bitcode_strip -r build/ios/Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework/ios-arm64/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics -o build/ios/Pods/FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework/ios-arm64/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics
xcrun bitcode_strip -r build/ios/Pods/FBSDKGamingServicesKit/XCFrameworks/FBSDKGamingServicesKit.xcframework/ios-arm64/FBSDKGamingServicesKit.framework/FBSDKGamingServicesKit -o build/ios/Pods/FBSDKGamingServicesKit/XCFrameworks/FBSDKGamingServicesKit.xcframework/ios-arm64/FBSDKGamingServicesKit.framework/FBSDKGamingServicesKit
xcrun bitcode_strip -r build/ios/Pods/FBSDKLoginKit/XCFrameworks/FBSDKLoginKit.xcframework/ios-arm64/FBSDKLoginKit.framework/FBSDKLoginKit -o build/ios/Pods/FBSDKLoginKit/XCFrameworks/FBSDKLoginKit.xcframework/ios-arm64/FBSDKLoginKit.framework/FBSDKLoginKit
xcrun bitcode_strip -r build/ios/Pods/FBSDKShareKit/XCFrameworks/FBSDKShareKit.xcframework/ios-arm64/FBSDKShareKit.framework/FBSDKShareKit -o build/ios/Pods/FBSDKShareKit/XCFrameworks/FBSDKShareKit.xcframework/ios-arm64/FBSDKShareKit.framework/FBSDKShareKit2026년 10월 기준: Facebook SDK 15.0.0 이상이면 필요 없을 수 있습니다
Meta가 공개한 Facebook iOS SDK 변경 기록을 보면, 2022년 9월 19일에 나온 15.0.0에서 BitCode 지원을 뺐습니다. Apple이 Xcode 14부터 BitCode를 더 이상 쓰지 않기 때문이라고 적혀 있습니다(Facebook iOS SDK CHANGELOG). Unity용 Facebook SDK도 15.0.0부터 iOS SDK 15.0.0을 씁니다(Facebook SDK for Unity CHANGELOG). 2026년 10월 기준 최신 버전은 iOS SDK와 Unity용 SDK 모두 19.0.0입니다.
그래서 Facebook SDK를 15.0.0 이상으로 올리면 BitCode를 지우는 이 단계가 필요 없을 수 있습니다. SDK를 올린 뒤에도 같은 오류가 나면 위의 bitcode_strip 방법을 그대로 쓰면 됩니다.
다음 할 일
- Podfile에 명령을 넣어서 모든 BitCode 바이너리를 자동으로 지우기 (Facebook SDK를 15.0.0 이상으로 올리면 필요 없을 수 있습니다)
자주 묻는 질문
Xcode에서 BitCode를 껐는데도 업로드가 실패하는 이유는 뭔가요?
프로젝트의 BitCode 설정은 우리가 직접 빌드하는 코드에만 적용됩니다. Facebook SDK처럼 미리 빌드되어 들어오는 프레임워크에 BitCode가 남아 있으면 Xcode 16 업로드에서 거절됩니다. 그 프레임워크에서 xcrun bitcode_strip -r로 BitCode를 따로 지워야 합니다.
BitCode는 언제부터 쓰지 않게 됐나요?
Apple은 Xcode 14에서 BitCode를 폐지했고, 그때부터 App Store는 BitCode가 든 제출을 받지 않습니다. Xcode 15에서는 BitCode 지원이 완전히 없어져서 ENABLE_BITCODE 설정도 아무 효과가 없습니다(Xcode 15 릴리스 노트).
Facebook iOS SDK는 몇 버전부터 BitCode가 빠졌나요?
2022년 9월 19일에 나온 15.0.0부터 빠졌습니다(Facebook iOS SDK CHANGELOG). Unity용 Facebook SDK도 15.0.0부터 이 iOS SDK를 씁니다. 그보다 낮은 버전을 쓰고 있다면 SDK를 올리는 것만으로 문제가 풀릴 수 있습니다.
bitcode_strip 명령은 어떻게 쓰나요?
xcrun bitcode_strip -r 입력파일 -o 출력파일 형태로 씁니다. -r은 BitCode가 든 __LLVM 세그먼트를 통째로 지우는 옵션입니다. 이 글처럼 입력과 출력을 같은 경로로 주면 프레임워크 바이너리를 그 자리에서 덮어씁니다.
함께 보면 좋은 글
- Jenkins에서 Unity 빌드 후 AppStore에 자동 업로드 환경 구축 — Unity iOS 빌드를 마친 뒤 App Store Connect까지 자동으로 올리는 Jenkins 환경을 만든 과정입니다.
- Unity Analytic 관련 package를 모두 제거한 후에 앱 실행시 오류 발생하는 문제 — Unity iOS 빌드 뒤 Post Process에서 남은 모듈을 강제로 지워 해결한 비슷한 사례입니다.

답글 남기기