Xcode 16에서 Facebook SDK가 BitCode가 포함되어서 Appstore 업로드에 실패하는 문제

·

· 최종 수정


공항 검색대에서 파란 상자가 든 여행 가방을 멈춰 세우고 펜치로 낡은 카세트테이프를 꺼내는 장면에 'Xcode 16 BitCode 오류 빌드 후 지우기' 표제를 얹은 삽화

한눈에 보기

  • 문제: 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를 강제로 지워서 해결해야 합니다.

앱 코드는 BitCode를 껐지만 Facebook SDK 프레임워크 6개에는 BitCode가 남아 Xcode 16 업로드에서 거절되고, Xcode 빌드와 업로드 사이에 xcrun bitcode_strip -r 단계를 더해 통과시키는 과정을 보여 주는 흐름도
Xcode 16은 Facebook SDK에 남은 BitCode 때문에 업로드를 막아서, 빌드와 업로드 사이에 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/FBSDKShareKit

Jenkins 빌드 뒤 단계로 자동화하기

이 과정을 자동화하려면 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/FBSDKShareKit

2026년 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 세그먼트를 통째로 지우는 옵션입니다. 이 글처럼 입력과 출력을 같은 경로로 주면 프레임워크 바이너리를 그 자리에서 덮어씁니다.

함께 보면 좋은 글

UNIT5 Dev Blog

Unity·모바일 게임 개발팀 UNIT5가 실제 개발 중 겪은 문제와 해결 과정을 기록합니다. 틀린 내용이나 더 좋은 방법이 있다면 댓글로 알려주세요. 블로그 소개 →

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

최근 글