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