이 페이지에서

macOS용 Qt

macOS용 Qt를 사용하면 Apple의 Mac 컴퓨터 제품군을 위한 애플리케이션을 빌드할 수 있습니다.

macOS용 Qt로 개발하려면 시작 가이드를 따르고, Qt 예제와 관련 주제를 살펴보십시오.

지원되는 구성

Qt 6.12에서는 다음 버전의 빌드 환경 및 런타임 대상 플랫폼을 지원합니다.

빌드 환경대상 플랫폼아키텍처
Xcode 16 (macOS 15 SDK) 이상macOS 14.4 이상 (macOS 26 포함)x86_64, x86_64h, arm64

참고: Apple의 macOS에 대한 향후 호환성 약속은 일반적으로 Qt 애플리케이션이 새로운 운영 체제 릴리스에서도 원활하게 실행되도록 보장합니다. 발생할 수 있는 문제는 Qt의 브랜칭 및 지원 정책에 따라 우선 순위가 지정되고 일정이 수립됩니다. 새로운 운영 체제 기능에 대한 지원은 일반적으로 패치 릴리스에 포함되지 않습니다.

빌드 환경

macOS용 빌드 환경은 Apple의 Xcode 애플리케이션에서 제공되며, 여기에는 툴체인(컴파일러, 링커 및 기타 도구)과 애플리케이션을 빌드하고 링크하는 데 사용되는 macOS 플랫폼 SDK(헤더 및 라이브러리)가 모두 포함되어 있습니다. 이 두 가지가 함께 애플리케이션의 빌드 방식을 정의합니다.

Apple은 일반적으로 애플리케이션을 최신 SDK를 사용하여 빌드할 것을 권장하며(App Store의 경우 필수 사항입니다), 따라서 항상 Apple에서 제공하는 최신 Xcode를 사용해야 합니다. 새로운 Xcode 버전은 이전 버전의 macOS에서는 실행되지 않을 수 있으므로, 이를 위해 시스템의 macOS 버전을 업그레이드해야 할 수도 있습니다.

참고: macOS 빌드환경은 항상 사용 중인 Xcode 버전(해당 툴체인 및 SDK)에 의해 전적으로 정의되며, Xcode를 실행 중인 macOS 버전에는 의해정의되지 않습니다.

동작 변경 사항 적용 제외

최신 Xcode 버전과 SDK를 사용하여 애플리케이션을 빌드할 때 주의해야 할 점은, macOS 시스템 프레임워크가 애플리케이션을 빌드한 데 사용된 SDK를 기준으로 동작 변경을 활성화할지 여부를 결정하는 경우가 있다는 것입니다.

이 방식을 통해 Apple은 이전 SDK를 사용하여 빌드된 바이너리가 최신 macOS 릴리스에서도 기능 저하 없이 계속 실행될 수 있도록 보장할 수 있습니다.

예를 들어, macOS 10.14 Mojave에서 다크 모드가 도입되었을 때, macOS는 10.14 SDK를 기반으로 빌드된 애플리케이션만 다크 모드를 지원하는 것으로 간주하고, 이전 SDK를 기반으로 빌드된 애플리케이션은 기본 밝은 모드 모양을 유지하도록 했습니다.

구버전 Xcode를 사용하여 구버전 SDK로 빌드하는 것은 이러한 동작 변경을 피할 수 있는 한 가지 방법이지만, 이는 최후의 수단이며, 애플리케이션에서 이 문제를 해결할 다른 방법이 전혀 없는 경우에만 적용해야 합니다.

대상 플랫폼

macOS용 빌드에서는 ‘약한 링크 ( weak linking)’라는 기법을 활용합니다. 이를 통해 최신 플랫폼 SDK의 헤더와 라이브러리를 사용하여 애플리케이션을 빌드하면서도, SDK 버전보다 낮은 macOS 버전에 애플리케이션을 배포할 수 있습니다. 빌드에 사용된 SDK보다 낮은 버전의 macOS에서 바이너리가 실행될 때, Qt는 플랫폼 기능을 활용하기 전에 런타임에 해당 기능이 사용 가능한지 여부를 확인합니다.

