Xcode concepts

업데이트:

Xcode Concepts에 대한 애플 개발자 문서를 번역하고, 설명을 덧붙인 글입니다. 원문은 아카이브되었습니다.

Target

타겟은 빌드할 프로덕트를 지정하고, 프로젝트 또는 워크스페이스의 파일 집합에서 프로덕트를 빌드하기 위한 설명(instruction)을 포함합니다. 타겟은 하나의 프로덕트를 정의하고, 해당 프로덕트를 빌드하는데 필요한 빌드 시스템에 대한 input(소스 파일 및 해당 소스 파일 처리 명령)을 구성합니다. 프로젝트는 하나 이상의 타겟을 포함할 수 있고, 각 타겟은 하나의 프로덕트를 생성합니다.

1

프로덕트를 빌드하기 위한 설명(instruction)은 build settings 및 build phases의 형식을 취하며 Xcode 프로젝트 에디터에서 검토하고 편집 할 수 있습니다. 타겟은 프로젝트의 빌드 세팅(build settings)을 상속하지만, 타겟 레벨에서 어떤 프로젝트 세팅이라도 다르게 지정할 수 있습니다. 한 번에 하나의 타겟만 활성화될 수 있습니다. Xcode 스킴은 활성화 타겟을 지정합니다.

2

타겟과 프로덕트는 다른 타겟에 연관된 채 생성될 수 있습니다. 타겟을 빌드하기 위해 다른 타겟의 output이 필요한 경우, 첫 번째 타겟은 두 번째 타겟에 종속성을 가진다고 합니다. 이 두개의 타겟이 같은 워크스페이스에 존재할 경우, Xcode는 이 종속성(dependency)을 발견하고, 필요한 순서대로 빌드합니다. 이러한 관계를 암시적 종속성이라고 합니다. 빌드 세팅에서 명시적 타겟 종속성 또한 지정할 수 있고, Xcode가 암시적 종속성을 가질 것으로 예상하는 두 개의 타겟이 실제로는 종속성을 가지지 않도록 지정할 수 있습니다. 예를 들어, 하나의 워크스페이스에 라이브러리와 라이브러리에 링크하는 앱을 모두 빌드할 수 있습니다. Xcode는 이 관계를 자동으로 발견해 라이브러리 먼저 빌드합니다. 하지만 실제로 워크스페이스에 빌드된 라이브러리가 아닌 다른 버전의 라이브러리에 링크하려는 경우, 빌드 세팅에 암시적 종속성을 재정의하는 명시적 종속성을 생성할 수 있습니다.

3

Project

Xcode 프로젝트는 하나 이상의 소프트웨어 프로덕트를 빌드하는데 필요한 모든 파일, 리소스 및 정보를 저장하는 저장소입니다. 프로젝트에는 프로덕트를 빌드하는 데 사용되는 모든 요소가 포함되어 있으며 이러한 요소 간의 관계를 유지합니다. 여기에는 프로덕트 빌드 방법을 지정하는 하나 이상의 타겟이 포함됩니다. 프로젝트는 프로젝트의 모든 타겟을 위한 기본 빌드 세팅을 정의합니다.(물론 각 타겟은 프로젝트 빌드 세팅을 재정의하는 빌드 세팅을 지정할 수 있습니다.)

4

Xcode 프로젝트 파일에는 다음 정보가 포함됩니다:

  • 소스파일에 대한 참조:
    • 헤더파일 및 구현파일을 포함한 소스코드
    • 라이브러리와 프레임워크, internal과 external
    • 리소스 파일
    • 이미지 파일
    • 인터페이스 빌더 파일(nib)
  • structure navigator에서 소스 파일을 구성하는데 사용되는 그룹
  • 프로젝트 레벨의 빌드 구성(build configurations). 프로젝트에 대한 하나 이상의 빌드 구성을 지정할 수 있습니다. 예를 들어, 프로젝트의 디버그 및 릴리즈 빌드 세팅이 있을 수 있습니다.
  • 타겟, 여기서 각 타겟은 다음을 지정합니다:
    • 프로젝트가 빌드한 하나의 프로덕트에 대한 참조
    • 프로덕트를 빌드하는데 필요한 소스 파일에 대한 참조
    • 다른 타겟 및 다른 세팅에 대한 종속성(dependencies)을 포함하여, 프로덕트를 빌드하는데 사용할 수 있는 빌드 구성. 프로젝트 레벨의 빌드 세팅은 타겟이 이를 재정의하지 않았을 때 사용됩니다.
  • 프로그램을 디버깅하거나 테스트하는데 사용할 수 있는 실행 가능한 환경, 여기서 각 실행가능한 환경은 다음을 지정합니다:
    • Xcode에서 실행하거나 디버깅할 때 실행할 실행파일(executable)
    • 실행파일에 전달할 커맨드라인 매개변수(존재하는 경우에만)
    • 프로그램이 실행될 때 설정되는 환경변수(존재하는 경우에만)

프로젝트는 혼자 존재하거나 워크스페이스에 포함될 수 있습니다.

Xcode 스킴을 사용해 주어진 시간에 활성화되는 타겟, 빌드 구성 및 실행파일 구성(executable configuration)을 지정합니다.

Build Settings

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

프로젝트나 타겟 레벨의 빌드 세팅을 지정할 수 있습니다. 각 프로젝트 레벨 빌드 세팅은 특정 타겟에 대한 빌드 세팅에서 명시적으로 재정의되지 않는 한 프로젝트의 모든 타겟에 적용됩니다.

각 타겟은 하나의 프로덕트를 빌드하는데 필요한 소스 파일을 구성합니다. 빌드 구성(Build Configuration)은 특정 방법으로 타겟의 프로덕트를 빌드하는데 사용되는 빌드 세팅 집합을 지정합니다. 예를 들어, 프로덕트의 디버그 및 릴리즈 빌드에 대해 별도의 구성을 갖는 것이 일반적입니다.

5

Xcode의 빌드 세팅은 세팅 제목(setting title)과 세팅 정의(setting definition) 두 부분으로 구성됩니다. 빌드 세팅 제목은 빌드 설정을 식별하며 다른 세팅내에서 사용할 수 있습니다. 빌드 세팅 정의는 빌드 시 빌드 세팅 값을 결정하기 위해 Xcode가 사용하는 상수 또는 공식(formula)입니다. 또한 빌드 세팅은 Xcode 유저 인터페이스에서 빌드 세팅을 표시하는데 사용되는 display name을 가질 수 있습니다.

6

프로젝트 템플릿에서 새로운 프로젝트를 생성할 때 Xcode가 제공하는 기본 빌드 설정 외에도, 프로젝트 또는 특정 타겟에 대한 사용자정의(user-defined) 빌드세팅을 생성할 수 있습니다. 또한 조건부 빌드 세팅을 지정할 수도 있습니다. 조건부 빌드 세팅 값은 하나 이상의 전제 조건을(prerequisites) 충족하는지에 따라 다릅니다. 예를 들어, 이 메커니즘을 사용하면 타겟 아키텍쳐를 기반으로 프로덕트를 빌드하는데 사용할 SDK를 지정할 수 있습니다.

7

Workspace

워크스페이스는 프로젝트 및 기타 문서를 그룹화하여 함께 작업할 수 있는 Xcode 문서입니다. 워크스페이스에 원하는 만큼의 Xcode 프로젝트와 다른 모든 파일을 포함할 수 있습니다. 각 Xcode 프로젝트의 모든 파일을 구성하는 것 이외에도, 워크스페이스는 포함된 프로젝트와 해당 타겟 간의 암시적 및 명시적 관계를 제공합니다.

워크플로우의 범위를 확장하는 워크스페이스

프로젝트 파일에는 빌드 구성 및 기타 프로젝트 정보와 함께 프로젝트의 모든 파일에 대한 포인터가 포함되어 있습니다. Xcode 3 이하 버전에서, 프로젝트 파일은 항상 그룹 및 파일 구조 계층의 루트입니다. 프로젝트에 다른 프로젝트에 대한 참조가 포함될 수 있지만, Xcode 3에서 상호 관련된 프로젝트 작업은 복잡하기 때문에 대부분의 워크플로우는 단일 프로젝트로 제한됩니다. Xcode 4 이상 버전에서는, 하나 이상의 프로젝트와 포함하려는 다른 파일을 저장할 워크스페이스를 만들 수 있습니다.

