• 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