XCode Concepts (1)

(Workspace / Project / Target / Scheme / Build Settings)

Hoontopia
hoontopia
5 min readFeb 11, 2019

--

1. Workspace

Workspace 는 Project 들과 관련 문서들을 그룹화하여 작업 할 수있는 Xcode 문서이다. Workspace 에는 여러 개의 Xcode Project 와 파일 들이 포함될 수 있으며, 포함된 Project 와 Target 들 사이에 암시적 / 명시적 관계를 제공한다.

2. Project

Project 는 하나 이상의 소프트웨어 제품을 만드는 데 필요한 모든 파일, 자원 및 정보의 저장소이다. 제품을 만드는 데 사용 된 모든 요소를 포함하며, 해당 요소 간의 관계를 유지한다. 또한 제품을 어떻게 빌드할지 명시하는 하나 이상의 Target 을 포함하며, Project 내의 모든 Target 에 대한 디폴트 빌드 설정을 정의한다. (각 Target 은 Project 의 빌드 설정을 재정의하여 각각의 빌드 설정을 지정 할 수도 있다)

Project 파일은 다음과 같은 정보를 포함한다.

  1. 소스 파일에 대한 참조:
  • 헤더 파일과 구현 파일을 포함한 소스코드
  • 내/외부 라이브러리와 프레임워크
  • 리소스 파일
  • 이미지 파일
  • 인터페이스 빌더(nib) 파일

2. 구조 탐색기 내 소스 파일을 구성하는 데 사용되는 그룹

3. Project-level 빌드 설정. 하나 이상의 빌드 설정을 할 수 있다.

예) debug 또는 release 빌드 설정

4. Targets. 각각의 Target 은 다음을 명시한다:

  • Project 가 구축 한 하나의 제품에 대한 참조
  • 해당 제품을 빌드하는 데 필요한 소스 파일에 대한 참조
  • 다른 Target 및 기타 설정에 대한 종속성을 포함, 해당 제품을 빌드하는 데 사용할 수있는 빌드 설정
  • Target 의 빌드 설정이 Project-level 의 빌드 설정을 재정의 하지 않았을 때 Project-level 의 빌드 설정 사용

5. 프로그램을 디버깅하거나 테스트하는 데 사용할 수있는 실행 가능한 환경. 각 실행 환경은 다음을 명시한다:

  • Xcode에서 실행하거나 디버깅 할 때 실행할 실행 파일
  • 실행 파일에 전달할 명령 줄 인수 (있는 경우)
  • 프로그램이 실행될 때 설정되는 환경 변수 (있는 경우)

프로젝트는 독립형이거나 작업 공간에 포함될 수 있으며 Scheme 을 사용하여 주어진 시간에 활성화되는 Target, 빌드 설정 및 실행 설정을 명시 할 수 있다.

3. Target

Target 은 빌드 할 제품을 지정하며, Project 또는 Workspace 의 파일 셋에서 제품을 빌드하기위한 지시 사항을 포함한다.

Target 은 단일 제품을 정의한다.

  • 해당 제품을 빌드하기 위해 필요한 빌드 시스템의 입력(소스 파일과 소스파일을 처리하기 위한 명령어 등)을 구성.
  • 프로젝트에는 하나 이상의 Target 이 포함될 수 있으며 각 Target 은 하나의 제품을 생성.
  • Target 은 프로젝트 빌드 설정을 상속 받지만, Target 수준에서 다른 설정을 지정하여 프로젝트 설정을 무시 가능.
  • Target은 한 번에 하나의 활성 Target 만 있을 수 있고, Xcode 의 Scheme 은 활성 Target 을 지정.

Target 과 Target 이 생성한 제품은 또 다른 Target 과 관련 될 수 있다.

빌드를 하기 위해서 Target 이 다른 Target 의 Output 을 요구하면, “ 첫 번째 Target 은 두 번째 Target 에 의존한다” 라고 한다. 두 Target 이 같은 Workspace 에 있으면 Xcode 가 종속성을 발견 할 수 있으며, 종속성이 필요한 순서로 제품을 빌드한다. 이러한 관계를 “암시적 종속성” 이라고 한다.

또한 빌드 설정에서 “명시적 Target 종속성”을 지정할 수 있으며, 암시적 종속성을 가질 것으로 예상되는 두 대상이 실제로 종속되지 않도록 지정할 수 있다. 예를 들어, 동일한 Workspace 에서 해당 라이브러리를 링크하는 라이브러리와 응용 프로그램을 모두 빌드 할 수 있다. Xcode는 이 관계를 발견하고 라이브러리를 먼저 자동으로 빌드 할 수 있다. 그러나 실제로 작업 공간에 빌드 된 라이브러리가 아닌 라이브러리 버전과 링크하려는 경우, 빌드 설정에 이 암시적 종속성을 대체하는 명시적 종속성을 작성할 수 있다.

4. Scheme

Xcode Scheme 은 빌드 할 Target 들의 모음, 빌드 할 때 사용할 구성 및 실행할 테스트 들의 모음을 정의한다. 원하는 만큼 많은 Scheme 을 만들 수 있지만, 한 번에 하나씩 만 활성화 할 수 있다. Scheme 을 프로젝트에 저장 할지에 대한 여부를 지정할 수 있다. 이 경우, 프로젝트가 포함 된 모든 Workspace 또는 특정 Workspace 에서 사용할 수 있다. 활성 Scheme 을 선택하면, 실행 대상 (즉, 제품이 빌드되는 하드웨어의 아키텍처)도 선택된다.

5. Build Settings

빌드 설정은 제품 빌드 프로세스의 특정 측면을 수행하는 방법에 대한 정보가 들어있는 변수이다. 예를 들어, 빌드 설정의 정보는 Xcode가 컴파일러에 전달하는 옵션을 지정할 수 있다.

Project 또는 Target Level 에서 빌드 설정을 지정할 수 있으며, 각 Project-Level 빌드 설정은 특정 Target 에 대한 빌드 설정에 의해서 명시적으로 무시되지 않는 한 프로젝트의 모든 Target 에 적용된다.

Xcode의 빌드 설정은 설정 제목정의로 구성된다.

빌드 설정 제목은 빌드 설정을 식별하며 다른 설정 내에서 사용될 수 있다. 빌드 설정 정의는 상수이거나 Xcode가 빌드시 빌드 설정의 값을 결정하는 데 사용하는 수식이다.

Project 템플릿에서 새 Project 를 만들 때 Xcode 에서 제공하는 기본 빌드 설정 외에도 Project 또는 특정 Target 에 대한 사용자 정의 빌드 설정을 만들 수 있다. 또한, 조건부 빌드 설정을 지정할 수도 있으며, 조건부 빌드 설정의 값은 하나 이상의 선행 조건이 충족되었는지 여부에 따라 다르다. 예를 들어, 대상 아키텍처를 기반으로 제품을 빌드하는 데 사용할 SDK를 지정할 수 있다.

https://developer.apple.com/library/archive/featuredarticles/XcodeConcepts/Concept-Workspace.html

--

--