이번에는 프로젝트에 스크립트를 설정하는 방법에 대해 포스팅하겠습니다.

대표적으로 스크립트를 설정하는 라이브러리로 Firebase, SwiftLint가 있습니다.

XcodeProj Build Phase 설정하기

원하는 프로젝트 타겟에 - Build Phases 으로 접근해줍니다.

좌측에 있는 + 버튼을 클릭해 New Run Script Phase를 선택해줍니다.

추가하면 Build Phases에 Run Script 라는게 추가됩니다.

Run Script 살펴보기

For install builds only

이건 저도 정확하지는 않지만.. 제가 직접 해본결과 체크됐을때는 제목 그대로 Build Action을 취했을때만 스크립트가 실행됐습니다. Run Action을 취한경우에는 실행되지 않았습니다. 해제됐을때는 두 경우 모두 실행됐습니다! 잘못 알고있는게 있다면 댓글로 정정 부탁드립니다!

Based on dependency analysis

스크립트가 모든 빌드에서 실행될 필요가 없는 경우 해당 옵션을 체크하면 Xcode는 스크립트의 종속성을 분석합니다. 즉, 스크립트의 입력이 마지막 실행 이후 변경되었는지 그리고 스크립트의 출력이 존재하는지 확인해 스크립트를 실행시킵니다. 증분빌드시에 변경사항이 없다면 스크립트 실행을 스킵합니다.

Input Files / Input File lists / Output Files / Output File Lists

스크립트 실행 빌드 단계는 스크립트에 대한 입력 및 출력 파일을 입력할 수 있는 장소를 제공합니다. 입력 및 출력 파일을 사용하여 스크립트의 동작을 사용자 지정하고 빌드 시스템이 스크립트를 실행할 시기를 이해하도록 돕습니다. 입력 파일에는 스크립트가 처리할 데이터가 포함되어 있습니다. 예를 들어 하나 이상의 이미지 파일을 스크립트에 전달할 수 있습니다. 출력 파일에는 스크립트에서 생성된 모든 데이터가 포함됩니다.

여기서 Files 와 File Lists가 존재하는데 둘이 뭐가 다른거냐 하면 Files는 파일의 경로를 직접 추가하는 방식입니다. 예를 들어 Input File이 A.file B.file 이 존재한다면 Files에 경로를 하나하나 추가해줘야합니다.

$(SRCROOT)/Files/A.file
$(SRCROOT)/Files/B.file

File Lists를 사용한다면  xcfilelist라는 파일에 A.file B.file의 경로를 적어주고 해당 xcfilelist를 추가해주면 됩니다.

file.xcfilelist
$(SRCROOT)/Files/A.file
$(SRCROOT)/Files/B.file

Input File Lists
$(SRCROOT)/FILE LISTS/file.xcfilelist

스크립트 추가하기

스크립트를 실행하고자 하는 쉘을 입력후 원하는 스크립트가 실행되도록 본문에 작성해주시면 됩니다

python script.py 이런식으로 파이썬 스크립트를 실행해도 되고, shell script가 실행되도록 script.sh로 실행하셔도 됩니다.

Tuist로 적용하기

TargetScript 작성하기

ProjectDescriptionHelpers 폴더안에 Script라는 파일을 생성 후 Extension으로 원하는 TargetScript를 생성해줍니다.

TargetScript를 생성하는 방식으로는 pre 와 post가 존재하는데 빌드 이전에 실행되느냐 이후에 실행되느냐 차이입니다. 제 스크립트는 빌드 이전에 실행돼야 하므로 pre로 만들어줍니다. FirebaseCrasyltics처럼 빌드 이후에 실행되어야 한다면 post로 만들어주세요

아까 살펴보았던 옵션들을 전부 설정이 가능합니다

Target에 스크립트 주입하기

Project를 생성할때 Target을 주입하는데 이때 Target의 생성자 중 scripts가 있습니다. 해당 부분에 만든 TargetScript를 주입하면 됩니다.

복사했습니다!