Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- Clean Code
- tableView
- clean architecture
- collectionview
- 리펙토링
- Human interface guide
- rxswift
- HIG
- map
- 스위프트
- uitableview
- UICollectionView
- scrollview
- 클린 코드
- ios
- 애니메이션
- 리팩토링
- Protocol
- UITextView
- swift documentation
- SWIFT
- combine
- ribs
- Refactoring
- Xcode
- Observable
- MVVM
- swiftUI
- uiscrollview
- RxCocoa
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 전체빌드와 증분빌드 차이점 본문
전체빌드 개념
- 단어 그대로 캐싱 없이, a부터 z까지 모든 파일을 빌드하는 것
- cf) 빌드란?
- 소스 코드들을 실행 가능한 형태로 메모리에 올리는 것

증분빌드 개념
- 증분 빌드(Incremental Build)는 “변화가 영향을 미치는 범위만 찾아서 필요한 파일만 재컴파일”하는 방식
- Xcode는 이를 위해 “의존성 그래프(Dependency Graph)”와 “인터페이스 파일(.swiftinterface / .dia)”을 사용
증분빌드 원리
- 빌드 시스템은 파일마다 해시(hash) 또는 timestamp를 기록해 두고 있다가 사용
FileA.swift → 해시값 0xA2B3
FileB.swift → 해시값 0xC883
- Swift는 모든 .swift 파일 내부의 타입, 프로토콜, extension 등을 분석해 파일 간의 의존성 그래프를 만듦
- User.swift를 변경하면 → ProfileView.swift, SettingsView.swift도 다시 빌드되어야 함
- 하지만 SettingsView 안에서 User를 쓰지 않으면 → 건드릴 필요 없음
User.swift ← ProfileView.swift ← SettingsView.swift
- Swift 컴파일러는 각 파일의 인터페이스 파일을 생성
예) 인터페이스 파일 (인터페이스: Stored property, function signature, protocol 정의)
| MyType.swift | MyType~partial.swiftmodule |
| 외부 모듈 | .swiftinterface |
- 만약? 함수 내부(body)만 바뀌면?
- 인터페이스는 그대로 → 다른 파일은 영향 없음 → 증분 빌드 가능
- stored property, public API 변경되면?
- 인터페이스가 바뀜 → 영향을 받는 모든 파일 재컴파일 → 증분 빌드 불가
전체 빌드로 되는 경우?
- 다음 중 하나라도 일어나면 전체빌드로 됨
- 이런 경우엔 “의존성 그래프” 자체가 다시 계산되기 때문
모듈 public interface 변경
struct stored property 변경
protocol 변경
extension에 public method 추가
Swift version 변경
optimization level 변경
Package / Pod 업데이트
DerivedData 삭제
Build setting 변경
bridging header(ObjC) 변경
- 증분빌드 되었는지 유무는 빌드를 끝내고 결과물이 나오는 xcresult 파일에서 확인 가능
- xcresult 파일 개념: https://ios-development.tistory.com/1827
ex) 증분빌드인지 알아내는 방법
- xcresult 결과를 보면 핵심 파일인 ContentView.swift 파일이 있는데, 이 파일 이컴파일 될때 wasFetchedFromCache가 true인 것을 보면 캐싱되어서 증분빌드 되었다는 것을 추측 가능

'iOS 응용 (swift)' 카테고리의 다른 글
Comments
