Skip to content

chore: Firebase 의존성을 SPM 미러 저장소로 변경#304

Merged
clxxrlove merged 1 commit into
developfrom
chore/#302/TWI-86
May 18, 2026
Merged

chore: Firebase 의존성을 SPM 미러 저장소로 변경#304
clxxrlove merged 1 commit into
developfrom
chore/#302/TWI-86

Conversation

@clxxrlove
Copy link
Copy Markdown
Member

@clxxrlove clxxrlove commented May 15, 2026

🔗 관련 이슈

📙 작업 내역

빌드 타임 측정 결과

측정 조건

  • Hardware: macOS Darwin 25.2.0, Apple Silicon (arm64)
  • Target: TwixDebug / Debug / iPhone 17 (iOS 26.2) simulator, ONLY_ACTIVE_ARCH=YES
  • Cold 빌드 기준
    • ~/Library/Developer/Xcode/DerivedData/Twix-* 삭제
    • tuist clean 실행
    • SPM checkouts까지 제거 후 측정
  • 두 시나리오 모두 Tuist binary cache 비활성화 상태
    • 기존 #300 commit과 동일 조건

Cold 빌드 사이클

clone 직후 시나리오

단계 Source SPM akaffenberger 미러 차이
tuist install 30.34s 20.58s -9.76s (-32%)
tuist generate 9.49s 8.61s -0.88s (-9%)
xcodebuild build 123.95s 107.68s -16.27s (-13%)
합계 163.78s 136.87s -26.91s (-16%)

SPM 미러 vs 원본 Firebase SDK

핵심

  • 동작/API는 동일

    • 둘 다 import FirebaseAnalytics 등 기존 코드 그대로 사용 가능
    • 미러도 Firebase 공식 release xcframework를 사용
  • 차이는 배포 방식

    • 원본: Firebase 및 의존성을 소스에서 직접 컴파일
    • 미러: 이미 빌드된 prebuilt xcframework를 다운로드 후 추출

차이점

항목 원본 Firebase SDK 미러
형태 소스 패키지 Binary package
빌드 로컬 컴파일 필요 컴파일 없음
의존성 GoogleUtilities 등 여러 SPM 의존성 외부 SPM 의존성 거의 없음
Tuist 그래프 노드 많음 평탄함
속도 느림 빠름
신뢰성 Google 공식 비공식 미러 + checksum 검증
릴리즈 반영 즉시 약간 지연 가능

@linear
Copy link
Copy Markdown

linear Bot commented May 15, 2026

TWI-86

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 15, 2026

Review Change Stack

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 7c94a4de-6c92-4be6-8ebb-3218f08de62c

📥 Commits

Reviewing files that changed from the base of the PR and between 0a44c1a and dda27aa.

📒 Files selected for processing (6)
  • Projects/App/Project.swift
  • Projects/Domain/Auth/Project.swift
  • Tuist/Package.resolved
  • Tuist/Package.swift
  • Tuist/ProjectDescriptionHelpers/Scripts/CrashlyticsScript.swift
  • Tuist/ProjectDescriptionHelpers/Target/Dependency/TargetDependency+External.swift

📝 Walkthrough

의존성 구조 최적화: Firebase SPM 미러로 전환

개요

Firebase 의존성을 Google 공식 저장소에서 prebuilt xcframework 미러(akaffenberger/firebase-ios-sdk-xcframeworks)로 전환하여 빌드 성능을 개선했습니다. 이는 #302 이슈 해결 PR입니다.

주요 변경사항

의존성 구성

  • Firebase SPM: 소스 기반 (firebase/firebase-ios-sdk) → prebuilt xcframework 미러 기반
  • FirebaseCore: 제거 (미러에서 다른 Firebase product의 transitive 의존성으로 포함)
  • GoogleSignInSwift: 제거 (GoogleSignIn만 유지)
  • 외부 SPM 의존성 감소: leveldb, nanopb, promises 등 제거

아키텍처 및 기능 영향

TCA 관점

  • Reducer, State, Action 변경 없음
  • Side effect 처리 및 async 로직 변경 없음
  • 기능 동작 변경 없음 (API 호환성 유지)

런타임 동작

  • AppDelegate의 FirebaseApp.configure() 호출 동작 동일
  • Domain/Auth의 Google 로그인 (GoogleLoginProviderGoogleSignIn import) 동작 동일
  • Crashlytics 통합 경로만 업데이트 (스크립트 수정)

