iOS/Setting

SwiftFormat

Hamp 2025. 6. 10. 22:36
반응형

👋 들어가기 전

SwiftFormat.. 통일된 컨벤션을 위해 많이썼던 tool이다.

 

생각보다 프로젝트 초기에 이놈 세팅한다고 시간을 많이 버렸던 기억들이 많다..

 

이번 포스팅에서 SwiftFormat을 세팅하는 과정을 정리해보자.

🏁 학습할 내용

지금까지 써본 방법과 건너 건너 배운 방법은 아래 2가지 정도가 가장 깔끔했던 것 같다.

  • brew + .swiftFormat  + script
  • swiftFormat-for-Xcode

1️⃣ brew + .swiftFormat + script

첫번 째 방법은 가장 익숙하게 써온 방법이다.

🚀 설치

먼저 brew를 통해 swiftFormat을 설치해준다.

brew install swiftformat

📜 룰 작성

.swiftformat 파일로 작성한다.

더 많은 룰은 https://github.com/nicklockwood/SwiftFormat/blob/main/Rules.md 공식 페이지를 참고

// .swiftformat

# format options
--swiftversion 6.0
--indent 4

# file options
--exclude /Tuist

# rules
--disable trailingCommas
--enable blockComments
--enable markTypes
--enable noExplicitOwnership
--enable sortSwitchCases
--enable wrapEnumCases

⚙️ 스크립트

스크립트 실행 트리거가 퍼포먼스에 영향을 많이주는데

컨벤션이 많이 중요하면 Xcode의 Build Script쪽에 넣어 매 build마다 실행시켜도 되긴하는데

 

나에게 swiftFormat을 알려준 분깨서는 githooks의 pre-push쪽에 넣으셨고

이유를 들어보니 pre-push가 나쁘지 않았던 것 같아다.

 

swiftFormat은 rule에 맞게 코드를 건드리는데, 매 build마다 하게되면, swiftFormat으로 인한 코드 수정이

너무 많이 일어나는 부작용이 있다.

 

pre-push 내용은 https://hamp.tistory.com/127 글을 보자.

#!/bin/sh

# 명령어 경로 저장
FORMAT=$(which swiftformat)

# 설치 확인
if [[ -e "${FORMAT}" ]]; then
    echo "🚀  SwiftFormat 시작..."
    echo "🔍  SwiftFormat 적용 경로: ./Projects"
else
    echo "SwiftFormat이 존재하지 않습니다. 설치해주세요 ! 'brew install swiftformat'"
    exit 1
fi

# 포맷팅 결과 ,
RESULT=$($FORMAT ./Projects --config .swiftformat) 

if [ "$RESULT" == '' ]; then
    git add .
    git commit -m "style swiftformat 적용"
    printf "\n 🎉 SwiftFormat 적용을 완료했습니다 !! \n"
else
    echo ""
    printf "❌ SwiftFormat Failed 아래 내용을 확인해주세요 \n"
    while read -r line; do
        FILEPATH=$(echo $line | cut -d : -f 1)
        L=$(echo $line | cut -d : -f 2)
      	C=$(echo $line | cut -d : -f 3)
    	TYPE=$(echo $line | cut -d : -f 4 | cut -c 2-)
    	MESSAGE=$(echo $line | cut -d : -f 5 | cut -c 2-)
    	DESCRIPTION=$(echo $line | cut -d : -f 6 | cut -c 2-)
    	if [ $TYPE == 'warning' ]; then #
      	    printf "\n 🚧  $TYPE\n"
            printf "    $FILEPATH:$L:$C\n"
      	    printf "    📌  $MESSAGE: - $DESCRIPTION\n"
      	    exit 0 # 정상 종료
    	elif [ $TYPE == 'error' ]; then
      	    printf "\n 🚨  $TYPE\n"
    	fi
        printf "    ✅ $FILEPATH:$L:$C\n"
	printf "    📌 $MESSAGE: - $DESCRIPTION\n"
    done <<< "$RESULT" # RESULT를 1줄씩 line 변수에 삽입

    printf "\n 🚑 커밋실패!! SwiftFormat 실행이 실패하였습니다 🥺 \n"
    exit 1 # 비정상 종료
fi

 

💡 문자열 cut -d [구분자] -f [필드번호]
- 문자열을 구분자를 기준으로 자른 후, 해당 필드번호에 해당되는 부분을 추출
- 여기서 필드 번호는 1번부터 시작
echo "abc:def:hi" | cut -d : -f 1
// OUTPUT: abc
💡 문자열cut -c [시작 위치]-[끝 위치]
- 문자열을 시작위치부터 끝 위치까지 추출
- 끝 위치를 생략하면 문자열 끝까지 추출 
echo "abc:def:hi" | cut -d : -f 1 | cut -c 1-2
// OUTPUT: ab

2️⃣ swiftFormat-for-Xcode

이번에 경험해볼 방법은 바로 Xcode 확장프로그램으로 설치해보는 방법이다.

🚀 설치

brew install --cask swiftformat-for-xcode # 설치
brew upgrade --cask swiftformat-for-xcode # 업데이트

📜 룰 작성

rule 작성은 확장 프로그램 내에 작성하면된다.

  1. command+space로 검색창을 연다.
  2. swiftFormat for Xcode를 검색
  3. rules 탭에 들어가 원하는 룰을 체크해준다.

🔌 Xcode에 연결

이제 확장 프로그램을 Xcode에 연결하면 마무리가 된다.

 

system setting -> Login Items & Extensions -> Xcode Source Editor -> SwiftFormat 체크 

⌨️ 단축키 등록

어느 시점에 format을 진행할지 단축키를 등록해보자.

 

system setting -> keyboard shortcuts -> app shortcuts -> + 버튼을 눌러 다음과 같이 입력해준다.

 

Editor->SwiftFormat->Format File

 

내용은 오른쪽 사진 부분을 참고하면 이해하기 편하다.

 

여기서 SwiftFormat은 3가지 옵션을 제공한다.

 

1. Format Selection

  • 선택된 코드(드래그 등으로)에 대해서만 포맷팅 진행

2. Format File 🤩(얘를 기본으로 쓸꺼임 cmd + S)

  • 현재 파일 전체를 포맷팅 

3. Lint File

  • 현재 파일의 린트(warning)만 진행하고, 포맷팅은 진행하지 않는다.

🧪 테스트

한번 테스트 해보자.

 

나는 swiftFormat 기능 중 많이 쓰는 것이 바로 

import를 내림찬순으로 바꿔주는 내용이다.

음 잘 바뀌는군..

🛜 공유

나 혼자하는 프로젝트면 바로 당장 써도 문제가 없지만, 다른 팀원과 같은 포맷으로 프로젝트를 진행하고 싶으면

 

위에서 작성한 .swiftformat파일을 공유한 후, 다음과 같이 열어서 저장하면 됨.

 


😀 소감 및 마무리

이제는 SwifrFormat 세팅으로 고통받지 말자..


출처

https://velog.io/@3436rngus/Xcode-Format-On-Save-%EC%84%A4%EC%A0%95

 

[Xcode] swiftformat-for-xcode 설치 / 설정 / 삭제

Xcode Swift formatter with SwiftFormat

velog.io

 

반응형