SwiftFormat

2025. 6. 10. 22:36·iOS/Setting
반응형

👋 들어가기 전

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

 

반응형

'iOS > Setting' 카테고리의 다른 글

Kakao Login  (1) 2025.07.01
Naver Login  (0) 2025.06.30
Xcode 유용한 단축키 모음  (2) 2025.06.12
.plist 등록 없이 Custom Font 추가  (0) 2025.03.06
SwiftLint  (0) 2025.02.25
'iOS/Setting' 카테고리의 다른 글
  • Naver Login
  • Xcode 유용한 단축키 모음
  • .plist 등록 없이 Custom Font 추가
  • SwiftLint
Hamp
Hamp
남들에게 보여주기 부끄러운 잡다한 글을 적어 나가는 자칭 기술 블로그입니다.
  • Hamp
    Hamp의 분리수거함
    Hamp
  • 전체
    오늘
    어제
    • 분류 전체보기 (325)
      • CS (30)
        • 객체지향 (2)
        • Network (7)
        • OS (6)
        • 자료구조 (1)
        • LiveStreaming (3)
        • 이미지 (1)
        • 잡다한 질문 정리 (0)
        • Hardware (2)
        • 이론 (6)
        • 컴퓨터 그래픽스 (0)
      • Firebase (3)
      • Programing Langauge (41)
        • swift (34)
        • python (6)
        • Kotlin (1)
      • iOS (133)
        • UIKit (37)
        • Combine (1)
        • SwiftUI (33)
        • Framework (7)
        • Swift Concurrency (22)
        • Tuist (6)
        • Setting (11)
        • Modularization (1)
        • Instruments (6)
      • PS (59)
        • 프로그래머스 (24)
        • 백준 (13)
        • LeetCode (19)
        • 알고리즘 (3)
      • Git (18)
        • 명령어 (4)
        • 이론 (2)
        • hooks (1)
        • config (2)
        • action (7)
      • Shell Script (2)
      • Linux (6)
        • 명령어 (5)
      • Spring (20)
        • 어노테이션 (6)
        • 튜토리얼 (13)
      • CI-CD (4)
      • Android (0)
        • Jetpack Compose (0)
      • AI (9)
        • 이론 (9)
        • MCP (0)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    protocol
    property
    CS
    UIKit
    lifecycle
    Swift
    boostcamp
    프로그래머스
    dp
    투포인터
    Tuist
    concurrency
    AVFoundation
    dfs
    Spring
    SwiftUI
    GIT
    IOS
    dispatch
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
Hamp
SwiftFormat
상단으로

티스토리툴바