포함된 각 Xcode 프로젝트의 모든 파일에 대한 접근을 제공하는 것 외에도, 워크스페이스는 중요하고 많은 Xcode 워크플로우의 범위를 확장합니다. 예를 들어, 인덱싱이 전체 워크스페이스에서 수행되기 때문에 code completion, Jump to Definition 및 기타 모든 콘텐츠 인식 기능이 워크스페이스의 모든 프로젝트에서 원활하게 작동합니다. 리팩토링 작업은 워크스페이스의 모든 콘텐츠에서 동작하므로, 프레임워크 프로젝트 및 해당 프레임워크를 사용하는 여러 앱 프로젝트를 한 번의 작업으로 리팩토링할 수 있습니다. 빌드할 때, 한 프로젝트는 워크스페이스에 있는 다른 프로젝트의 제품을 사용할 수 있습니다.

워크스페이스 문서에는 포함된 프로젝트 및 기타 파일에 대한 포인터가 있지만, 다른 데이터는 없습니다. 프로젝트는 하나 이상의 워크스페이스에 속할 수 있습니다. 다음 사진은 두 개의 Xcode 프로젝트(Sketch와 TextEdit)와 문서 프로젝트 (Xcode4TransGuideDocPlan)가 포함된 워크스페이스를 보여줍니다.

workspace_hierarchy

워크스페이스의 프로젝트의 빌드 디렉토리 공유

기본적으로, 워크스페이스의 모든 Xcode 프로젝트는 workspace build directory라고 하는 동일한 디렉토리에 빌드됩니다. 각 워크스페이스는 각자의 빌드 디렉토리를 가집니다. 워크스페이스에 있는 모든 프로젝트의 모든 파일이 동일한 빌드 디렉토리에 있기 때문에, 이 모든 파일이 각 프로젝트에 표시됩니다. 따라서, 두 개 이상의 프로젝트에서 동일한 라이브러리를 사용하는 경우 각 프로젝트 폴더에 별도로 복사 할 필요가 없습니다.

8

Xcode는 빌드 디렉토리의 파일을 검사하여 암시적 종속성(dependencies)을 찾습니다. 예를 들어, 워크스페이스에 포함된 한 프로젝트가 동일한 워크스페이스의 다른 프로젝트에 연결된 라이브러리를 빌드하는 경우, 빌드 구성이 종속성을 명시적으로 만들지 않더라도, Xcode는 다른 프로젝트를 빌드하기 전에 자동으로 라이브러리를 빌드합니다. 필요한 경우 명시적 빌드 세팅으로 이러한 암시적 종속성을 재정의할 수 있습니다. 명시적 종속성의 경우, 프로젝트 참조를 반드시 생성해야 합니다.

워크스페이스의 각 프로젝트는 계속해서 독립적인 아이덴티티를 갖습니다. 워크스페이스의 다른 프로젝트에 영향을 주지 않고(또는 영향을 받지않고) 프로젝트에서 작업하려면, 워크스페이스를 열지 않고 프로젝트를 열거나 다른 워크스페이스에 프로젝트를 추가할 수 있습니다. 프로젝트가 하나 이상의 워크스페이스에 속할 수 있기 때문에, 프로젝트 또는 워크스페이스를 재구성하지 않고도 여러 조합으로 프로젝트 작업을 진행할 수 있습니다.

워크스페이스의 기본 빌드 디렉토리를 사용하거나 지정할 수 있습니다. 프로젝트가 빌드 디렉토리를 지정하는 경우, 해당 디렉토리는 프로젝트를 빌드할 때 프로젝트가 속한 워크스페이스의 빌드 디렉토리에 의해 재정의됩니다.

Scheme

Xcode 스킴은 빌드할 타겟 콜렉션, 빌드할 때 사용할 설정 및 실행할 테스트 컬렉션을 정의합니다.

원하는 만큼의 스킴을 가질 수 있지만, 한 번에 하나의 스킴만 활성화시킬 수 있습니다. 스킴을 프로젝트에 저장할지 지정할 수 있습니다. 프로젝트에 저장할 경우, 해당 프로젝트를 포함해 모든 워크스페이스에서 사용할 수 있지만 워크스페이스에 저장하는 경우에는 해당 워크스페이스에서만 사용할 수 있습니다. 활성화 스킴을 선택할 때, 빌드된 앱을 어떤 기기(destination)에 실행시킬 지도 선택합니다.

9

Reference

https://developer.apple.com/library/archive/featuredarticles/XcodeConcepts/Concept-Targets.html#//apple_ref/doc/uid/TP40009328-CH4-SW1

https://zeddios.tistory.com/706

댓글남기기