[Flutter] Flavor를 통한 빌드 변형 — PART#2

Juyoung Lee
7 min readMar 19, 2020

--

Photo by freestocks on Unsplash

# 연관 글

# 들어가며

저번 포스트에 이어 이번 글에서는 iOS 사이드에서의 Build Flavors를 구성하는 방법에 대하여 다루고자 한다.

필자는 안드로이드 개발에 주포지션을 두고 있기 때문에 안드로이드에 비해 iOS 사이드에서의 Build Flavors 구성에 애를 먹었기 때문에 iOS를 하나도 모르는 사람도 설정할 수 있도록 최대한 자세히 써보고자 하며 iOS를 전문적으로 이해하고 작성한 글이 아니기에 잘못된 내용이 있을 수 있다는 점은 감안해 주면 좋을 것 같다.

# iOS 프로젝트 OPEN

이전 글에서와 같은 방법으로 Android Studio의 Project Structure에서 ios 패키지를 우 클릭하여 쉽게 iOS 프로젝트를 Xcode로 열 수 있다.

# iOS scheme 구성과 .xcconfig 파일 생성

iOS 사이드에서 Build Flavors를 구성하기 위해서는 빌드 유형에 대한 scheme와 .xcconfig 파일이 필요하다.

안드로이드 개발자 입장에서 scheme는 gradle의 productFlavors에 정의되는 빌드 변형이고, .xcconfig 파일은 productFlavors에 정의된 각 빌드 유형에 따른 빌드 구성 정보라고 이해하면 된다.

즉, 이전 글에서 개발 버전을 위한 빌드 유형인 development 는 scheme이고, 개발 / 운영에 대한 패키지를 분리하기 위해 development 빌드 유형에 추가한 applicationIdSuffix 와 같은 정보를 담고 있는 파일이 .xcconfig 라고 이해하면 편할 것 같다.

아래에서는 빌드 구성 파일인 .xcconfig 파일을 먼저 만든 후 scheme를 생성하는 방법을 보여준다.

# .xcconfig 생성

Xcode의 Project Structure에서 우 클릭 > New File…을 클릭하여 새로운 파일을 생성하고 여러가지의 파일 포맷 중 Configuration 파일을 생성한다.

파일을 생성할 때 주의할 점은 ios/Flutter를 타깃으로 파일을 생성해 주어야 한다. 파일의 위치가 중요한 이유는 Flutter 프로젝트를 생성하게 되면 안드로이드 Gradle 파일에서 보았듯 Flutter와 iOS를 연동하기 위한 설정 구성요소가 Generated.xcconfig 파일에 나열되기 때문에 각 Build Flavor에서 사용할 xcconfig 파일에서 Generated.xcconfig를 참조하여야 하기 때문이다.

Xcode 사용에 익숙하지 않은 안드로이드 개발자에게는 조금은 어색했던 파일 생성 방법으로 인해 초반에 헤맸던 부분 중 하나다.

Project Structure에서 Flutter 패키지를 우클릭하여 타깃을 지정하고 파일을 생성하면 기본적으로 해당 패키지 아래에 파일이 생길 것이라 생각했으나 실질적으로 파일이 생성되는 경로는 해당 팝업창에서 기본적으로 지정되는 위치가 iOS 프로젝트의 root로 잡혀 빌드 당시에 Generated.xcconfig 를 찾지 못하였다는 에러로 인해 조금 멘붕이 왔었다.

만약 이 단계에서 ios/Flutter를 타깃으로 파일을 생성하지 않을 경우 Generated.xcconfig파일을 불러오는 경로에 대하여 주의가 필요할 것으로 생각된다.

.xcconfig file example — 앱의 이름을 구분하기 위한 BUNDLE_NAME

# scheme 생성

Scheme를 추가하는 방법은 간단하다.
기본적으로 Xcode 상단에 Runner라는 Scheme가 선택되어 있을 것이다. 해당 영역을 클릭하여 보이는 New Scheme... 를 통해 생성하면 되고, New Scheme를 클릭했을 때 나오는 팝업창에서 Target을 Runner로 지정하고 Scheme의 이름을 지정한 후 생성하면 된다.

Scheme를 생성한 후 Manage Schemes... 메뉴로 접근하여 새로 추가한 scheme 우측의 Shared 를 체크해주어야 한다.

# Flavor에 대한 빌드 구성 추가 및 .xcconfig 파일 연결

Project Structure에서 Runner 프로젝트를 선택하고 용도에 맞는 구성요소를 추가한 후 각 Build Flavors에 적용할 구성 파일을 해당하는 구성요소에 적용해 준다.

# scheme와 빌드 구성 연결

위에서 만들어둔 scheme에 적용할 빌드 구성을 Manage Schemes... 메뉴를 통해 설정한다.

# Bundle ID 변형

안드로이드에서는 productFlavors에 applicationIdSuffix 속성을 통해 packageName을 분리해주었다.

iOS에서도 위에서 생성한 .xcconfig 파일을 통해 bundleId를 분리할 수 있으나 몇가지 이슈로 인해 .xcconfig 파일을 이용하는 대신 프로젝트 설정에서 직접 변경해주는 방법을 선택했다.

몇가지 이슈 중 크게는 아래의 두가지 대표적인 예이다.

  • 3rd Sign In 기능이 있는 앱의 경우 Apple의 권고사항으로 인해 Apple Sign In 기능이 필수로 구현되어야 한다.
  • TestFlight를 통해 테스트 버전을 배포하기 위해서는 iTunesConnect에 신규 앱을 생성하여야 한다.

위 두 가지 작업을 위해서는 Apple 개발자 계정에서 관리되는 identifiers에 해당 bundleId가 등록되어 있어야 한다. 하지만 .xcconfig 파일을 이용하여 bundleId에 변형을 주면 디바이스에 설치될 때에는 서로 다른 앱이라고 인식되지만 개발자 계정의 identifiers에는 등록되지 않기 때문에 iTunesConnect에 신규 앱으로 추가할 수도 없고 Apple Sign In 기능이 정상적으로 동작하지 않는다.

# 마무리

위에 나열한 과정을 순차적으로 적용하면 iOS 사이드에서의 Build Flavors 구성은 완료한 것이다. 안드로이드 개발자 입장에서는 Build Flavors를 구성하기 위해 조금 더 복잡한 과정을 거치게 된다고 느낄 수 있으나 iOS의 빌드 구성에 대해서 이해하기 좋은 기회이므로 한 번쯤은 시도해볼 만한 가치가 있다고 생각된다.

다음 글에서는 Flutter 사이드에서 Build Flavors 구성에 따른 앱 실행 방법과 추가적인 내용에 대하여 다뤄볼 예정이다.

--

--