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 내부 처리 규칙은 명확하지 않으나, 향후 변경 가능성 있음