기어가더라도 제대로

[Xcode-기초] Target, Build Configuration, Scheme 개념 정리 본문

Xcode, build, etc

[Xcode-기초] Target, Build Configuration, Scheme 개념 정리

Damagucci-juice 2025. 1. 30. 12:47

개요

개발용도로 작업을 하는 것과 실제 배포 버전에서 수행해야하는 작업에 차이가 있음

  • 호출하는 API 서버가 달라지는 등에 변경에 대응을 해야하는데, 그걸 상황마다 다르게 그때마다 변경하기가 어렵고 오류의 가능성도 있어서 별도의 환경 설정값들이 필요
  • 예를 들어 은행 앱을 개발하면서 실제 은행 잔고가 편집되면 큰 사고임

또한, 얼핏보면 비슷해 보이고, 기본적으로 제공되는 것이 있어서 한번 짚고 넘어가야 함

 

개념

  • Build: 코드로 되어있는 문서를 앱으로 돌릴 수 있는 실행단위로 만드는 행위(타겟을 컴파일)
    • Build의 결과물로 실행할 수 있는 앱이 나옴
    • 그 결과로 나온 앱을 실행하는 것이 'Run'
  • Product: 일반적으로 접하는 앱, 혹은 상품과 같은 큰 개념, 작은 앱이라면, Project와 혼용 해서 말을 쓰는 것이 가능
  • Project: Xcode 템플릿을 이용해서 앱을 시작을하면 생성되는 파일로써, 소프트웨어를 만드는데 필요한 모든 파일, 자료, 정보등에 대한 저장소
  • Bundle: 코드, 이미지, 폰트, 오디오 파일 등 앱이 접근하는 자원을 포함하는 계층적으로 구조화된 디렉토리
    • 예를 들어 Bundle 덕분에 디스크에 이미지가 있을 때, 그 이미지의 구체적인 저장 위치를 알지 못해도 코드적으로 Bundle Object에 접근 가능
  • Target: 앱, 프레임워크, App Extension 또는 Unit Test 같이 빌드할 Product의 구체화된 모델
    • ios target, mac target, watch os target등 한 프로덕트에서 여러 플랫폼에 앱을 지원한다면 한 프로덕트에 여러 타겟이 존재 가능
      • 타겟 사이에 먼저 설치가 되어야하는 파일을 명시하는 것이 Dependencies
      • 타겟 설정은 그 타겟에만 영향을 미치나, 프로젝트 설정은 모든 타겟과 프로젝트 전반에 영향을 미침
      • 타겟에서 특정 파일에 접근하기 위해선 그 파일의 멤버쉽에 타겟을 등록시켜야함
  • Build Configuration: Build Settings의 집합, 환경 설정의 모음집이라고 봄
    • 기본적으로 Debug, Release Configuration이 제공됨
    • 디버그 스킴, 릴리즈 스킴이라는 말은 잘못된 말임
  • Scheme: Target, Build Configuration, Buil Settings를 아우르는 혼합체, 기본적으로 앱 생성시 하나 주어짐
    • Active Scheme: 활성화 되어있는 스킴
      • 여러 스킴을 만드는 것이 허용되지만 바로 당장 빌드할 수 있는 스킴은 하나뿐임

 

Unit Test 를 만들며 Target을 알아보기

프로덕트에서 "무엇을" 만들지 나타냄

  • Unit Test도 별도의 타겟
  • 타겟 생성하기
    • 프로젝트 > Targets > '+' 버튼

  • 다양한 타겟의 템플릿들 중 가장 밑으로 내려서 Unit Testing Bundle을 추가

  • 2개의 타겟이 된 것을 확인

  • ContentView.swift 파일은 Unit Test 타겟(ExProjTests)의 멤버쉽으로 등록이 안되어 있음

