한번도 이 두 파일이 무슨 차이인지 궁금하지 않았는데, Tuist의 메인 기능 중 하나가 이 xcodeproj
파일을 swift로 정의하는 것인데, 정작 이 파일이 정확히 어떤 역할을 하는지 궁금해서 찾아 봤다.
생각해보니 가끔 다른 개발자 분들의 프로젝트를 clone해서 공부할 때 xcodeproj
가 아닌 wcworkspace
를 실행해야 했었는데 알아보자
공식문서1의 정의이다.
An Xcode project is a repository for all the files, resources, and information required to build one or more software products. A project contains all the elements used to build your products and maintains the relationships between those elements. It contains one or more targets, which specify how to build products. A project defines default build settings for all the targets in the project (each target can also specify its own build settings, which override the project build settings).
파일 형태로 보여지지만 사실을 디렉터리이다. 공식 문서에서는 repository
라고 설명한다
xcodeproj
에는 빌드에 필요한 정보들을 포함 하고 있는데 그 정보들은 아래와 같다
1. 소스파일의 참조
보통 처음 앱을 만들기 위해 xCode를 실행했을 때 만들어지는 그것이 project 이다!
xcodeproj
파일을 우클릭하면 패키지 내용을 볼 수 있다여러 파일들이 들어있는데 한번 훑어보자!
pbxproj
파일을 열면 이렇게 생겼다project.pbxproj
는 실제 프로젝트의 설정을 담은 파일이다. 해당 파일을 열어보면 프로젝트 내부에서 생성된 파일들을 파일 유형에 따라 reference를 저장하고 있다2
그리고 이 파일이 그렇게 git에서 충돌이 일어나는 파일이라고 한다! (아직 경험 못해봄)
충돌이 일어나는 경우는 두 명 이상의 팀원이 파일의 순서를 바꾸거나, 동시에 추가하거나 등등의 행위를 했을 경우 충돌날 수 있다고 한다.
예를 들면, A파일, B파일 수정 후 merge -> B파일의 reference, A파일의 reference가 모두 바뀐 경우!
xcuserdata
는 breakpoint, UI layout, 스냅샷 설정을 담은 프로젝트 자체에 크게 영향을 주지 않는 디렉토리라고 한다!xcworkspace
도 디렉터리이다
Workspace
는 여러 개의 Project
를 담아 관리할 수 있도록 해주는 개념이다.
각 파일을 살펴보자면
xcwokspacedata
는 xml 파일로, 워크스페이스가 참조하고 있는 프로젝트를 확인할 수 있다.
workspace의 공유 설정을 담은 디렉터리
workspace의 개인 설정을 담은 디렉터리
근데 이렇게 말로 써놓으니까 지금 당장 무슨 의미가 있는가 싶어서 한번 실습해봤다.
빈 workspace
이다. 빈 project
와는 다르게 아무런 파일을 가지고 있지 않다.
여기서 알 수 있는 것은, workspace는 말그대로 space로 다른 것들을 담을 수 있는 용기라고 생각할 수 있을 것이다.
즉, 이 workspace
에 다른 project
들을 넣어서 관리 할 수 있는 것!
첫번 째로 KakaoLogin API 연습한 프로젝트를 넣어봤다. project
를 넣으니 알아서 Package Dependency도 추가해준다.
두번 째로 UMC 과제로 연습한 프로젝트를 넣어봤다.
마찬가지로 SnapKit을 추가해주고 프로젝트 자체가 들어간다..!
YES! workspace
에서만 프로젝트를 넣을 수 있다고 한다
그렇다면 여러 프로젝트를 사용해야하는 경우(모듈화, CocoaPods의 라이브러리 import 등)는 workspace를 이용해 프로젝트를 관리 해야한다!
CocoaPods를 사용하지 않고, SPM을 사용해 외부라이브러리를 사용하거나, 작은 규모의 프로젝트는 xcodeproj
파일로 관리가 가능하고
CocoaPods를 사용해 외부라이브러리를 사용하거나, 여러 프로젝트들을 의존해서 사용해야하는 경우는 반드시 xcworkspace
로 프로젝트를 관리 해야한다!
그래서 다른 개발자 분들의 project를 clone 했을 때 workspace
로만 열어야하는 이유가 project
파일에는 다른 외부라이브러리에 관한 정보가 없기 때문에 그랬다!
오류나 추가 정보가 있으시면 댓글 남겨주세요!!