Search

iOS Deployment Target vs Minimum Deployment

프로젝트를 진행하면서 WeatherKit을 사용해야될 상황이 와서 Minimum Deployment를 15.0에서 16.0으로 업그레이드 했다. 하지만 iOS Deployment Target도 자동으로 16.0으로 변경될 줄 알았는데 15.0인 것을 발견하였다. 애플은 왜 번거롭게 두 개로 나누어서 버전을 설정하도록 했을까?

iOS Deployment TargetMinimum Deployment의 차이

먼저, 간단하게 두 개념을 정리해보자.
iOS Deployment Target은 앱을 개발할 때 테스트빌드에서 사용할 최소 iOS 버전이다. Xcode에서 프로젝트나 각 타겟별로 이 버전을 설정하게 되며 이 설정에 따라 해당 버전 이상의 iOS에서 앱이 실행될 수 있다. 즉, 개발 과정에서 이 버전을 기준으로 앱이 정상 동작하는지 테스트하게 된다.
Minimum Deployment는 앱이 배포될 때 실제로 최소 요구되는 iOS 버전을 정의하는 설정이다. 이 값은 앱이 앱 스토어에 올라가면 그 버전 이상의 iOS 기기에서만 앱을 다운로드하고 실행할 수 있도록 하는 제한을 걸어준다. 보통 이 값은 Info.plist나 프로젝트 설정 파일에 기록된다.

왜 두 개로 나누었을까?

개발 유연성 확보

iOS Deployment Target을 따로 설정함으로써 개발자가 더 낮은 iOS 버전을 지원하는 코드 작성과 테스트가 가능하다. 예를 들어, 앱이 새로운 기능을 위해 iOS 16.0을 필요로 하더라도 iOS 15.0에서의 호환성을 유지하고 싶은 상황이 있을 수 있다. 이때, Xcode에서는 iOS 15.0에서도 정상적으로 빌드가 되게끔 처리하면서 실제 배포 시에는 16.0 이상의 버전만 지원하도록 제어할 수 있다.
이렇게 하면 새로운 API나 기능을 도입하면서도 기존의 더 낮은 iOS 버전을 지원하는 코드를 유지하거나 조건부 코드(if #available(iOS 16.0, *))를 추가하여 iOS 버전별로 동작을 다르게 구현할 수 있다.

다중 타겟 지원

프로젝트 안에 여러 타겟(Target)이 있을 수 있다. 예를 들어, 동일한 코드베이스에서 일반 사용자용 앱테스트용 앱을 따로 빌드할 때 각각의 타겟에 따라 지원하는 최소 iOS 버전이 다를 수 있다.
이때, 각 타겟마다 iOS Deployment Target을 따로 설정하여 타겟별 맞춤 설정이 가능하게 만들 수 있는 것이다. 즉, 타겟마다 테스트 환경이나 지원 버전을 다르게 설정할 수 있어 유연성을 극대화할 수 있다.

배포 및 호환성 문제 방지

배포 단계에서 Minimum Deployment를 따로 설정함으로써 앱 스토어에 올라가는 버전의 호환성 문제를 최소화할 수 있다. 예를 들어, 개발 중에는 iOS 15.0 버전에서 다양한 테스트를 진행했지만 최종적으로 iOS 16.0 이상에서만 안정적 동작이 보장되는 경우가 있을 수 있다.
이때, Minimum Deployment를 iOS 16.0으로 설정하면 앱이 배포될 때 iOS 15.0 사용자는 설치하지 못하게 되어 불필요한 호환성 문제를 미연에 방지할 수 있다.

성능과 최적화의 이점

최신 iOS 버전은 새로운 API와 기능을 도입할 뿐만 아니라 성능 개선최적화도 포함되어 있다. 개발자는 더 낮은 iOS 버전을 지원하고 싶을 수 있지만 실제 배포에서는 최신 iOS 버전을 타겟으로 하여 성능을 극대화할 수 있다.
이 경우 iOS Deployment Target과 Minimum Deployment를 별도로 설정함으로써 개발 중에는 여러 버전에서 테스트하고 배포할 때는 최신 버전의 성능 이점을 극대화하는 방식으로 운영할 수 있다.

결론

애플이 두 개의 설정을 따로 둔 이유는 개발자가 앱을 더 유연하고 효율적으로 관리할 수 있게 하기 위함이다. iOS Deployment Target은 개발 및 테스트 과정에서 다양한 버전 지원을 쉽게 할 수 있게 하고 Minimum Deployment는 배포 시 호환성과 성능을 최적화하는 데 도움을 준다. 이러한 분리는 복잡한 프로젝트에서 특히 유용하며 개발자의 선택의 폭을 넓혀준다.