이론적으로는 출시된 모든 macOS 버전에서 애플리케이션을 실행할 수 있겠지만, 실제적인(그리고 기술적인) 이유로 이 범위에 하한이 존재하며, 이를 애플리케이션의 배포 대상이라고 합니다. 바이너리가 배포 대상보다 낮은 버전의 macOS에서 실행되면 Qt는 오류 메시지를 표시하고 애플리케이션은 실행되지 않습니다.

Qt는 CMAKE_OSX_DEPLOYMENT_TARGETQMAKE_MACOSX_DEPLOYMENT_TARGET 변수를 통해 표현하며, 이 변수는 기본적으로 Qt가 지원하는 최소 배포 대상으로 설정되어 있습니다.

사용자 코드가 Qt의 기본값보다 높은 macOS 버전에서 추가된 API를 사용하고 있으며, 런타임 시 해당 API 사용을 제한하기 위해 ` @available ` 검사를 사용하지 않는 경우에만 배포 대상을 높여야 합니다.

CMake를 사용하여 배포 대상을 높이려면:

set(CMAKE_OSX_DEPLOYMENT_TARGET "42.0")

또는 qmake를 사용하는 경우:

QMAKE_MACOSX_DEPLOYMENT_TARGET = 42.0

참고: Qt에서 설정한 기본값보다 배포 대상을 낮춰서는 안됩니다 . 그렇게 할 경우, 바이너리가 Qt가 실행될 것으로 예상한 버전보다 낮은 macOS 버전에 배포되면 런타임에 충돌이 발생할 가능성이 높습니다.

Apple 플랫폼에서의 SDK 기반 개발에 대한 자세한 내용은 Apple의 개발자 문서를 참조하십시오.

아키텍처

기본적으로 Qt XML은 개발용 컴퓨터의 아키텍처에 맞춰 빌드됩니다. Intel 기반 Mac의 경우 x86_64, Apple Silicon 기반 Mac의 경우 arm64 입니다.

다른 아키텍처용으로 빌드하려면 프로젝트 파일이나 명령줄에서 CMAKE_OSX_ARCHITECTURESQMAKE_APPLE_DEVICE_ARCHS 변수를 사용할 수 있습니다. 이를 통해 다른 아키텍처로 크로스 컴파일하거나 범용(다중 아키텍처) 바이너리를 빌드할 수 있습니다. 예를 들어, CMake를 사용하여 애플리케이션을 x86_64 및 arm64 모두에 대해 빌드하려면 다음과 같이 합니다:

cmake ~/src/myapp -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"

또는 qmake를 사용하는 경우:

qmake ~/src/myapp QMAKE_APPLE_DEVICE_ARCHS="x86_64 arm64"

프로젝트 파일에서 아키텍처를 지정할 때는 따옴표를 사용하지 않아야 합니다. 예:

TEMPLATE = app
SOURCES = main.cpp
QMAKE_APPLE_DEVICE_ARCHS = x86_64 arm64

인텔 기반 Mac에서의 하위 아키텍처 지원

기본 아키텍처인 x86_64 외에도, Qt는 인텔 맥에서 성능을 향상시키는 x86_64h ("Haswell") 하위 아키텍처도 지원합니다.

시작하기

Xcode 설치

Xcode는 macOS용 Qt 개발에 필수적인 도구입니다. App Store에서 설치하거나 Apple 개발자 웹사이트에서 다운로드할 수 있습니다.

설치가 완료되면 Xcode를 한 번 실행하여 필요한 종속성을 설치해 주십시오.

그런 다음 ‘ xcode-select ’ 도구를 사용하여 시스템이 올바른 Xcode 설치 버전을 사용하고 있는지 확인해 주십시오.

$ xcode-select -print-path
/Applications/Xcode.app/Contents/Developer

출력 결과가 예상과 일치하지 않는 경우, Xcode 설치 경로를 직접 선택하십시오.

$ sudo xcode-select --switch /Applications/Xcode.app

Qt 설치 또는 빌드

Qt를 설치하거나 빌드하려면 일반적인 Qt 시작 가이드를 따르십시오.

Homebrew를 통해 Qt를 설치하는 방법에 대한 정보는 ‘macOS용 Qt 설치의 다른 방법’을 참고할 수도 있습니다.

Xcode 프로젝트 파일 생성

기본적으로 CMake와 qmake는 Makefile 형식의 프로젝트 파일을 생성합니다. Xcode 내에서 애플리케이션을 빌드하고 디버그하고 싶다면, 대신 Xcode 프로젝트가 생성되도록 설정할 수 있습니다:

cmake ~/src/myapp -GXcode

또는 qmake를 사용하여:

qmake ~/src/myapp -spec macx-xcode

macOS에 애플리케이션 배포하기

macOS 애플리케이션은 일반적으로 독립형 애플리케이션 번들로 배포됩니다. 애플리케이션 번들에는 애플리케이션 실행 파일뿐만 아니라 Qt 라이브러리, 플러그인, 번역 파일 및 기타 필요한 리소스와 같은 종속성들이 포함되어 있습니다. Qt와 같은 타사 라이브러리는 일반적으로 시스템 전체에 설치되지 않으며, 각 애플리케이션이 자체 복사본을 제공합니다.

CMake를 사용하여 애플리케이션을 애플리케이션 번들로 빌드하려면, 실행 파일 타깃의 MACOSX_BUNDLE 속성을 다음과 같이 설정하십시오:

qt_add_executable(MyApp)
if(APPLE)
    set_target_properties(MyApp PROPERTIES MACOSX_BUNDLE TRUE)
endif()

qmake를 사용할 경우, 번들 모드가 기본값으로 설정됩니다. 이를 비활성화하려면 프로젝트 파일(.pro)에서 ` CONFIG -= app_bundle `를 설정하십시오.

애플리케이션을 배포하는 일반적인 방법은 사용자가 Finder에서 마운트할 수 있는 압축된 디스크 이미지(.dmg 파일)를 제공하는 것입니다. 배포 도구인 macdeployqt (macOS 설치 프로그램에서 사용 가능)을 사용하여 독립형 번들을 생성할 수 있으며, 선택적으로 .dmg 아카이브도 생성할 수 있습니다.

애플리케이션은 Mac App Store를 통해서도 배포할 수 있습니다. macdeployqt(bin/macdeployqt)를 앱 스토어 배포의 출발점으로 사용할 수 있습니다. Qt가 앱 스토어 샌드박스 규칙을 준수하도록 하려면, Qt를 -feature-appstore-compliant 인수로 구성해야 합니다.

macOS에서의 배포에 대한 자세한 내용은 Qt for macOS - 배포를 참조하십시오.

참고: macOS 앱 스토어에서 애플리케이션을 판매할경우 특별한 규칙이 적용됩니다. 유효성 검사를 통과하려면 애플리케이션은 코드를 실행하기 전에 유효한 영수증(receipt)이 존재하는지 확인해야 합니다. 이는 복사 방지 메커니즘이므로, 일반적인 패턴을 피하고 영수증을 검증하는 코드를 가능한 한 난독화하기 위한 조치를 취해야 합니다. 따라서 이 작업은 Qt를 통해 자동화할 수 없으며, 애플리케이션 자체를 위해 특별히 작성된 플랫폼별 코드가 필요합니다. 자세한 내용은 Apple의 문서에서 확인할 수 있습니다.

다음 주제에서는 macOS용 Qt에 대한 자세한 내용을 확인할 수 있습니다:

Qt 애플리케이션에서 Objective-C 코드 사용하기

Apple 플랫폼용 애플리케이션에 사용되는 컴파일러인 Clang은 C++과 Objective-C 코드를 혼합하여 사용할 수 있도록 지원합니다. 이 모드를 활성화하려면 관련 소스 파일에 .mm 확장자를 지정하고 평소와 같이 프로젝트에 추가하십시오.

CMake를 사용하는 경우:

target_sources(myapp PRIVATE objc_code.mm)

qmake를 사용하는 경우:

SOURCES += objc_code.mm

그러면 Qt 애플리케이션에서 Apple 개발자 라이브러리의 Objective-C 프레임워크를 사용할 수 있습니다.

모든 소스 파일의 이름을 변경할 필요 없이, 헤더 파일에 헬퍼 함수를 선언하고 Objective-C++ 소스 파일에서 해당 기능을 구현하여 애플리케이션의 다른 부분에서 해당 기능을 사용할 수 있도록 하려면:

// objc_code.h
QString localizedHostName();

// objc_code.mm
#include <Foundation/NSHost.h>
QString localizedHostName()
{
    return QString::fromNSString(NSHost.currentHost.localizedName);
}

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.