간단하게 프로젝트 내부를 탐험해보았다면, 각각의 제대로된 정의를 알아야 한다. 앞의 글에서 이어지니, 이해가 안되면 보고 오는 것이 좋다.
An Xcode project is a repository for all the files, resources, and information required to build one or more software products
Project는 Application을 빌드하기 위한 파일, 리소스, 정보를 담은 Repository이다.
처음 Single View application 생성하면, 프로젝트 파일이 생성된다. PROJECT_NAME.xcodeproj
파일이 바로 이것. 그런데 알아보았지만, 이녀석의 정체는 디렉토리였다.
위와 같이 세개의 항목으로 구성되어 있었다.
Workspace는 CocoaPods를 통해 접해봤을 것이다. 하지만 실제로 PROJECT_NAME.scodeproj
파일 안에도 해당 디렉토리가 있었다. cocoaPods로 pod install
을 하는 행위가, workspace를 하나 만들어주는 행위라는 사실을 이해할 수 있었다. 해당 디렉토리 안에는 다음과 같은 것들이 있었다.
Xcode는 Workspace를 통해 여러개의 프로젝트를 다룰 수 있는 기능을 제공한다는 것을 알 수 있었다. 그런데 이 방법 말고, 프로젝트 내부에 Subproject를 생성하여 이를 관리할 수도 있다.
예를 들어, 오픈 소스로 배포되는 라이브러리에서, 라이브러리의 코드가 담긴 Project와, 라이브러리를 사용하여 만든 예제 Project를 나누고 싶을 수 있는데, 이 때 Subproject로 예제 Project를 만들어 사용할 수 있다.
이 경우 Workspace로 가능하기는 하다. 하지만 차이점을 알고가는 것이 중요하다. Subproject는 이름에서도 알 수 있듯 Sub
이기 때문에, 상위 Project와 부모-자식 관계가 형성된다. 부모는 자식 프로젝트에 대해 Reference를 가질 수 있지만, 자식은 부모에 접근이 불가하다.
반대로 Workspace의 경우, Project간 형제 관계가 형성된다. 그래서 어떤 프로젝트건 서로간의 Reference를 지닐 수 있다.