Swift Language 버전으로 Build Settings 알아보기

  • 프로젝트 > 타겟 > Build Settings 로 이동하면 보이는 무수한 환경설정이 있음
    • 모두다 알 순 없고, 필요한 설정만 이해하면 됨

  • All > Levels > "swift lang" 검색
    • 현재 타겟에서 어떤 Swift 버전을 사용할 것인지 설정
    • iOS Default - Project - Target 순서로 구체적인 설정 범위를 지님, 즉 프로젝트 설정보다 타겟의 설정이 더 우선순위를 지님
    • Resolved: 위의 것 중에 어떤 환경 설정을 사용할 것인지 결정난 사항을 보여줌
  • 필요하다면 Debug와 Release의 Swift 버전을 변경할 수 있으나 여기선 굳이 하지 않음

Alpha Configuration을 만들면서 이해하기

Build Configuration: 프로덕트를 "어떻게" 만들 것인지를 나타냄

  • 앱 배포의 단계에는 대표적으로 Dev, Alpha, Beta, Release 등이 있음
  • Dev: 기능을 개발하면서 버그가 발생하고, 그런 버그를 잡기도 하는 단계
  • Alpha: 개발팀에서는 개발이 마무리가 되었고, 내부적으로 QA나 테스트를 중점적으로 하는 단계 
  • Beta: QA도 안정적으로 통과되어서 내부에서 출시전에 사용을 하거나, 외부의 베타테스터들에게 배포하는 단계
  • Release: 공개적으로 앱스토어에 올라가있는 단계

이러한 각 단계들을 대표하는 환경설정의 집합을 Build Configuration으로 묶어서 대표함, 이 중에서 Alpha를 만들어 보기

  • 프로젝트 > Info에 들어오면 Configurations가 보임

  • "+" 버튼으로 Alpha를 추가, 여기선 Release를 복사해와서 만듦

 

  • Configuration 마다 Bundle Identifier를 변경해서 서로 다른 프로덕트로 설
    • Target > Build Settings > "bundle identifier" 검색

 

  • App Icon 을 담당하는 이름도 변경

  • 한 프로덕트가 동일한 기기에 한개 이상 설치 될 수 없는데, product bundle identifier를 변경해서 두 프로젝트가 설치 된모습
    • Alpha Configuration을 만들고 설정을 해줬으나, 그것을 실행하는 Scheme이 없어서 앱이 바탕화면에 나타나지 않음

Scheme을 만들면서 Alpha Configuration을 채택하기 

Scheme?: 아까 Target이 무엇을 만들지를 정하고, Build Configuration이 어떻게 만들지를 정한다면 Scheme은 이런 것들을 아우르는 혼합물의 개념

  • 기본 Scheme: 프로젝트가 생성하면 하나가 자동적으로 생성됨
  • 특징: 앱 언어, 시스템 언어, 로케이션 등의 아이폰의 "설정"에서 바꿔야하는 것들을 설정할 수 있음
  • Scheme Phase: 빌드, 실행, 테스트, profile, analyze, Archive 등의 단계를 나타냄
    • 여기서 각 단계 마다 세부 설정을 변경해 줄 수 있음

 

  • 상단에 project indicator에서 가장 왼쪽편을 누르면 Scheme에 대한 정보를 볼 수 있음

  • New Scheme ... 을 누르고 ExProj Alpha 라는 이름의 스킴을 추가

  • Active Scheme이 ExProj Alpha 인 상태에서 Edit Scheme ... 선택

  • Run 빌드 페이즈를 선택하고 Build Configuration을 Alpha로 선택

  • scheme과 build configuration을 이용해 동일한 앱을 3가지 설치한 모습

 

전체 코드

https://github.com/Damagucci-Juice/ExProj

 

GitHub - Damagucci-Juice/ExProj

Contribute to Damagucci-Juice/ExProj development by creating an account on GitHub.

github.com

 

참조

 

Configuring a new target in your project | Apple Developer Documentation

Configure your project to build a new product, and add the code and resources the product requires.

developer.apple.com

 

 

iOS App Distribution & Best Practices, Chapter 10: Build Customizations

Learn how to customize a build using targets, build settings and schemes. Understand how they work together, and the different levels of inheritance in build configurations.

www.kodeco.com

 

 

Comments