빌드 성능 개선

  • Cold 빌드: 163.78s → 136.87s (-16%)
  • Incremental 빌드: 개선 (컴파일 단계 제거로 인한 최적화)

파일 변경 요약

  • Tuist/Package.swift: 의존성 선언 변경
  • Tuist/Package.resolved: 의존성 해석 결과 업데이트
  • Tuist/ProjectDescriptionHelpers/Target/Dependency/TargetDependency+External.swift: FirebaseCore, GoogleSignInSwift enum case 제거
  • Projects/Domain/Auth/Project.swift: GoogleSignInSwift 의존성 제거
  • Projects/App/Project.swift: FirebaseCore 의존성 제거
  • Tuist/ProjectDescriptionHelpers/Scripts/CrashlyticsScript.swift: 스크립트 경로 업데이트

사용자 가시성: 없음 (빌드 최적화 전용)

Walkthrough

이 PR은 Firebase 의존성을 source-based SPM에서 xcframework 바이너리 미러로 마이그레이션합니다. 패키지 설정 변경, 의존성 해석 업데이트, 빌드 스크립트 조정, 프로젝트 구성 정리를 통해 빌드 성능과 CI/CD 효율성을 개선합니다.

Changes

Firebase 바이너리 의존성 마이그레이션

Layer / File(s) Summary
SPM 패키지 설정 및 의존성 교체
Tuist/Package.swift, Tuist/Package.resolved
GoogleSignIn-iOS와 firebase-ios-sdk 직접 의존을 제거하고 akaffenberger/firebase-ios-sdk-xcframeworks(12.13.0)로 단일화. productTypes에서 GoogleSignIn/GoogleSignInSwift 설정 제거. 패키지 해시 및 Firebase 핀 업데이트(app-check, appauth-ios, leveldb, nanopb, promises 핀 제거).
의존성 추상화 계층 정리
Tuist/ProjectDescriptionHelpers/Target/Dependency/TargetDependency+External.swift
TargetDependency.External 열거형에서 FirebaseCore와 GoogleSignInSwift 케이스 제거. FirebaseCore는 다른 Firebase 제품의 transitive 의존성으로 포함되므로 별도 선언 불필요함을 문서화.
Crashlytics 빌드 스크립트 경로 업데이트
Tuist/ProjectDescriptionHelpers/Scripts/CrashlyticsScript.swift
dSYM 업로드 심볼 경로를 firebase-ios-sdk 구조에서 firebase-ios-sdk-xcframeworks/Sources/FirebaseCrashlytics로 변경. 파일 탐색 로직을 새 SDK 디렉토리 레이아웃에 맞게 조정.
프로젝트별 의존성 구성 정리
Projects/Domain/Auth/Project.swift
인증 도메인 타깃 의존성에서 GoogleSignInSwift 제거. GoogleSignIn만 유지.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • Keepiluv/Keepiluv-iOS#287: Crashlytics 업로더 스크립트가 firebase-ios-sdk에서 firebase-ios-sdk-xcframeworks 구조로 마이그레이션되므로 동일 영역의 이전 작업과 관련.

Suggested reviewers

  • jihun32
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/#302/TWI-86

Comment @coderabbitai help to get the list of available commands and usage tips.

@clxxrlove
Copy link
Copy Markdown
Member Author

@coderabbitai summary

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 15, 2026

✅ Actions performed

Summary regeneration triggered.

@clxxrlove clxxrlove changed the title chore: Firebase 의존성을 SPM 미러 저장소로 변경 - #302 chore: Firebase 의존성을 SPM 미러 저장소로 변경 May 15, 2026
@clxxrlove
Copy link
Copy Markdown
Member Author

CI도 굉장히 빨라졌네 만족스럽구만

@github-actions github-actions Bot added D-2 and removed D-3 labels May 16, 2026
Copy link
Copy Markdown
Contributor

@jihun32 jihun32 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오오 대박 새로 배웠다 고생해써~

@github-actions github-actions Bot added D-1 and removed D-2 labels May 17, 2026
@clxxrlove clxxrlove merged commit de7ec71 into develop May 18, 2026
9 checks passed
@clxxrlove clxxrlove deleted the chore/#302/TWI-86 branch May 18, 2026 03:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants