본문 바로가기
Xcode

.xcodeproj란?

by 고고 2021. 11. 9.

안녕하세요 ◠‿◠ 고고입니다.

 

.xcodeproj vs .xcworkspace

Project를 생성하면 .xcodeproj라는 파일로 보이지만 디렉토리가 생성됩니다.

 

Workspace는 여러 개의 Project를 담아 관리할  있도록 해주는 개념입니다. Workspace는 대부분 CocoaPods을 처음 사용할  접해보았을 것입니다. CocoaPods는 본래의 프로젝트와는 별도로 Project를 만들어서 라이브러리 의존성을 관리할  있도록 해주는 도구입니다.

이런 workspace는 .xcworkspace라는 디렉토리입니다.

 

.xcodeproj

project.pbxproj - 실제 프로젝트의 설정을 담은 파일입니다. 해당 파일을 열어보면 프로젝트 내부에서 생성된 파일들을 파일 유형에 따라 reference를 저장하고 있습니다. 

이 project.pbxproj는 사실 git을 사용할 경우 충돌이 일어나는 주요 파일 중 하나입니다. 2명의 팀원이 작업을 위해 각자 A 파일, B 파일을 생성하여 각자 커밋한 경우 한 쪽에는 B 파일의 reference, 다른 쪽은 A 파일의 reference가 없습니다. 그래서 두 작업에서 사용된 project.pbxproj 파일은 서로 다른 reference를 가지고 있어서 conflict가 일어납니다. 그리고 이 충돌이 고치기 쉽지 않은 것이 project.pbxproj가 깨지면 프로젝트 자체가 열리지 않습니다. 그러므로 이럴 때는 에디터나 소스트리 같은 형상 관리 툴로 해당 충돌을 수정해야 합니다.

 

xcuserdata - breakpoint, scheme, 스냅샷 설정을 담은 프로젝트 자체에 크게 영향을 주지 않는 디렉토리입니다.

 

.xcworkspace

contents.xcworkspacedata - workspace에 포함된 프로젝트들의 reference를 저장한 xml 파일입니다. 그래서 workspace에 프로젝트를 추가하면 해당 파일에 reference가 추가됩니다.

 

xcuserdata -  workspace의 개인 설정을 담은 디렉토리입니다.

 

xcshareddata -  workspace에 공유된 설정을 담은 디렉토리입니다.

 

Workspace vs SubProject

SubProject

Xcode는 여러 개의 프로젝트를 다룰 수 있도록 Workspace를 만드는 기능도 제공하지만, 프로젝트 안에 SubProject를 생성하여 이를 관리할 수도 있습니다. 이와 같은 방식이 활용되는 경우는 오픈소스로 배포되는 라이브러리에서 라이브러리 코드가 담긴 Project와 라이브러리를 사용하여 만든 예제 Project를 나누고 싶은 경우가 있는데, 이 때 SubProject로 예제 Project를 활용할 수 있습니다.

 

물론 이 또한 Workspace를 통해 관리할 수도 있습니다. 다만, SubProject는 Project 사이의 부모-자식 관계가 생기므로 부모 프로젝트가 자식 프로젝트에 대한 reference를 가질 수 있습니다. 반대는 불가능합니다.

 

 

Workspace

반면 Workspace를 통해 Project를 관리하면 Project들간의 관계는 형제 관계가 됩니다. 그래서 어떤 Project든 다른 Project의 reference를 지닐 수 있습니다.

 

 

 

참고 출처 : https://hcn1519.github.io/articles/2018-06/xcodeconfiguration 

댓글