GitHub Actions를 활용한 Swift 프로젝트 CI 가속화는 여러 핵심 전략을 통해 달성될 수 있습니다.
1. 의존성 캐싱
swift-actions/setup-swift액션을 사용하여 Swift 버전을 설정하고, Swift Package Manager(SwiftPM) 의존성을 캐싱합니다.- 캐싱 경로는
~/.swiftpm과~/.build디렉터리를 포함하여, 재빌드 시 불필요한 다운로드 및 컴파일을 방지합니다. restore-keys를 사용하여 이전 캐시 버전으로 폴백하는 전략을 적용하여 캐시 미스 상황을 줄입니다.
2. 의존성 사전 빌드
- 모든 의존성을 한 번 빌드한 후, 이 빌드된 결과물을 아티팩트로 저장하거나 후속 작업에서 재사용합니다.
- 특히 모듈이 많은 대규모 프로젝트에서 각 작업마다 의존성을 다시 빌드하는 오버헤드를 크게 줄일 수 있습니다.
3. Xcode 빌드 설정 최적화
ONLY_ACTIVE_ARCH=NO빌드 설정을 사용하여 CI 환경에서 불필요한 아키텍처 빌드를 건너뛰어 빌드 시간을 단축합니다. 이는 특히 테스트 시 유용합니다.
4. 테스트 병렬화
xcodebuild의destination옵션과test-without-building플래그를 사용하여 여러 시뮬레이터 또는 디바이스에서 테스트를 병렬로 실행합니다.- GitHub Actions의 매트릭스 전략과 조합하여 여러 작업에서 테스트를 분산 실행함으로써 전체 테스트 시간을 줄일 수 있습니다.
5. 기타 최적화 방안
- 자체 호스팅 러너(Self-hosted Runners): 더 강력한 하드웨어를 사용하여 빌드 시간을 단축할 수 있으나, 설정 및 유지보수 비용이 발생합니다.
- 빌드 아티팩트 활용: 빌드된 앱이나 프레임워크를 아티팩트로 저장하여 후속 배포 단계에서 재사용함으로써 빌드 시간을 절약합니다.