Fix Xcode Build Phase File Format Issues

Xcode 빌드 단계에서 파일 형식 문제 해결

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

앱 개발

대상자

iOS 개발자 및 Xcode 빌드 시스템을 사용하는 개발자

난이도: 중급 (Xcode 빌드 시스템 이해 필요)

핵심 요약

  • Xcode 빌드 시스템의 병렬화로 인한 파일 검색 실패 문제 발생

- Modern Build System에서 병렬 처리로 인해 이전 단계에서 생성된 파일을 후속 단계에서 감지하지 못하는 경우 발생

  • 특정 파일 형식(tif, xml)이 문제의 원인

- 논리 폴더 대신 물리 폴더에 파일 저장으로 문제 해결 가능

  • 권장 해결 방법

- Pre Actions 사용 (소형 파일 다운로드)

- 출력 파일 경로 명시 (고정된 파일 수 관리)

섹션별 세부 요약

1. 문제 발생 배경 및 현상

  • Modern Build System 업그레이드 후 발생

- Xcode 10 이전의 Legacy Build System과 달리 병렬 처리로 인해 Race Condition 발생

  • 파일 다운로드 스크립트 실행 시 오류 발생

- Build input file cannot be found 오류 발생, 재빌드 시 임시 해결

  • 외부 파일 다운로드 필요성

- 대규모 이진 파일은 GitHub에 저장하지 않고 Run Script Phase로 다운로드 관리

2. Xcode 병렬 처리 설정 관련

  • Run Build Script Phases in Parallel

- 병렬 처리 여부 설정 (오류 발생 여부와 무관)

  • User Script Sandboxing

- 파일 시스템 I/O가 있는 스크립트는 반드시 비활성화

- 입력/출력 파일 명시 필요 (의존성 그래프 생성)

3. 문제 해결 과정

  • 랜덤 파일 대신 고정된 파일 유형 문제 확인

- Raster 파일(tif, xml)이 문제의 원인

- 논리 폴더 대신 물리 폴더로 이동으로 해결

  • Pull Request 적용 후 문제 해결

- 문제 파일을 물리 폴더에 정리

4. 추가 해결 방법 및 권장 사항

  • Pre Actions 사용 추천

- 소형 파일(예: 암호, API 키)의 경우 빌드 전 다운로드 가능

  • 출력 파일 경로 명시

- 고정된 파일 수 관리 시 효과적 (수동 추가 필요 없음)

  • Xcode의 특정 파일 형식 처리 방식

- tif, xml 등 특정 형식은 병렬 처리 시 예외로 처리 (공식 문서 없음)

결론

  • Modern Build System 사용 시 물리 폴더에 파일 저장 또는 Pre Actions, 출력 파일 경로 명시로 문제 해결
  • Xcode 11~16 버전까지 동일한 동작
  • 특정 파일 형식에 대한 Xcode 내부 처리 규칙은 명확하지 않으나, 향후 변경 가능성 있음