- Increasing build Efficiency
- parallelizing your build process
- measuring your build time
- Dealing with complex expressions
- Reducing the work on Rebuilds
- declaring script inputs and outputs
- Understanding dependencies in swift
- Limiting your Objective-C/Swift Interface
- 타겟과 의존성
- 타겟: 빌드하려는 프로덕트를 특정한다.
- 타겟 의존성: 해당 타켓을 빌드하기 위한 또 다른 타켓
- 타겟 의존성을 명시적으로 지정하는 방법
- 라이브러리를 링크하는 방식
- 의존성 그래프
- 타겟과 그 타겟의 연관성
- 이전방식: 의존성 그래프를 분석해서 순차빌드
- 개선 방안: 가능한 부분을 동시에 빌드
- 모든 타겟을 동시에 빌드하면 좋겠지만, 의존성 때문에 안된다.
- 설정
- Scheme -> Build -> Parallized Builds 옵션 활성화
- 이를 제대로 사용하기 위해서는 최대한 각 의존성을 분리해야 한다.
- 큰 하나의 타켓 -> 작게 분리된 여러개의 타겟
- 크지 않은 의존성을 끊기 위한 하나의 중간 타겟
- 사용하지 않는 의존성은 제거하라.
- 바이너리 링크 확인 -> Build Phase에서 확인
- Xcode10에서의 변경점
- 의존성 타겟에서 필요한 만큼만 빌드되면 바로 병렬로 다음 타겟을 빌드한다.
- 빌드 페이즈가 있다면, 이게 끝나기를 기다렸다가 한다.
- Run Script에 있는 파일리스트를 별도의 파일(.xcfilelist)로 관리 가능
- Run Script가 돌아가는 경우
- input이 없는 경우, 매번 돌아감
- input 파일에 변동이 있는 경우, 변동될 때만 돌아감
- output 파일이 누락 된 경우
- xcode의 빌드 시스템에서 의존성 사이클을 찾는 기능 제공
- 빌드 시간 측정
- 개별 시간은 이미 볼 수 있음
- Product -> perform action -.> build with time summary 옵션 활성화
- 디버깅할 때는 WMO를 끄고, Increment로 설정해놓으라.
- 식이 복잡하면, 타입을 명시적으로 작성하라 -> 타입추론에 비용이 많이 든다.
- 복잡한 식은 쪼개라
- AnyObject 같은 것은 최소화하하라 -> 대신 프로토콜 쓰자
- 증분 빌드는 파일 기준이다.
- 인터페이스가 변하면 연관된 파일이 모두 재빌드 되어야 한다.
- 바디 변화는 괜찮다.
- Objc/Swift 사이를 오가는 인터페이스를 최소화하라
- Generate Header 최소화 -> 옵씨에 드러나는 부분을 최소화하라
- Bridge Header를 최소화하라 -> 카테고리를 사용해서 인터페이스를 쪼개자
- Swift최신 버전으로 마이그레이션은 꾸준히 해둘 것
- Swift3 @objc Inference 옵션은 끄자
- Less Content, Fewer Changes, Faster Builds