DerivedData

DerivedData

https://mgrebenets.github.io/mobile%20ci/2015/02/01/xcode-derived-data

1. Derived Data란?

  • 경로: ~/Library/Developer/Xcode/DerivedData

  • 역할: Xcode가 빌드 과정에서 생성하는 중간 결과물, 인덱스, 캐시 파일 등을 저장하는 디렉터리

  • 목적:

    • 빌드 속도를 높이기 위해 이전 빌드 결과를 재사용

    • xcodebuild 실행 시DerivedData folder 에 빌드 파일 생성됨

    • 프로젝트 내 코드 검색 및 탐색 속도 향상

    • 모듈 캐싱을 통해 불필요한 중복 컴파일 방지

    • CI jobs 실행 시 DerivedData 캐시 사용 가능


2. Derived Data 구성 요소

📌 Intermediate Build Results

  • 설명: 기존 빌드 결과물을 저장하여 이후 빌드 시 재사용

📌 Generated Indexes

  • 설명: 프로젝트 내 코드 검색 및 탐색 기능을 위해 생성된 인덱스 파일

📌 Module Caches

  • 설명: Xcode가 미리 컴파일된 모듈 파일(.pcm)을 저장하여 모듈 의존성을 빠르게 해결

📌 Logs

  • 설명: 빌드 및 실행 로그를 저장하여 디버깅에 활용

3. Derived Data 관련 문제점

🚨 캐시된 에러 문제

  • Xcode가 과거 빌드 오류를 포함한 상태로 빌드할 수 있음

  • 해결: Derived Data 삭제 후 클린 빌드 수행

🚨 불필요한 파일 유지

  • 시간이 지나면서 캐시된 파일이 불필요하게 용량을 차지

  • 해결: 일정 주기로 캐시 정리

🚨 패키지 변경 시 충돌

  • Flutter 패키지 또는 플러그인을 업데이트하면 기존 모듈 캐시와 충돌 가능

  • 해결:

    flutter clean
    rm -rf ~/Library/Developer/Xcode/DerivedData

4.CI/CD에서 캐시 최적화

  • Derived Data 재사용:

    • 빌드 속도를 높이기 위해 캐시를 유지하되, 문제가 발생하면 초기화

  • 캐시 삭제 후 클린 빌드:

    xcodebuild clean -workspace Runner.xcworkspace -scheme Runner -configuration Debug

캐싱할 대상

  • CocoaPods이 관리하는 패키지들은 기본적으로 Pods/ 디렉터리에 설치됩니다.

  • Podfile.lock이 변경되지 않았다면, 이전 Pods/ 디렉터리를 그대로 재사용하면 불필요한 패키지 다운로드 시간을 줄일 수 있습니다.

캐싱 대상 디렉터리:

Pods/         # Pod 패키지가 저장된 폴더 (캐싱 필수)
DerivedData/            # Xcode의 빌드 캐시 (빌드 속도 향상)

목표 : Incremental Builds 개선하기 - Incremental builds란 이전에 빌드한 task중에서 변경사항이 없는 task는 새로 빌드하지 않고 사용하여 빌드하는 것 task는 항상 input과 output을 정의하는데 input과 output의 변경사항이 없으면 Gradle은 새로 빌드하지 않는다

https://developer.apple.com/documentation/xcode/improving-the-speed-of-incremental-builds

Last updated