xcodeproj & wcworkspace 간단히 쓱~ 훑어보기

Do Gyung Kim (Bryan)·2023년 11월 10일
1

Journey2Tuist

목록 보기
1/2
post-custom-banner

한번도 이 두 파일이 무슨 차이인지 궁금하지 않았는데, Tuist의 메인 기능 중 하나가 이 xcodeproj파일을 swift로 정의하는 것인데, 정작 이 파일이 정확히 어떤 역할을 하는지 궁금해서 찾아 봤다.

생각해보니 가끔 다른 개발자 분들의 프로젝트를 clone해서 공부할 때 xcodeproj가 아닌 wcworkspace를 실행해야 했었는데 알아보자

정의

xcodeproj

공식문서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. 소스파일의 참조

  • .m, .swift 등의 구현 파일과 .h 헤더 파일,
  • 라이브러리와 프레임워크
  • 리소스 및 이미지 파일
  • nib 파일들과
  1. xCode의 파일 탐색기에서 사용하는 소스 파일 관리를 위한 그룹
  2. 프로젝트 레벨 빌드 설정
  3. 타겟
  4. 실행가능한 환경

보통 처음 앱을 만들기 위해 xCode를 실행했을 때 만들어지는 그것이 project 이다!

xcodeproj 파일 내부
  • xcodeproj파일을 우클릭하면 패키지 내용을 볼 수 있다

여러 파일들이 들어있는데 한번 훑어보자!

pbxproj

  • pbxproj 파일을 열면 이렇게 생겼다

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

그리고 이 파일이 그렇게 git에서 충돌이 일어나는 파일이라고 한다! (아직 경험 못해봄)
충돌이 일어나는 경우는 두 명 이상의 팀원이 파일의 순서를 바꾸거나, 동시에 추가하거나 등등의 행위를 했을 경우 충돌날 수 있다고 한다.

예를 들면, A파일, B파일 수정 후 merge -> B파일의 reference, A파일의 reference가 모두 바뀐 경우!

xcuserdata

  • xcuserdata는 breakpoint, UI layout, 스냅샷 설정을 담은 프로젝트 자체에 크게 영향을 주지 않는 디렉토리라고 한다!

xcworkspace

xcworkspace도 디렉터리이다

Workspace는 여러 개의 Project를 담아 관리할 수 있도록 해주는 개념이다.

각 파일을 살펴보자면

xcworkspacedata

xcwokspacedata는 xml 파일로, 워크스페이스가 참조하고 있는 프로젝트를 확인할 수 있다.

  • 자신이 만든 프로젝트와 CocoaPods로 가져온 다른 라이브러리들의 의존성 관리를 할 수 있게 해준다.
xshareddata

workspace의 공유 설정을 담은 디렉터리

xuserdata

workspace의 개인 설정을 담은 디렉터리


실습

근데 이렇게 말로 써놓으니까 지금 당장 무슨 의미가 있는가 싶어서 한번 실습해봤다.

workspace

workspace이다. 빈 project와는 다르게 아무런 파일을 가지고 있지 않다.
여기서 알 수 있는 것은, workspace는 말그대로 space로 다른 것들을 담을 수 있는 용기라고 생각할 수 있을 것이다.
즉, 이 workspace에 다른 project들을 넣어서 관리 할 수 있는 것!

한번 다른 project을 넣어보자!

첫번 째로 KakaoLogin API 연습한 프로젝트를 넣어봤다. project를 넣으니 알아서 Package Dependency도 추가해준다.

두번 째로 UMC 과제로 연습한 프로젝트를 넣어봤다.
마찬가지로 SnapKit을 추가해주고 프로젝트 자체가 들어간다..!

근데 그럼 그냥 project 파일에는 안들어가나?

YES! workspace에서만 프로젝트를 넣을 수 있다고 한다

그렇다면 여러 프로젝트를 사용해야하는 경우(모듈화, CocoaPods의 라이브러리 import 등)는 workspace를 이용해 프로젝트를 관리 해야한다!


정리

CocoaPods를 사용하지 않고, SPM을 사용해 외부라이브러리를 사용하거나, 작은 규모의 프로젝트는 xcodeproj 파일로 관리가 가능하고
CocoaPods를 사용해 외부라이브러리를 사용하거나, 여러 프로젝트들을 의존해서 사용해야하는 경우는 반드시 xcworkspace로 프로젝트를 관리 해야한다!

그래서 다른 개발자 분들의 project를 clone 했을 때 workspace로만 열어야하는 이유가 project파일에는 다른 외부라이브러리에 관한 정보가 없기 때문에 그랬다!

참조

  1. https://developer.apple.com/library/archive/featuredarticles/XcodeConcepts/Concept-Projects.html#//apple_ref/doc/uid/TP40009328-CH5-SW1
  2. https://hcn1519.github.io/articles/2018-06/xcodeconfiguration
  3. https://velog.io/@wansook0316/Xcode-Project-Structure![](https://velog.velcdn.com/images/dogyungkim/post/fd47c6f9-d4a3-43f1-87af-9e5dbbd7b044/image.png)

오류나 추가 정보가 있으시면 댓글 남겨주세요!!

post-custom-banner

0개의 댓글