macOS 앱 기획하기
Mac 소프트웨어 개발이 처음이신가요? 잠시 시간을 내어 개발에 사용할 기술과 도구를 살펴보세요. Apple은 개발을 시작하는 데 필요한 모든 것을 제공합니다. macOS 기술을 통해 앱에 원하는 기능과 성능을 구현해 보세요.
가능성 탐색하기
Mac은 빠른 속도와 뛰어난 성능을 제공하며, macOS를 사용하여 앱의 성능을 극대화할 수 있습니다. Mac은 작업을 최대한 빨리 처리하기 위해 뛰어난 정보 처리 능력을 필요로 하는 앱에 가장 적합합니다. 하지만 커뮤니케이션, 뉴스 및 정보, 소셜 미디어, 게임 등 일상적인 작업에도 사용할 수 있습니다.
macOS에서는 콘텐츠를 전달하는 다양한 경로를 제공하며, 선택한 개발 경로가 이후 내리게 될 많은 결정에 영향을 줍니다.
표준 뷰에서 UI 조합하기
macOS에 내장된 버튼, 텍스트 레이블 및 기타 표준 뷰 및 제어 기능을 사용하여 신속하게 앱을 빌드해 보세요. 제어 기능의 디자인을 맞춤화하거나 완전히 새로운 뷰를 생성하여 독창적인 방식으로 콘텐츠를 표현해 보세요. 이러한 접근 방법은 대부분의 앱에 적용 가능하며 개발 시간도 단축할 수 있습니다.
UI 없는 소프트웨어 빌드하기
UI가 필요 없는 간단한 도구 및 유틸리티를 개발하는 경우 이 경로를 선택해 보세요. 커맨드 라인 도구 및 스크립트, XPC 서비스, 맞춤형 파일 시스템 또는 클라우드 저장 공간을 지원하는 모듈, 데이터베이스 및 서버 소프트웨어, 오픈 소스 도구, 새로운 프로그래밍 언어, UNIX 도구 등을 만들 수 있습니다.
특정 경로를 선택한 다음 앱에 필요한 기능에 대해 생각해 보세요. 몇 가지 핵심 기술을 제외하고, 특정 기능 지원을 위해 대부분의 기술을 필요에 따라 도입할 수 있습니다. macOS 기술은 로우레벨 하드웨어 시스템에서부터 개발자의 앱을 보호하며, 기능을 빌드할 수 있는 안정적인 기반을 제공합니다.
기존의 iPadOS 앱이 있는 경우 Mac Catalyst를 사용하여 Mac에서 실행되는 앱의 버전을 만들 수 있습니다.
시작하기
소프트웨어 개발은 Apple의 통합 개발 환경인 Xcode에서 시작됩니다. Xcode는 프로젝트 관리 지원, 코드 편집기, UI용 시각적 편집기, 디버깅 도구, 다양한 기기를 위한 시뮬레이터, 성능 평가 도구를 비롯하여 소프트웨어 개발을 위한 종합 도구 세트를 제공합니다. 아울러 Xcode에는 소프트웨어 개발을 위한 시스템 코드 모듈 종합 세트인 프레임워크도 포함되어 있습니다.
Xcode에는 iOS, iPadOS, macOS, tvOS 및 watchOS용 SDK가 포함되어 있습니다.
Xcode에서 신규 프로젝트를 생성하려면 File(파일) > New(신규) > Project(프로젝트)를 선택한 후 표시되는 메시지에 따라 macOS 앱을 생성합니다. 새로운 프로젝트에는 개발을 시작할 때 사용할 수 있는 기본 코드가 일부 포함되어 있으며, 각 앱의 유형에 의해 시작 지점이 결정됩니다. Xcode 문서에서 Xcode 사용 방법에 대한 자세한 내용을 확인하시기 바랍니다.
Swift Playgrounds는 대화식 코딩 환경으로, 코딩 및 개발자 기술을 배우고 실험하고자 하는 사람들을 위한 환경입니다. Swift Playgrounds에서 자세한 내용을 확인하시기 바랍니다.
Swift 도입하기
프로젝트를 설정하면서 어떤 프로그래밍 언어를 사용할 것인지 생각해 보세요. Swift는 구문이 간결하면서도 안전하게 설계되었으며 코드의 표현력을 향상하는 최신 기능을 제공하므로 개발자들이 선호하는 옵션입니다. Swift 코드를 사용하면 빠르게 실행되는 소프트웨어를 제작할 수 있으며, Objective-C와도 상호 운용이 가능하므로 같은 프로젝트에 두 가지 언어의 소스 파일을 포함시킬 수 있습니다.
Swift 프로그래밍 언어 설명서
Swift 프로그래밍 언어 설명서는 Swift 프로그래밍 언어에 대한 전체적인 개요를 제공하는 설명서로, Swift를 시작하는 개발자를 위한 탁월한 입문서입니다.
앱 빌더 기술 선택하기
개발 초기에 선택해야 할 또 다른 사항은 인터페이스에 사용할 앱 빌더 기술입니다. Apple의 앱 빌더 기술은 macOS 앱과 커뮤니케이션하는 데 필요한 주요 인프라를 제공하며 인터페이스를 빌드하고, 이벤트 등을 처리하는 데 사용하는 프로그래밍 모델을 정의합니다.
SwiftUI
SwiftUI는 플랫폼에 구애받지 않는 최신 UI 및 앱 인프라 빌드 방식을 제공합니다. 표준 SwiftUI 보기 세트에서 프로그래밍 방식으로 인터페이스를 구체화하거나 원하는 디자인으로 맞춤형 보기를 생성해 보고 실시간으로 인터페이스를 시각적으로 표현해 보세요. 런타임 동안 시스템에서는 코드를 사용하여 앱의 최종 인터페이스에서 변경 사항을 관리하도록 빌드합니다. UI에 대한 이러한 프로그래밍 방법을 통해 다양한 표준 동작을 무료로 제공하며 UI를 최신 상태로 유지하는 절차를 간소화합니다. SwiftUI 사용 방법에 대한 자세한 내용은 SwiftUI 소개 튜토리얼에서 확인하시기 바랍니다.
AppKit
AppKit을 사용하면 스토리보드를 사용하여 인터페이스를 시각적으로 조합할 수 있습니다. AppKit에서는 보다 전통적인 앱 빌드 방식을 제공하므로 인터페이스 요소의 관리를 완벽하게 제어할 수 있습니다. 뷰 및 컨트롤 업데이트, 구성 변경 및 앱의 다른 부분에 대한 변경 사항을 커뮤니케이션하는 데 필요한 코드를 작성해 보세요. AppKit 앱 빌드를 시작하려면 AppKit 문서를 참고하시기 바랍니다.
SwiftUI는 앱의 인프라 및 UI를 빌드하는 데 우선 선택되는 기술이며, 더 나은 상황에서 개발 시작을 시작할 수 있도록 해줍니다. 초기 UI를 AppKit으로 빌드했더라도 SwiftUI와 AppKit의 뷰는 상호 운용이 가능합니다. 동일한 뷰 계층에 있는 SwiftUI 뷰와 AppKit 뷰를 손쉽게 혼합할 수도 있습니다.
앱의 인프라를 빌드하는 기술 외에도 macOS에는 앱의 데이터 구조를 빌드하는 기술도 포함되어 있습니다. Swift 표준 라이브러리 및 Foundation 프레임워크는 어레이 및 딕셔너리, 문자열, 숫자, 날짜 및 기타 일반적인 데이터 값과 같이 자주 사용되는 기본 유형을 제공합니다. 직접 맞춤형 유형을 생성하고 Swift의 Codable 지원을 적용하여 해당 유형을 디스크에 유지할 수도 있습니다. 앱에서 대량의 구조적 데이터를 관리하는 경우 Core Data 및 CloudKit을 사용한 데이터 관리 및 유지를 고려해 보세요.
사용자 경험 설계하기
사용자는 매력적인 경험을 할 수 있는 앱에 이끌립니다. 멋진 디자인, 이해하기 쉬운 레이아웃 그리고 적절한 콘텐츠를 강조하는 UI를 만들어 보세요.
Mac에서는 다채로운 인터페이스를 빌드할 수 있는 넓은 화면 공간을 제공하므로 직관적인 방식으로 정보를 선보일 수 있는 방법을 생각해 봅니다. 또한 시스템별 디자인 패턴이 UI에 미치는 영향도 고려하도록 합니다.
- 윈도우에 의해 앱 UI의 핵심이 정의됩니다. 윈도우를 하나 또는 여러 개 생성해 보고, 각각의 윈도우에 비슷한 콘텐츠 또는 다른 콘텐츠를 배치해 봅니다. 윈도우를 특정 크기로 설정하거나 사용자가 크기를 조정하도록 할 수 있습니다. 방해받지 않는 작업 환경을 위해 전체 화면 모드를 지원하세요.
- 메뉴에 의해 사용자가 콘텐츠에서 수행하는 작업이 정의됩니다. 화면 상단의 메뉴 막대에는 활성화된 앱의 메뉴가 표시됩니다. 앱에서 관련된 작업을 식별하고 사용자가 콘텐츠와 상호작용하는 방식을 반영한 메뉴를 만들어 보세요.
- Dock을 통해 앱, 문서, 윈도우 및 폴더에 편리한 접근 방법을 제공할 수 있습니다. 맞춤형 Dock 메뉴를 추가하여 자주 이용하는 명령을 표시하거나 앱 아이콘에 배지를 달아 새로운 콘텐츠가 추가되었음을 알릴 수 있습니다.
휴먼 인터페이스 가이드라인
Apple의 휴먼 인터페이스 가이드라인은 앱 인터페이스 디자인, 콘텐츠 탐색, Mac과의 상호작용 관리 등에 관한 귀중한 정보를 담고 있습니다. macOS 생태계를 살펴볼 때 먼저 이 가이드라인을 읽고, 해당하는 Apple 디자인 리소스를 사용하여 앱 디자인을 시작하시기 바랍니다.
특정 기능과 기술은 모든 macOS 앱에 반드시 필요합니다. UI 계획 초기 단계에 반드시 다음 기능을 도입하도록 합니다.
윈도우 컨트롤러
macOS에서 윈도우 컨트롤러는 윈도우 로드, 표시 및 닫기 기능을 포함하여 하나의 윈도우에 표시되는 인터페이스의 콘텐츠를 관리합니다. SwiftUI에서는 Scene을 사용하여 윈도우를 관리합니다. AppKit에서는 NSWindowController 대상체를 사용합니다.
자동 레이아웃
전체 화면 및 서로 다른 윈도우 크기를 지원하기 위해 페이지의 위치를 수동으로 조정하는 대신 시스템에 현재 안전 영역에 비례하여 조정하는 방법을 알아보세요. SwiftUI에는 자동 레이아웃이 UI 디자인 방식의 일부로 도입되어 있습니다. AppKit 뷰에 자동 레이아웃을 도입하려면 인터페이스에 Auto Layout(자동 레이아웃) 제약을 추가하세요.
다양한 화면 스타일
시스템 수준의 화면 스타일 변경을 지원하는 UI를 빌드해 보세요. 사용자는 다크 모드를 통해 라이트 모드 또는 다크 모드 UI를 선택할 수 있으며 손쉬운 사용 설정을 통해 고대비 UI를 선택할 수 있습니다. 스타일마다 기본 색상 팔레트 및 이미지 애셋이 서로 다르며, 애셋 카탈로그를 통해 이를 관리할 수 있습니다. UI의 다른 부분에서 라이트, 다크 또는 고대비 콘텐츠로 언제 변경해야 할지 판단하는 데 시스템 API를 사용하도록 합니다. 인터페이스에 다크 모드 지원하기에서 자세한 내용을 확인하시기 바랍니다.
텍스트 스타일
앱의 텍스트에 텍스트 스타일 및 동적 서체 버전을 도입해 보세요. 텍스트 스타일에 의해 텍스트의 의미론적 사용이 정의됩니다. 예를 들어, 본문 스타일은 가장 주된 콘텐츠가 담겨 있다는 의미입니다. 텍스트 스타일의 서체 특성은 서체 크기를 변경해도 그대로 유지되므로 텍스트 크기를 조정할 수 있으며 원하는 앱 화면 스타일을 유지할 수 있습니다. 메뉴, 툴팁 및 인터페이스의 특정 요소에 동적 서체 버전을 사용하여 표준 UI 요소의 모양새를 일관성 있게 유지하도록 합니다. 타이포그래피에서 자세한 지침을 알아보시기 바랍니다.
확장 가능한 이미지
앱이 변경 사항에 맞추어 잘 조정될 수 있도록 SF Symbols를 통합해 보세요. SF Symbols 앱에는 화면 스타일 및 크기 변경 사항에 맞춰 자연스럽게 조정되는 구성 가능한 벡터 기반 이미지 컬렉션이 방대하게 포함되어 있습니다. 또한 San Francisco 시스템 서체와 잘 어울리기 때문에 Apple 플랫폼 전반에 걸쳐 일관된 스타일을 제공합니다. UI에서 기호 이미지 구성 및 표시하기를 참고하시기 바랍니다.
문서 및 파일 간단하게 처리하기
macOS에서는 사용자가 파일 시스템에 직접 접근할 수 있으며, Finder 또는 터미널 앱에서 파일을 추가, 삭제, 이동 및 검사할 수 있습니다. 사용자가 파일에 접근하는 데 도움이 되는 기술을 지원하고, 앱이 다른 곳에서 발생하는 변화에 탄력적으로 대처할 수 있도록 합니다.
iCloud Drive로 기기 간 파일 공유하기
문서 및 파일을 iCloud에 저장하는 옵션을 제공하면, 사용자는 보유하고 있는 모든 기기에서 파일에 접근할 수 있습니다. 적은 양의 데이터를 iCloud 키 값 저장 공간을 사용하여 공유해 보세요.
앱의 컨테이너 디렉토리에 비공개 파일 보관하기
앱에서 중간 파일, 캐시 또는 사용자가 변경하면 안 되는 다른 콘텐츠를 생성하는 경우 이러한 파일을 앱 컨테이너 디렉토리에 저장해 보세요. 컨테이너에서는 콘텐츠에 알맞게 정의된 위치를 제공하며, 다른 사람이 실수로 변경할 수 없도록 콘텐츠가 보이지 않게 가려져 있습니다.
맞춤형 파일 유형에 맞는 훑어보기 미리보기 제공하기
사용자는 훑어보기를 사용하여 파일을 열지 않고 Finder에서 볼 수 있습니다. 개발자가 정의한 맞춤형 문서 유형에 맞는 훑어보기 플러그인을 제공하도록 합니다. QuickLookUI에서 자세한 내용을 알아보시기 바랍니다.
앱에서 파일 기반 문서를 지원하는 경우 원활하고 순조로운 문서 편집 경험을 제공하도록 합니다. SwiftUI 문서 유형 또는 AppKit NSDocument 유형을 사용하여 문서 콘텐츠를 모델링하도록 합니다. 실행 취소 및 실행 복귀 지원을 앱의 편집 코드에 빌드하여 사용자가 문서를 편집하는 중에 실수한 내용을 되돌릴 수 있도록 합니다. 자동 저장 기능을 도입하여 사용자가 문서에 변경한 내용을 잃어버리지 않도록 합니다. 문서 기반의 앱 개발하기에서 자세한 내용을 참고하시기 바랍니다.
개발 중 모범 사례 적용하기
다음 사항을 준수하고 모든 사용자에게 최상의 경험을 제공해 보세요.
사용자의 개인정보 보호하기
개인정보는 매우 중요합니다. 사용자에게 당사자의 데이터가 어떻게 사용되고 있는지 지속적으로 알려주세요. 데이터를 수집하는 경우, 개인정보 처리방침을 제공하고 수집한 정보를 어떻게 사용하는지 설명해 주세요. 개인 데이터를 기반으로 작동하는 Apple 기술을 사용하는 경우, 해당 기술의 최초 사용 시 관련 사용 설명이 시스템에 표시되도록 합니다. 사용자의 개인정보 보호하기에서 자세한 내용을 참고하시기 바랍니다.
손쉬운 사용 지원 감사하기
Apple의 기술은 손쉬운 사용을 지원합니다. 하지만 화면 읽기 프로그램 및 기타 손쉬운 사용 기능이 원활히 작동하려면 개발자가 제공하는 정보가 중요합니다. SwiftUI 및 AppKit에서 UI의 각 부분을 설명할 수 있지만, 각 부분이 어떻게 연동하여 작동되는지 아는 사람은 개발자뿐입니다. 손쉬운 사용 레이블 및 기타 설명을 검토하여 유용한 정보를 제공하고 있는지 확인하고, 시선 기반 탐색이 간단하고 직관적인지 확인하세요. 손쉬운 사용에서 자세한 내용을 참고하시기 바랍니다.
앱 국제화 및 현지화
다른 지역 및 언어에 맞게 앱을 현지화하여 세계 시장에 진출해 보세요. Foundation 프레임워크에서는 각기 다른 언어 및 지역에 맞는 문자열, 날짜, 시간, 통화 및 숫자 형식을 지정하는 코드를 제공하므로, 이를 사용하여 앱을 준비해 보세요. 좌횡서 언어 및 우횡서 언어 모두에서 UI가 제대로 보이는지 확인하세요. 앱 리소스를 현지화하고 Xcode 프로젝트에 추가하세요. 현지화에서 국제화 및 현지화 절차에 대한 자세한 내용을 참고하시기 바랍니다.
모두를 위한 디자인
콘텐츠를 개발할 때 사회문화적인 차이를 고려하고, 일부 사용자가 부정적 또는 모욕적으로 느낄 수 있는 이미지 및 용어의 사용을 피하도록 합니다. 포용성에서 자세한 내용을 참고하시기 바랍니다.
철저하게 앱 테스트 및 디버깅하기
개발 사이클에서 문제가 발생하면 내장된 Xcode 디버거를 사용하여 디버깅할 수 있습니다. XCTest를 사용하여 자동화된 테스트 도구 모음을 빌드하고 모든 빌드에서 실행하여 새로운 코드가 정상적으로 작동하는지 확인하도록 합니다. Xcode Cloud의 지속적 통합 시스템을 사용하여 빌드, 테스트 주기 및 QA 팀에 앱 배포를 자동화하도록 합니다.
앱 성능 최적화하기
Xcode와 함께 제공되는 Instruments 앱을 사용하여 코드에서 발생하는 병목 현상 및 기타 성능 문제를 식별할 수 있습니다. 실행 중인 코드를 프로파일링하고, 메모리 누수를 찾고, 리소스 사용 내역을 분석하는 등 다양한 작업에 활용해 보세요. 앱 성능 개선하기에서 Instruments를 사용하여 지표를 수집하는 방법을 확인하시기 바랍니다.
앱에 맞는 비즈니스 모델 선택하기
무료, 앱 내 구입 포함 무료, 유료 다운로드 등 다양한 비즈니스 모델을 사용하여 전 세계에 배포해 보세요. 인터페이스는 사용자에게 조화로운 경험을 제공하며 개발자가 선택한 비즈니스 모델을 지원하도록 빌드합니다. 비즈니스 모델 선택하기에서 자세한 내용을 참고하시기 바랍니다.
편의 기능 추가하기
앱 개발을 완료한 후에는 경험을 향상할 추가적인 방법을 찾아보세요. 특정 기능을 추가하는 것이든, 다른 방법으로 콘텐츠를 선보이는 것이든 사소한 것이 큰 차이를 만듭니다. 예를 들면 다음과 같습니다.
상황에 알맞은 콘텐츠 제공하기
사용자들의 앱 사용 방식을 고려하여 중요 콘텐츠를 빠르게 노출하는 방법을 찾아보세요. 결과를 필터링하거나 중요한 알림을 생성하는 데 현재 날짜와 시간을 사용할 수 있습니다. 머신 러닝을 활용하여 데이터를 분석하고 효과적인 솔루션을 제공해 보세요. 인터페이스를 동적으로 재배열하여 자주 이용하는 콘텐츠에 쉽게 접근하도록 할 수 있습니다.
앱의 콘텐츠를 찾는 데 도움주기
항목을 더 쉽게 찾을 수 있도록 항목에 대한 포괄적인 설명을 Spotlight 검색에 제공해 보세요. 사용자가 검색 결과를 선택하는 경우 제공된 사용자 활동 대상체를 이용해 해당 결과를 표시할 수 있도록 앱을 적절한 상태로 만듭니다.
새로운 기능에 런타임 상태 확인 추가하기
새로운 버전의 macOS를 지원하기 위해 앱을 업데이트하는 경우 새로운 기능을 구현하는 코드에 런타임 상태 확인을 추가하세요. 런타임을 확인하면 새로운 버전의 macOS 사용자와 이전 버전의 macOS 사용자를 위해 각기 다른 버전의 앱을 제공하지 않아도 됩니다. 모든 사용자가 동일한 앱을 사용하며 새로운 버전의 macOS 사용자는 새로 추가된 기능을 사용할 수 있습니다. 특정 플랫폼 또는 OS 버전에서 코드 실행하기에서 런타임 확인을 추가하는 방법에 대한 자세한 내용을 확인하시기 바랍니다.
앱을 통해서만 콘텐츠와 상호작용할 수 있는 것은 아닙니다. 다음 기술을 도입하여 시스템의 다른 부분으로 앱 사용을 확장해 보세요.
콘텐츠를 다른 시스템 서비스에 통합하기
일부 시스템에서는 앱에 특화된 정보를 지원하며, 앱 확장 프로그램을 사용하여 해당 정보를 수집합니다. 앱에 위젯 앱 확장 프로그램을 추가하여 Notification Center에 콘텐츠를 표시하거나 동작 앱 확장 프로그램을 추가하여 앱에서 사용할 수 있는 빠른 동작을 정의하도록 합니다. 앱 확장 프로그램에서 지원되는 앱 확장 프로그램에 대한 자세한 내용을 참고하시기 바랍니다.
앱 콘텐츠용 범용 링크 지원하기
웹사이트와 앱에서 유사한 콘텐츠를 제공한다면 앱에 범용 링크 지원을 추가해 보세요. 범용 링크를 사용하면 앱에서 콘텐츠를 열기 위해 별도의 URL을 생성할 필요가 없습니다. 단일 URL로 앱이 설치된 경우에는 앱을, 설치되지 않은 경우에는 웹사이트를 엽니다. 앱과 웹사이트를 콘텐츠에 연결하기에서 자세한 내용을 참고하시기 바랍니다.
다른 앱에 도움이 될 수 있는 내보내기 기능
macOS의 서비스 메뉴에는 현재 선택한 항목에 수행할 수 있는 작업이 표시됩니다. 서비스 메뉴를 앱에서 제공하는 작업으로 채우고, 이러한 서비스를 런타임에서 수행하도록 코드를 작성하도록 합니다. 서비스 구현 설명서에서 자세한 내용을 참고하시기 바랍니다.
일부 앱에서는 맞춤형 하드웨어와 커뮤니케이션하거나 시스템 수준의 서비스 또는 보안 기능을 제공하기 위해 시스템을 확장해야 합니다. 다음 활동을 지원한다면 앱에 시스템 확장 프로그램을 추가하는 것을 고려해 보세요.
이벤트 모니터링을 통해 잠재적으로 악의적인 활동을 식별하는 경우
예를 들면 개발자가 프로세스의 실행 또는 포킹, 파일 시스템의 마운트 및 신호 올리기를 모니터링하는 것입니다. 엔드포인트 보안에서 자세한 내용을 참고하시기 바랍니다.
코어 네트워크 기능을 맞춤화 또는 확장하는 경우
개발자가 시스템의 Wi-Fi 설정을 구성, VPN 구성을 생성 및 관리, 콘텐츠 필터링 수행, 시스템 전반의 DNS 구성 관리 또는 맞춤형 핫스팟과 통합하는 것을 예로 들 수 있습니다. 네트워크 확장 프로그램에서 자세한 내용을 참고하시기 바랍니다.
맞춤형 하드웨어와 직접 커뮤니케이션하는 경우
예를 들어 개발자가 외장 USB 기기, HID 기기, PCI 기기, 시리얼 기기나 다른 여러 기기와 커뮤니케이션하는 것을 의미합니다. DriverKit에서 자세한 내용을 참고하시기 바랍니다.
더 살펴보기
고유한 기능을 제공하는 동시에 Apple 플랫폼과 긴밀히 통합되어 iOS, iPadOS, macOS, tvOS, visionOS 및 watchOS 전반에서 매끄러운 앱 및 게임 에코시스템을 구축하는 다양한 기술에 대해 자세히 알아보세요.