문제 상황
Apple 로그인 이후 Firebase Auth 연동 시 아래와 같은 런타임 크래시가 발생했습니다.
FirebaseAuth/Auth.swift:168: Fatal error: Unexpectedly found nil while unwrapping an Optional value
문제 접근
1. Firebase configure가 정상적으로 되지 않았을 수 있다.
초기에는 Auth.auth().signIn(with:) 호출 시점에 크래시가 발생했기 때문에, 가장 먼저 Firebase 초기화(FirebaseApp.configure())가 정상적으로 수행되지 않은 것을 의심했습니다.
Firebase Auth는 기본적으로 FirebaseApp.configure()가 선행되어야 동작하므로, 초기에는 다음과 같은 가능성을 우선적으로 확인했습니다.
1. GoogleService-Info.plist가 올바르게 포함되지 않았는지
2. 번들 ID와 Firebase 프로젝트 설정이 일치하지 않는지
3. FirebaseApp.configure()가 실제로 호출되지 않았는지
4. Auth.auth()가 configure() 이전에 먼저 실행되는지
확인 과정
if let app = FirebaseApp.app() {
print("Firebase configured")
print("AppID: \(app.options.googleAppID)")
print("ProjectID: \(app.options.projectID ?? "")")
print("BundleID: \(Bundle.main.bundleIdentifier ?? "")")
}
- AppDelegate에서 FirebaseApp.configure() 직후 로그를 출력하여 초기화 여부를 검증
결과

로그를 통해 아래 항목을 확인했습니다.
- FirebaseApp 생성 성공
- AppID 정상 출력
- ProjectID 정상 출력
- BundleID 일치
즉, Firebase 초기화 자체는 정상적으로 수행되고 있었고, GoogleService-Info.plist 누락이나 configure 미호출 문제는 아니라는 결론에 도달했습니다.
2. Apple Login 구현 로직 문제일 수 있다.
다음으로는 FirebaseAuth가 아닌 Apple 로그인 연동 과정을 의심했습니다.
1. identityToken이 정상적으로 내려오는지
2. rawNonce가 올바르게 생성/전달 되는지
3. OAuthProvider.appleCredential(...) 생성 과정에 문제가 없는지
4. payload 변환 과정에서 nil 값이 들어가는 부분은 없는지
확인 과정
- identityToken 문자열 변환 로그 출력
- rawNonce 생성 및 request.nonce 설정 확인
- FirebaseAuthService 내부에서 FirebaseApp.app() != nil 여부 재확인
결과
- identityToken 정상
- rawNonce 정상
- FirebaseApp.app()도 true로 정상
- payload 변환 정상
즉, Apple Login 결과값이나 ViewModel/Service 계층 로직 자체도 직접적인 원인이 아니었습니다.
3. FirebaseAuth 모듈 링크 문제일 수 있다.
FirebaseApp.configure()는 정상이고, FirebaseApp.app()도 존재하는데, Auth.auth() 진입 시점에만 크래시가 난다는 점에서 단순 설정 문제가 아니라 FirebaseAuth가 런타임에 제대로 로드되지 않았을 가능성을 의심하게 되었습니다.
특히 Tuist + 모듈 구조에서 외부 프레임워크를 사용할 때는 정상적으로 빌드되더라도 Objective-C 기반 심볼/카테고리 로딩 문제로 인해 런타임에서만 드러나는 경우가 있습니다.
이 시점부터는 Firebase 설정 문제가 아니라 링커 설정 쪽 문제로 범위를 좁혀 디버깅했습니다.
확인 과정
- FirebaseAuth 프레임워크 링크 여부 확인
- 링커 설정 확인
결과

- FirebaseAuth 프레임워크는 정상적으로 링크되어 있음.
즉, 단순한 프레임워크 누락 문제는 아닌 것으로 판단했습니다.
해결
Technical Q&A QA1490: Building Objective-C static libraries with categories
Technical Q&A QA1490 Building Objective-C static libraries with categories Q: How do I fix "selector not recognized" runtime exceptions when trying to use category methods from a static library? A: If you're seeing a "selector not recognized" runtime exc
developer.apple.com
Apple 문서에 따르면 Objective-C 카테고리를 포함한 static library는 링커가 자동으로 로드하지 않을 수 있으며, 이 경우 -ObjC 옵션을 통해 해당 심볼을 강제로 로드해야 한다고 나와있습니다.
Firebase iOS SDK는 내부적으로 Objective-C 기반 코드와 카테고리를 포함하고 있기 때문에 - ObjC가 설정되지 않으면 다음과 같은 현상이 발생할 수 있습니다.
컴파일 단계
-> import 가능
링크 단계
-> 실제 바이너리 연결
런타임
-> symbol resolve
- 빌드는 정상적으로 완료됨
- Firebase 초기화도 정상적으로 수행됨
- 특정 API 호출 시점에 런타임 크래시 발생
이번 케이스에서도 동일하게 FirebaseAuth 내부 코드가 런타임에 완전히 로드되지 않아 크래시가 발생한 상황이었습니다.
해결 방법

App 타겟 설정에 아래 옵션을 추가하여 문제를 해결했습니다.
base: [
"OTHER_LDFLAGS": "$(inherited) -ObjC"
]
옵션 추가 이후 Auth.ath().signIn(with:) 호출 시 발생하던 FirebaseAuth 런타임 크래시가 정상적으로 해결되는 것을 확인했습니다.
레퍼런스
https://developer.apple.com/library/archive/qa/qa1490/_index.html
https://beefdev.blogspot.com/2012/02/ios-run-time-error-when-using-class.html
https://firebase.google.com/docs/ios/setup?hl=ko
