iOS 앱을 개발하면서 파일을 생성하거나 설정을 할 때 target
을 종종 발견할 때가 있습니다.
뿐만아니라 target
이 여러개인 프로젝트도 종종 볼 수 있습니다.
Build Settings
, Build Phases
와도 밀접한 관련이 있는 Xcode target
에 대해 번역한 글입니다.
번역에 일부는 주관적인 해석이 들어가 있어 해석, 원문 순으로 언급하고 있습니다.
원문 출처: Apple Official Documentaiton
target
은 빌드할 product
를 정하는 것 뿐만아니라 product
빌드 과정에 어떤 파일을 포함시킬 지, 빌드 과정의 순서 등에 대한 지시사항 혹은 설정도 포함하고 있습니다.
A target specifies a product to build and contains the instructions for building the product from a set of files in a project or workspace.
하나의 targert
은 하나의 product
를 의미합니다.
target
은 빌드 시스템에서 해당 product
를 빌드하는데 필요한 소스파일과 이를 처리하는 지시사항 등과 같은 input
들에 대한 순서를 정합니다.
it organizes the inputs into the build system—the source files and instructions for processing those source files—required to build that product.
여러 프로젝트가 하나 이상의 target
을 포함할 수 있고 각 target
은 하나의 product
를 생성합니다.
빌드 지시사항은 Xcode
의 Build Settings
, Build Phases
에서 확인할 수 있고 수정할 수도 있습니다.
target
은 Build Settings
의 내용을 그대로 이어 받아 사용할 수도 있지만 직접 설정할 수도 있습니다. active target
은 한번에 하나만 존재할 수 있고 Xcode scheme
는 active target
를 의미합니다.
target
과 target 으로 만든 product
는 다른 target
과도 연관될 수 있습니다. 하나의 target
이 다른 target
의 결과물을 필요로 한다면, 첫번째 target
은 두번째 target
에 종속되어 있다고 할 수 있다.
또 다른 예로는 앞서 언급한 target
이 같은 workspace
에 있을 때, Xcode
는 설정된 순서로 빌드를 하는 경우, 두 target 간의 dependency
(이하 의존성) 을 찾아낼 수 있습니다. 이러한 관계를 implicit dependency
(이하 암묵적 의존성) 라고합니다. build settings
에서 target 간 의존성
을 직접 설정할 수 있고 Xcode
가 암묵적 의존성
이 있다고 여기는 두 target 간 실제로는 의존성
이 없다고 설정할 수도 있습니다.
예를 들어, 같은 workspace
에서 Library
와 해당 Library
를 사용하는 앱을 만든다고 생각해봅시다. Xcode
는 자동으로 둘 간의 관계를 찾아내고 Library
를 먼저 빌드하게 됩니다. 뿐만아니라 해당 Library
가 아닌 특정 버전의 라이브러리를 사용할 경우 암묵적 의존성
대신 build settings
에서 직접 explicit dependency
를 설정 할 수 있습니다.