스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
Mac에 iOS 앱 구현하기
iOS 앱을 우수한 macOS 경험으로 전환할 수 있는 다양한 방법을 알아보세요. iPad 앱을 M1 Mac용으로 제공하거나 Mac Catalyst를 사용해 모든 Mac에 적합하도록 앱을 빌드하는 등 앱을 Mac에 구현하는 모범 사례를 살펴보겠습니다. 향상된 경험을 제공하는 최신 도구, 옵션 및 API에 대해 알아보세요. 또한 Mac용으로 앱을 최적화하는 방법을 보여드리고, Mac Catalyst를 사용하여 빌드했을 때 데스크탑급 iPad 기능이 Mac 네이티브 옵션으로 자동으로 변환되는 방법을 알아보겠습니다.
리소스
- Human Interface Guidelines: Designing for macOS
- Human Interface Guidelines: Mac Catalyst
- Supporting desktop-class features in your iPad app
관련 비디오
WWDC22
WWDC20
-
다운로드
♪ ♪
안녕하세요 'Mac에 iOS 앱 구현하기' 영상입니다 제 이름은 Owen이고 Mac Catalyst 엔지니어죠
iOS 앱을 M1 Mac에 수정 없이 제공하셨거나 Mac Catalyst를 이용하는 것에 관심이 있으셨거나 Catalyst로 빌드한 앱을 더 좋게 만들고 싶은 분들을 위해 새로운 API와 기술을 공유하여 Mac에서 최상의 성능을 발휘했으면 좋겠습니다 그전에 개발자들이 Mac Catalyst를 이용하여 얼마나 멋진 작품을 만들 수 있는지 보여 드리죠 'Craft'는 힘들이지 않고 멋진 문서를 제작할 수 있는 앱입니다 App Store에서 2021년 최고의 Mac 앱으로 선정됐죠 그리고 Mac Catalyst 덕분에 기기를 넘나들며 앱을 이용할 수 있어서 다음 아이디어가 생각났을 때 바로 작업할 수 있습니다 'Darkroom'의 AI 편집 도구는 사진 작업을 간결하게 바꿔 주고 밖에서 iPhone이나 iPad에서 편집 작업을 시작하고 집에서 Mac Catalyst 앱으로 완료할 수 있죠 뛰어난 앱 디자인과 독창성을 인정받아 Apple Design Award를 수상했으며 2018년 이후 App Store의 에디터 초이스입니다
'Night Sky'는 컴퓨터로 우주를 탐험할 수 있는 앱이죠 별자리에 관해 배울 수 있고 달, 행성, 위성의 상세 3D 모형을 자세히 볼 수 있습니다 멋진 디자인과 훌륭한 비주얼로 웨비와 러비 상을 수상했죠
'아스팔트 9: 레전드'는 짜릿한 레이싱 시뮬레이션으로 Apple Design Award를 수상한 유일의 레이싱 게임이며 Mac Catalyst 버전으로 큰 화면에서 더 짜릿하게 즐길 수 있습니다
이제 여러분의 앱이 Mac에서 멋진 경험을 선사하도록 도움을 주는 방법을 살펴보죠 먼저 M1에서 iOS 앱을 네이티브로 구동할 수 있는 몇 가지 선택지에 관해 이야기할 건데 기존 iOS 앱을 Mac으로 변환하는 가장 쉬운 방법입니다
다음으로 Xcode에 Mac Catalyst 실행 기능을 추가하는 방법과 변경 사항을 다루죠
데스크톱 수준의 iPad API를 채택했을 때 Catalyst 앱에 자동 적용되는 새로운 동작을 선보이고
새로운 Mac Catalyst API로 얻을 수 있는 Mac만의 업그레이드 사항을 말씀드리겠습니다
M1 Mac에 네이티브 iOS 앱을 실행하는 방법부터 다루죠
여러분의 iOS 앱은 M1 Mac의 Mac App Store에 있습니다 Mac 호환 기능에서 옵트아웃 하지 않았다면 'iPhone과 iPad 앱' 탭에서 검색할 수 있죠 그리고 Mac에서의 앱 경험을 개선할 수 있는 두 가지 추가 사항이 있습니다 info.plist에 추가할 수 있는 2개의 새로운 키가 Mac에서 iOS 앱을 어떻게 실행할지 지정할 수 있죠 이 키는 SDK 버전에 묶여 있지 않아서 macOS 12.1 이전의 iOS나 Mac에서는 무시합니다 따라서 원하는 모든 앱에 안전하게 추가할 수 있죠
첫 번째 키인 UISupportsTrueScreenSizeOnMac은 여러분의 앱이 다양한 디스플레이 설정에 준비됐음을 나타냅니다 이 키를 사용하면 iPad 호환 크기가 아닌 진정한 화면 크기와 픽셀 밀도에 맞출 수 있죠
두 번째 키는 UILaunchTo FullScreenByDefaultOnMac인데 여러분의 앱이 실행됐을 때 전체 화면 모드를 선호한다는 의미죠 2개의 키는 함께 사용하면 좋은데 게임과 멀티미디어 앱은 완벽한 픽셀로 빈틈없이 전체 화면으로 즐길 수 있습니다
이 키를 적용한 앱은 수상작 'Sky: 빛의 아이들'로 바로 몰입할 수 있는 경험을 제공하죠 게임을 실행하자마자 멋진 탐험의 세계로 입장하며 화면을 풍부한 디테일로 가득 채웁니다 Touch Alternatives를 사용해도 Mac의 앱 경험을 개선할 수 있는데 키보드, 마우스, 트랙패드 입력을 iOS 멀티터치 제스처와 기기 동작 등으로 자동 변환합니다 이미 App Store의 유명 게임은 Touch Alternatives 지원이 내장되어 있죠 앱을 실행하면 자동으로 튜토리얼이 나와서 터치 컨트롤이 키보드와 마우스로 또는 트랙패드로 어떻게 변환되는지 보여 주죠 예를 들어 방향키는 창 중앙으로부터의 스와이프를 표현하며 스페이스 바로 탭을 할 수 있습니다
자동 Touch Alternatives를 사용하려면 다음과 같은 이름으로 새 plist를 만드십시오 com.apple.uikit. inputalternatives.plist입니다
먼저 defaultEnablement라는 키를 추가하고 enabled라는 스트링 값을 넣는데 Touch Alternatives를 즉시 켜라고 시스템에 알리는 거죠
아래 requiredOnboarding이라는 키를 추가하세요 여러분이 앱을 위해 선택한 컨트롤이 있는 리스트를 포함한 배열입니다
여러분이 선택할 수 있는 컨트롤은 총 5개입니다 탭, 기울이기 드래그, 스와이프 그리고 트랙패드에서의 터치 입력이죠
Touch Alternatives 기능을 켜면 모든 컨트롤이 활성화되지만 여러분의 앱에 가장 알맞은 컨트롤을 선택하여 안내 plist에 해당 컨트롤만 추가하십시오 Mac에서 앱을 실행할 때 감지하며 첫 실행 때 이 컨트롤을 표시하는 안내 시트가 나타납니다 앱 설정에서 사용자들은 plist에 등록한 선호 컨트롤을 보거나 전체 컨트롤을 볼 수 있죠
물론 가장 좋은 선택지는 키보드와 커서 지원을 앱에 직접 적용하는 겁니다 이렇게 하면 여러분의 앱을 모든 기기에서 사용할 수 있고 키보드가 연결된 iPad와 Mac에서도 잘 작동하죠
추가 정보가 궁금하시면 '앱에 하드웨어 키보드 지원하기'와 '트랙패드와 마우스 입력 처리하기'를 시청하십시오 이제 Mac Catalyst 앱으로 바꾸는 절차를 다루겠습니다
프로젝트 설정에서 Mac Catalyst를 추가하면 완벽한 Mac Catalyst 앱으로 자동 변환되며 모든 Mac에서 실행할 수 있고 Mac Catalyst API를 사용하여 더 커스텀화할 수 있습니다 Mac 인터페이스로 최적화할 수도 있는데 네이티브 AppKit 스타일의 컨트롤이 제공되어 앱의 콘텐츠를 네이티브 크기로 렌더링하죠
저는 팀이 작업 중인 Markdown 데모 앱을 사용하여 새로운 iPad 기능을 강조하겠습니다 처음 Mac으로 가져오면 iPad에 맞게 크기를 조정하죠
'맥으로 최적화하기'로 전환하면 자동으로 많은 사항이 변합니다
두 모드를 나란히 놓고 비교하면 차이점이 잘 드러나죠 앱을 Mac에 최적화하면 UINavigationBar가 NSToolbar로 변환되어 네이티브 AppKit 컨트롤을 제공합니다 이러한 변환은 다른 컨트롤에도 적용되며 텍스트 크기도 조정되죠 iPad 이디엄의 텍스트는 iPad 크기에서 렌더링하는데 원래 크기의 77%로 축소되어 있습니다 Mac 이디엄의 텍스트는 Mac 폰트 렌더링으로 처리하여 완벽한 픽셀의 크기로 나타나죠 이는 앱에도 이상적이고 텍스트가 항상 또렷하게 나타납니다 앱에 Mac Catalyst를 적용했으니 얼마나 잘 작동하는지 확인하고 iPad OS 16의 새로운 API를 통해 자동으로 적용되는 Mac 동작을 자세히 살펴보죠 '데스크톱 수준의 iPad 만나기'나 '데스크톱 수준의 iPad 앱 만들기'를 이미 보셨다면 iPadOS 16으로 여러분의 앱 수준을 높일 수 있는 도구에 관해 배우셨을 겁니다 새로운 API는 네이티브 Mac에도 매끄럽게 변환되죠 Markdown 앱을 둘러보면서 새로운 기능을 알아보겠습니다
UINavigationBar에서 NSToolbar로 컨트롤과 내비게이션이 이동하죠 만약 도구모음을 생성하지 않았다면 자동으로 만듭니다 Catalyst에서 전용 NSToolbar를 관리한다면 우리는 개입하지 않죠
중앙 항목 컨트롤은 NSToolbarItems로 바뀌었습니다
문서 기반의 앱이라면 창의 제목에 문서 이름을 표시하며 접근성 시스템 설정에서 창 제목 아이콘을 보이게 하면 파일의 프락시 아이콘도 함께 나타나는데 이는 Mac에서 기대하는 인터페이스와 동일하죠
만약 내비게이션 컨트롤러를 사용하신다면 뒤로가기 버튼과 다른 탐색용 컨트롤이 도구모음 안에 있습니다 추가로 문서 위주의 메뉴 항목이 파일 메뉴에 생성되는데 복사하기, 이동하기, 이름 바꾸기 내보내기가 있죠
메뉴 항목을 사용하려면 리스폰더 체인의 일부 오브젝트가 UIResponder의 복사하기, 이동하기 이름 바꾸기, 내보내기 함수를 오버라이드 하는지 확인하세요
여러분의 앱에 파일 메뉴 항목이 필요 없다면 UIMenuBuilder에서 삭제하십시오 대리자에 buildMenu 메서드를 적용하여 앱 메뉴를 제어하세요
문서 메뉴 항목에 .document라는 UIMenuIdentifier 값이 있죠
여러분의 앱에 검색창이 있다면 역시 자동으로 NSToolbar에 속하며 처음에는 검색 버튼 모양이지만 클릭하면 바로 확장됩니다 이 기능의 UISearchTextField는 NSToolbarItem 안에 속해 있으며 커스텀 뷰에서도 사용할 수 있죠 추천 검색어 메뉴와 검색 범위 바도 네이티브 AppKit 컨트롤로 변환됩니다
데스크톱 수준의 iPad 기능을 적용하여 무료로 이용할 수 있는 새로운 Mac 기능과 더불어 Catalyst 전용 API도 여러 개 추가하여 멀티 창과 도구모음의 동작을 개선했죠 한 번 더 Markdown 앱을 둘러보면서 옛 API와 새 API를 조합하여 Mac 전용 기능을 추가하겠습니다 현재 제공되는 Mac Catalyst API 중에서 우리 앱을 개선할 수 있는 일부 API를 선택했죠
Mac 이디엄을 채택하여 네이티브 컨트롤과 자동 NSToolbar를 적용했습니다 커스텀 포인터를 추가하여 커스텀 분할 화면의 중간에 있는 슬라이더 핸들에 마우스를 가져가면 수평의 양쪽 화살표로 바뀌게 해서 분할 공간을 조절할 수 있음을 나타내도록 했죠
인쇄 지원을 위해 UIApplicationSupports PrintCommand plist 키를 추가했죠
여러분의 앱에 모든 기능을 추가하려고 하지 마십시오 여러분이 만드는 앱의 유형을 생각해 보고 어떤 기능이 가장 유용할지 결정하세요 Mac과 Mac Catalyst의 사용자 인터페이스 지침서를 참고하거나 다른 앱에서 영감을 얻으십시오
이 기능들을 적용하면 여러분의 앱은 아주 멋질 겁니다 이제 새로운 Mac Catalyst API로 더 많은 걸 할 수 있죠 앱 창의 프레임과 컨트롤을 커스텀 설정하는 옵션을 추가하여 NSToolbar 내의 UIView 콘텐츠를 보여 줄 수 있고 도구모음 항목에서 팝오버를 보여 줄 수 있습니다 새로운 API를 사용하여 Mac에서의 앱을 더 개선하기 위해 창부터 시작하죠
Catalyst 앱은 UIWindowScene API로 멀티 창을 지원합니다 그리고 macOS Ventura에 앱 창을 더욱 커스텀화하는 API를 추가했죠 창에 있는 신호등 버튼의 스타일을 설정할 수 있고 프로그램적으로 창의 크기와 위치를 바꿀 수 있으며 특정 창의 전체 화면 기능을 비활성화할 수 있습니다
이런 도구를 통해 Markdown 앱에 기능을 추가하여 Markdown 구문에 관한 보조 패널을 만들었죠 이 패널은 지오메트리 요청 API로 더 작게 만들었고 최소화 및 전체 화면 버튼이 비활성화되어 있죠
신을 생성할 때 Scene 대리자의 scene willConnectTo session으로 원하는 프레임을 만듭니다 effectiveGeometry에서 현재 프레임을 시작하면 좋죠 신을 생성하기 전에 CGRectNull에서 초기화하며 초기 신 생성 때 어느 값을 무시할지 알 수 있습니다 저는 크기를 조정하고 신에 새로운 프레임을 적용했는데 UIWindowScene.macGeometry Preferences 오브젝트를 생성하여 프레임을 systemFrame에 통과시켰죠
scene.requestGeometryUpdate() 메서드로 업데이트를 제출합니다 이건 요청이어서 시스템이 새 지오메트리를 거부할 권리가 있는데 그때 에러 처리 콜백을 호출하여 상세 정보를 제공하죠 이 화면처럼 willConnectToSession 메서드에서 처리하면 요청이 앱의 첫 실행 때 적용되지만 이후 실행 때 시스템에서 수행하는 상태 복원으로 대체될 수 있습니다
작은 도움말 패널이어서 최소화 버튼을 비활성화했는데 windowScene.windowingBehaviors 오브젝트로 처리했죠 창이 전체 화면이 되는 기능은 sizeRestrictions 속성으로 비활성화했습니다
Markdown 힌트 창이 나타날 때는 우리가 요청한 크기로 나타납니다 노란색 최소화와 녹색 전체 화면 버튼이 비활성화되어 빨간색 닫기 버튼만 남았죠
이 옵션은 신을 생성할 때만 사용할 수 있는 게 아닙니다 신의 어떤 순간에도 읽기 전용의 resolvedGeometry에서 현재 프레임을 확인할 수 있으며 원하는 설정으로 바꿔서 새로운 지오메트리 업데이트를 요청할 수 있죠 이 예시는 창의 시작점을 수정하여 크기를 유지하는 방법입니다
지오메트리와 관련하여 두 가지 사항을 유념하십시오 먼저 Mac 데스크톱에서는 systemFrame이 창의 프레임을 결정하므로 systemFrame 속성에서 1포인트의 크기는 AppKit에서도 1포인트 크기입니다 만약 앱이 Mac에 최적화되어 있다면 UI 요소와 같은 크기죠 하지만 앱이 iPad의 크기에 맞춰져 있다면 크기가 77% 비율로 차이가 날 겁니다 둘째, 좌표 공간의 기준점은 주 디스플레이의 왼쪽 위의 구석이죠 디스플레이가 여러 개면 시스템 디스플레이 설정에서 메뉴 바가 나타나는 쪽이 주 디스플레이입니다
새로운 Mac Catalyst API로 3개의 창 제어 버튼을 각각 설정할 수 있죠 UIWindowScene의 오브젝트인 windowingBehaviors는 closable과 miniaturizable 속성이 있습니다 각각 창의 동작을 제어하는 속성이며 노란색과 빨간색 버튼을 활성화하거나 비활성화할 수 있죠 초록색 창 버튼은 데스크톱에 창 크기를 맞추거나 창을 전체 화면으로 만들 수 있습니다 sizeRestrictions의 속성인 allowsFullscreen으로 전체 화면을 비활성화하거나 크기 조절 기능을 비활성화하는 방법으로 sizeRestrictions의 최솟값과 최댓값을 같은 크기로 설정하세요 두 가지를 모두 적용하면 초록색 버튼도 비활성화됩니다
현재 신이 전체 화면인지 확인하려면 새로운 isFullScreen 속성을 사용하세요 이제 Mac 도구모음의 개선 사항을 알아보겠습니다 도구모음을 커스텀화할 수 있도록 새로운 선택지를 추가했는데 UINavigationBar의 자동 변환을 이용해도 되고 전용 NSToolbar를 앱 코드에서 관리해도 됩니다
Mac Catalyst의 새 기능으로 UIViews를 NSToolbar의 항목으로 추가할 수 있게 됐죠 우리 앱의 커스텀 UIView를 설계했는데 현재 단어 수를 나타냅니다 클릭하면 팝오버가 나타나는데 단락 수, 섹션 수 읽는 시간, 번역 등 새로운 정보를 볼 수 있죠 데스크톱 수준의 iPad API를 사용하고 있어서 UIBarButton의 customView 속성이 자동으로 래핑 되어 도구모음에 추가돼 있습니다 하지만 NSToolbar를 독립적으로 관리한다면 새로운 NSToolbarItem의 서브 클래스인 NSUIViewToolbarItem을 추가했죠 NSUIViewToolbarItem을 다른 NSToolbarItem처럼 사용하여 NSToolbarDelegate의 itemForIdentifier 메서드에서 도구모음 항목을 인스턴스화하세요 이니셜라이저는 UIView를 래핑하여 NSToolbar 안에 삽입합니다
NSToolbar의 도구모음 커스텀 모드에서 독특한 도구모음 인스턴스를 추가할 수 있죠 만약 UINavigationBar에서 자동 NSToolbar 호스팅을 사용하면 시스템에서 자동으로 뷰를 복제해 도구모음을 커스텀화합니다 하지만 직접 NSToolbar를 관리한다면 NSUIViewToolbarItem 인스턴스마다 대리자가 UIView의 독특한 인스턴스를 만들어야 하며 같은 UIView 인스턴스를 재사용할 수 없죠
도구모음에 새 항목을 넣었으니 팝오버 동작을 추가하겠습니다 도구모음 항목의 동작에서 팝오버 뷰 컨트롤러를 생성하고 소스 항목을 도구모음 항목으로 설정하죠 그리고 팝오버를 보여 줍니다
팝오버 코드가 완성됐으니 도구모음 항목을 클릭하면 해당 항목에서 팝오버 창이 생성되어 추가 정보를 보여 주죠
Mac Catalyst의 다른 컨트롤처럼 UINavigationBar의 preferredBehavioralStyle에서 내비게이션 바의 자동 전환을 사용하지 않을 수 있습니다 기본값은 자동이지만 .mac으로 설정하여 변환을 명시적으로 요청할 수도 있고 .pad로 설정하면 내비게이션 바가 자동으로 변환되지 않죠
이런 기능으로 앱의 도구모음에 새로운 커스텀 설정을 추가할 수 있습니다
새로운 도구로 여러분의 앱을 어떻게 개선할지 빨리 보고 싶군요 iPad 앱이 자동으로 Mac App Store에 등록되어 새로운 사용자에게 선보일 수 있습니다 iPad 앱을 업로드할 때 Mac에서 직접 실행해 보시거나 한 단계 높여 Mac Catalyst 앱으로 만들어 iOS 16과 macOS Ventura의 새로운 API를 사용하고 최고 수준으로 만드십시오
여러분의 앱을 Mac으로 가져오는 건 쉽습니다 여러분의 노력이 담긴 작품을 소개하고 싶고 차기작도 기대하고 있죠 감사합니다
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.