iOS 개발자라면 개발(Development), QA, 베타(Beta), 프로덕션(Production)처럼 여러 환경을 관리해야 한다는 사실을 이미 잘 알고 있을 것입니다. 환경마다 서버 URL, 앱 아이콘, 각종 설정이 다르게 적용되어야 하죠.
특정 환경을 가리키는 새 빌드를 만들 때마다 서버 URL도 함께 변경해야 한다는 점을 늘 염두에 둬야 합니다. 상수 파일에 하드코딩된 플래그 값을 수정하거나 매크로를 사용하는 방식으로 처리할 수도 있지만, 이렇게 하면 코드가 점점 더 복잡해지고 실수할 가능성도 커집니다.
잠시 생각해 보면 훨씬 좋은 방법이 떠오릅니다. 바로 환경별로 스키마(Schema)와 구성(Configuration)을 분리하는 것입니다. 이렇게 하면 서버 URL, 앱 아이콘, Plist 파일, 각종 설정을 빌드 시 자동으로 전환할 수 있어 어떤 시나리오든 손쉽게 대응할 수 있습니다.
이 튜토리얼에서는 스키마와 구성을 활용해 다양한 환경을 체계적으로 관리하는 방법을 단계별로 소개합니다.
1. 프로젝트 설정
Xcode를 열고 적절한 이름으로 새 싱글 뷰 애플리케이션(Single View Application)을 생성합니다.
2. 스키마 및 빌드 구성 추가
스키마를 추가하기 전에 알아둘 점이 있습니다. 모든 Xcode 스키마에는 기본적으로 Debug와 Release라는 두 가지 빌드 구성이 포함되어 있으며, 필요하다면 특정 빌드 구성에 맞춰 설정을 달리 지정할 수 있습니다.
왼쪽 Project Navigator에서 프로젝트를 선택하고, Info와 Build Settings 두 탭 중 Info를 엽니다. Configurations 항목에서 다섯 가지 환경(Development, Production, QA, Beta, UAT)에 맞는 구성을 추가합니다.

먼저 Debug를 더블클릭해 Debug (Development)로 이름을 변경합니다. 마찬가지로 Release를 더블클릭해 Release (Development)로 바꿉니다. 이후 + 버튼을 누르고 Duplicate "Debug (Development)"와 Duplicate "Release (Development)"를 차례로 복제한 뒤, 복제된 이름을 나머지 환경(QA, Beta, UAT, Production)으로 하나씩 변경합니다.

스키마 생성을 위해 Xcode 좌상단의 Manage Schemes로 이동합니다. 기본 스키마가 하나 이미 존재하는데, 이를 Development로 이름을 바꾸거나 삭제 후 같은 이름의 새 스키마를 추가하면 됩니다. 그다음 나머지 네 환경에 대한 스키마도 차례로 만듭니다.

이때 Shared 체크박스를 반드시 선택하는 것을 잊지 마세요. 공유 설정을 해야 다른 팀원과 스키마를 함께 사용할 수 있습니다. 모든 스키마를 추가하면 화면은 다음과 같이 보입니다.

3. 구성 설정 파일(.xcconfig) 추가
프로젝트를 우클릭해 New File을 선택한 뒤, Configuration Settings File을 추가하고 환경 이름과 동일하게 파일명을 지정합니다.

모든 구성 파일을 추가하면 왼쪽 Project Navigator는 다음과 같이 표시됩니다.

이제 가장 중요한 부분입니다. 각 구성 파일에 서버 URL과 기타 환경별 키-값을 입력합니다.

4. Plist 파일 추가
info.plist 파일의 이름을 development.plist로 변경합니다. 동일한 plist 파일을 환경 수만큼 복사해 프로젝트에 붙여넣고, 각 파일명을 환경 이름으로 변경합니다. plist 파일에는 환경별 키와 값을 지정할 수 있으며, 이후 구성 파일의 키를 다음과 같이 plist에 연결합니다.

그다음 각 빌드 구성에 맞는 plist 경로를 설정합니다. Targets에서 Info.plist 항목의 이름을 환경별 파일명으로 지정하고, Debug와 Release 구성 모두에 동일하게 적용합니다.


5. 빌드 구성과 구성 파일 연결
Project Info에서 모든 빌드 구성(Debug와 Release)을 하나씩 선택하고, 앞서 프로젝트에 추가한 해당 환경의 구성 파일을 지정합니다.

모든 구성 파일을 연결하면 Build Settings 화면은 다음과 같습니다.

이로써 모든 구성 파일이 해당 빌드 구성에 성공적으로 연결되었습니다.
6. 스키마와 빌드 구성 연결
마지막 단계는 스키마와 빌드 구성을 연결하는 것입니다. 스키마를 선택해 Edit Scheme으로 들어간 뒤, Run · Archive 등 각 단계에 맞는 빌드 구성을 지정하면 됩니다.

7. 프로젝트 실행하기
이것으로 모든 설정이 끝났습니다. 이제 남은 일은 스키마를 선택하고 실행하는 것뿐입니다. 환경은 자동으로 적용됩니다. 서버 URL과 기타 설정 값을 편리하게 가져올 수 있도록 Environment.swift 파일을 만들어 두었습니다.
ViewController.swift나 다른 파일에서 서버 URL 또는 설정 값을 가져오려면 단 한 줄의 코드만 작성하면 됩니다.
또한 Build Settings에서 환경별로 다른 앱 아이콘을 지정할 수 있습니다. 그러면 기기에 설치된 빌드가 어느 환경용인지 아이콘만 봐도 즉시 구분할 수 있습니다.

전체 예제 프로젝트는 GitHub에서 확인할 수 있으니, 궁금한 점이 있다면 다운로드해 참고하세요.
마무리
프로젝트를 빌드할 때마다 서버 URL이나 각종 구성을 일일이 수정하는 데 시간을 낭비하지 마세요. 스키마와 구성을 활용하면 다양한 환경, 앱 아이콘, 설정을 가장 쉽고 안전하게 관리할 수 있습니다.
이 글이 도움이 되었다면 박수를 보내 주세요. 더 좋은 글을 쓰는 원동력이 됩니다. 제안이나 피드백은 mail2boudhayan@gmail.com으로 언제든 보내 주셔도 좋습니다.