2025. 1. 24. 14:04ㆍDeveloper Basis/Xcode
Xcode 16부터 소소하게 바뀐 점이 하나 있어 글로 공유하고자 합니다.
원래는 (내 기억이 맞다면) Storyboard 타입의 프로젝트를 생성하면 하단 왼쪽 회색 모양으로 파일이 구성되었고,
SwiftUI 타입의 프로젝트를 생성하면 하단 오른쪽 하늘색 모양으로 파일이 구성되었던 것으로 기억하는데,
이번 Xcode 16 업데이트 이후부터는 프로젝트 타입과 상관없이 모두 오른쪽 하늘색 모양의 파일이 생성되도록 업데이트가 이루어졌습니다.
*Command + Option + N 단축키를 사용해서 디렉토리를 만들 때도 동일하네요.
📁 Xcode에서 회색 모양의 디렉토리는 Group, 하늘색 모양의 디렉토리는 Folder라고 부릅니다.
즉, Xcode 16부터는 모든 디렉토리의 기본 생성 값을 Folder로 만들게 업데이트가 된 것인데요.
그렇다면 Apple은 왜 Group 대신 / Folder가 생성되도록 default를 설정한 것인지.
Group과 Folder는 어떤 차이점이 있는지.
그리고 업데이트가 이루어진 Xcode 16에서 기존처럼 Group을 사용할 수 있는 방법은 없는지. 등의 내용을 담아 이번 글을 준비했습니다.
파일 순서를 수정하고 싶어! (Folder -> Group 전환하기)
Xcode 16부터 Folder가 디렉토리 관리의 기본 방식이 되며 불편해진 점이 있다면,
디렉토리 내의 알파벳 순으로 배치되어 있는 파일 순서를 임의로 (드래그 앤 드롭을 사용해) 수정할 수 없게 되었다는 점입니다.
이를 해결하는 방법은 매우 간단합니다.
바로, 기존 하늘색 Folder 구조를 회색의 Group 구조로 바꿔주면 해결할 수 있죠!
Group으로 바꾸고자 하는 Folder를 우클릭한 후, [Convert to Group]을 클릭해주면 한 번에 해당 디렉토리가 바뀝니다.
Folder 방식에서는 불가능했던 파일 위치의 수정을
Group 방식에서는 기존처럼 자유롭게 수정할 수 있는 것을 확인할 수 있습니다.
Group? Folder?
Group과 Folder는 여러 개 파일들의 묶음 (collection) 역할을 한다는 점에서 동일하지만, 명백한 차이를 갖고 있어 보입니다.
자 그럼 Group과 Folder가 어떻게 다르길래.
Group은 파일의 위치를 자유롭게 수정할 수 있고 / Folder는 파일의 위치를 임의로 알파벳 순 정렬, 수정 조차 할 수 없는 형태를 갖는 것일까요?
일단 공식문서의 말을 먼저 살펴보겠습니다.
📁 Group
- 그룹은 프로젝트 내 리소스의 묶음입니다. (A group is a collection of resources in your project.)
- 기본적으로는 프로젝트 디렉토리의 폴더와 그룹을 매핑하지만 / 파일 시스템의 폴더가 없어도 그룹을 만들 수 있습니다. (By default, Xcode maps each group to a folder in your project directory, but you can also create groups without an underlying file-system folder.)
- 디스크 상 파일 구조를 변경하지 않고, 프로젝트 파일을 관리하고 싶을 때 그룹을 사용할 수 있습니다. (use groups without folders if you want to manage files in your project without changing the underlying organization of the files on disk.)
🗳️ Folder
- 폴더는 프로젝트에서 참조하는 파일 시스템 디렉토리입니다. (A folder is a file-system directory that you reference from your project.)
- Xcode는 폴더에 대한 내용을 프로젝트에 포함합니다. (Xcode includes the contents of the folder in your project.)
위에서 말하는 파일 시스템 디렉토리 (File-system directory)란 "컴퓨터 저장장치 (디스크)에 실제로 존재하는 폴더"를 의미해요!
쉽게 말하면 Finder에서 볼 수 있는 폴더를 말하는 것이죠.
즉 쉽게 정리하면, 컴퓨터 디스크 상 구조를 반드시 따르는 것은 Folder / 따를 수도 있지만, 따르지 않을 수도 있는 것은 Group인 것입니다!
이러한 Folder와 Group의 원리에 따라,
Group 안에 Folder가 위치하는 것은 가능하지만 / Folder 안에 Group이 위치하는 것은 불가능한 원칙이 있기도 한 것이죠. (Group이 더 넓은 개념에 해당하는 느낌이 들죠?)
그렇기 때문에 Group으로 File의 Collection을 관리하는 경우,
컴퓨터 저장장치의 파일 순서와는 무관하게 위치를 관리할 수 있었고 - 그에 따라 드래그 앤 드랍으로 임의의 파일 위치를 변경하는 것도 가능했던 것이죠!
이해가 조금 되시나요?
그래서 조금 더 자세하게 공식문서 상에는 Group과 Folder의 사용상황을 아래와 같이 표현하고도 있습니다.
- Group은 Xcode의 그룹 구조를 디스크 상의 구조와 다르게 구성하고 싶거나, 프로젝트 외부의 파일을 참조하고 싶을 때 사용하는 것이 적합합니다. (When you want the group structure in Xcode to differ from the directory structure on disk, or you want to reference files outside your project.)
- Folder는 Xcode의 폴더 구조를 디스크 상의 구조와 동일하게 유지하고 싶거나, 파일 추가/제거 시 프로젝트 파일에 대한 변경을 최소화하고 싶을 때 적합합니다. (Choose this option when you want your Project navigator folders to match the file and directory structure on disk, and to minimize changes to your project file when you add or remove files.)
하지만, 저는 이렇게 말로만 설명을 들었을 때 변화가 와닿지 않았기에..
직접 기존 Group 구조를 Folder로 전환 (Convert)했을 때, 프로젝트 파일에 어떠한 영향이 미치는지 직접 확인해 보기로 했습니다.
이론대로라면, Group은 파일 시스템 디렉토리와는 무관하게 별도로 관리하는 어떤 특정 공간이 있어야 할 것이구요 / Folder는 파일 시스템 디렉토리와 1:1 매칭이 바로 돼야 할 것입니다.
기존 Group으로 관리하던 Collection을 [Convert to Folder] 작업을 수행했을 때의 결과입니다!
실제로 Xcode 프로젝트 파일 (project.pbxproj)에서 유의미한 변화를 확인할 수 있었습니다.
실제로 빨간색 삭제된 부분을 확인하면,
path와 sourceTree 부분을 통해 물리적 디스크와 독립적으로 Xcode 내부의 별도 공간에서 파일을 관리하고 있었던 것이 보이고 + 별도의 Xcode 그룹 내 위치를 기반으로 파일을 참조하고 있었던 것도 보입니다. (불필요한 중복 파일이 별도로 위치했던 것이죠!)
하지만, 초록색 추가된 부분에서는 다른 부분 없이
fileSystemSynchronizedGroups 부분을 통해 해당 폴더와 파일 시스템과 동기화 = 즉, 실제 물리적 파일 시스템의 경로를 참조하는 식으로 설정된 것을 확인할 수 있네요.
이런 상황을 Apple은 아래와 같이 표현하고 있습니다.
💡 Buildable Folders only record the folder path into the project file without enumerating the contained files.
= 빌드 가능한 폴더는 포함된 파일들의 열거없이, 폴더 경로만 프로젝트 파일에 기록합니다.
Apple은 왜 Group 대신 Folder를 선택한 것일까
Apple이 Xcode 16부터 Group 대신 Folder를 default로 채택한 이유는
결국 위에서 보인 것처럼 기존 Group 방식에서 필요했던 프로젝트 파일(.pbxproj)에서 불필요하게 차지하고 있던 공간을 줄일 수 있다는 명확한 장점이 있기 때문입니다.
뿐만 아니라, 협업을 하는 상황에서 새로운 파일을 프로젝트에 추가하거나 제거해야할 때,
프로젝트 파일에 생기는 변동 사항이 획기적으로 줄어들기 때문에 - 이어서 발생할 수 있는 파일 충돌 (conflict) 문제 역시 획기적으로 줄일 수 있다는 장점 또한 생기겠군요.
Folder 구조는 모든 프로젝트를 협업하는 사람들의 파일 시스템 구조와 그것을 참조하는 프로젝트 구조가 동일할 수밖에 없으니까요.
💡 minimizes diffs to the project when files are added and removed, and avoids source control conflicts with your team.
= 이것은 파일이 새롭게 추가되거나, 제거될 때 프로젝트에 대한 차이점을 최소화하고 팀 내에서의 소스 충돌을 방지할 수 있습니다.
결국 한 줄로 정리하면, "Folder를 사용했을 때 프로젝트 파일의 유지 관리가 더 편해진다"는 점 때문이라고 말할 수 있을 것 같습니다!
*물론, 저는 아직 Group을 사용했을 때 Collection을 상황에 맞춰 변경해서 사용하는 것이 가독성 측면에서 더 좋은 것 같긴 하지만요...
Reference
'Developer Basis > Xcode' 카테고리의 다른 글
[Xcode] Xcode에서 Python 알고리즘 환경 구축하는 방법 (feat. Xcode 15.4 버전) (2) | 2024.09.06 |
---|---|
[Xcode] Xcode 커스텀하는 두 가지 방법 (Code Theme, App Icon) (0) | 2023.12.03 |
[Xcode] iOS 프로젝트에 별도의 폰트 파일을 추가해서 사용하고 싶을 때 (0) | 2022.01.02 |
[Xcode] Xcode에서 quick help를 사용해보자 (0) | 2021.12.20 |
[Xcode] 코드에서 이미지와 색상을 보는 방법, ImageLiteral, ColorLiteral (0) | 2021.11.16 |