iPad Apps for Mac - kirseia/study GitHub Wiki
iPad Apps for Mac
AppKit Apps(Mac) vs UIKit Apps(iOS)
- 거의 똑같음. Twin 구조
어떤 아이패드 앱을 Mac에서 돌릴 것인가
- 모바일 피쳐 (Arkit나 NFC 등등?)이 포함된 앱은 고려 대상 아님
- iPhone only 앱도 당연히 아님
목표
- 쉽게 시작할 수 있음
- 하나의 프로젝트, 하나의 소스, 하나의 타겟
- iPad App on the inside, Mac app on the outside
무료로 시작 할 수 있는 것(?) - iPad앱을 맥에서 돌릴 때
- 메뉴 바를 바로 사용 할 수 있음
- 메뉴 바를 통해 'iPad'에서 실행 가능
- Dark mode
- scroll bars
- settings - iPad setting 에서 보던 것을 Mac preference 에서 볼 수 있게 됨
- 터치바
- Open and save panels
- Control 영역
- Text 크기는 자동으로 scale 됨
- Copy and paste
- drag and drop
- 프린트
- 멀티 윈도우
- application 생명주기
API 다른 점
- 거의 동일 함
- 불가능 한 것
- deprecated frameworks 는 사용 안됨 - OpenGLES, GLKit, AssetsLibrary 등등
- iOS에서만 되는 framework - ClassKit, Healthkit, HomeKit
- hardware 특정한 framework - ARKit, CarPlay, VisionKit
- 다른 framework - Core Location, Core Motion, Core Telephony, Core NFC, Core Bluetooth, AVFoudation, AudioToolbox
분기처리
@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0)
이 아래처럼 바뀌었음
@available(macOS 10.10, UIKitForMac 13.0) @unavailable(iOS, watchOS, tvOS)
@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0) @unavailable(UIKitForMac)
따라서 아래처럼 #if 이용해서 분기처리해줘야 함
```swift
#if !targetEnvironment(UIKitForMac)
// iOS-specific code
let recognizer = MyGestureRecognizer(target: self, action: #selector(myAction(recognizer:)))
recognizer.delegate = self
view.addGestureRecognizer(recognizer)
#endif
#if !TARGET_OS_UIKITFORMAC
// iOS-specific code
id recognizer = [[MyGestureRecognizer alloc] initWithTarget:self action:@selector(myAction:)];
recognizer.delegate = self;
[view addGestureRecognizer:recognizer];
#endif
Taking iPad Apps for Mac to the Next Level
더 잘 만들기
- 다양한 화면 크기를 지원하기
- 키보드 지원을 구현하기 - UIKeyCommand 를 사용하기
- 드래그 앤 드롭 지원 - UIKit에 있는 UIDragInteraction, UIDropInteraction 을 구현하기
- 최신 API 사용하기 - Not OpenGL ES, use Metal
- iOS13 피쳐 지원하기 - 멀티 윈도우, 다크 모드, 심볼 이미지 등
- UIHoverGestureRecognizer 구현하기 (마우스 오버 했을 때 동작 처리)
- 터치바 처리하기
네비게이션
- sidebar를 사용
- tab bars 사용은 다시 생각
- 맥 툴바를 사용하기
레이아웃
- 큰 화면에서 잘 보이게 잘 구현하기
- layout flexible 해야 함
타이포그래피
- 맥에서 13포인트, Pad에서는 17포인트
- UIKit 은 77% 로 스케일 됨
입력
- iPad는 멀티터치에 최적화되어있음
- 맥은 키보드가 항상 있음, 트랙패드와 마우스가 있음
- 접근성도 고려해야 함
앱 생명주기
- iOS App 과 macOS App 생명주기가 다름
배포
- xcode에 mac 빌드도 추가 됨
- 하나의 provisioning profile 로 iOS, iPadOS, macOS 전부 빌드 가능함