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 전부 빌드 가능함