introducing ipad apps for mac - apple inc

147
© 2019 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. #WWDC19 Ali Ozer, Cocoa Jake Petroules, Developer Tools Jason Beaver, Cocoa Introducing iPad Apps for Mac

Upload: others

Post on 17-Jan-2022

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introducing iPad Apps for Mac - Apple Inc

© 2019 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

#WWDC19

Ali Ozer, Cocoa Jake Petroules, Developer Tools Jason Beaver, Cocoa

•Introducing iPad Apps for Mac

Page 2: Introducing iPad Apps for Mac - Apple Inc

Agenda

•What it is •Getting started •Things you get for free •API differences

Page 3: Introducing iPad Apps for Mac - Apple Inc

Rebuild and run iPad Apps natively on the Mac

Page 4: Introducing iPad Apps for Mac - Apple Inc
Page 5: Introducing iPad Apps for Mac - Apple Inc

macOS App Web Games

AppKit WebKit Metal

Page 6: Introducing iPad Apps for Mac - Apple Inc

iOS App

UIKit

macOS App

AppKit

Web

WebKit

Games

Metal

Page 7: Introducing iPad Apps for Mac - Apple Inc

Leverage our shared technology stack

Page 8: Introducing iPad Apps for Mac - Apple Inc

Leverage our shared technology stack

Integrate iOS frameworks

Page 9: Introducing iPad Apps for Mac - Apple Inc

Leverage our shared technology stack

Integrate iOS frameworks

Enable Xcode to build iPad projects for Mac

Page 10: Introducing iPad Apps for Mac - Apple Inc

macOS Apps

Page 11: Introducing iPad Apps for Mac - Apple Inc

UI frameworks

macOS Apps

AppKit

SceneKitWebKit

Page 12: Introducing iPad Apps for Mac - Apple Inc

UI frameworks

Low level frameworks

macOS Apps

CoreGraphics

Foundation

libSystem

AppKit

SceneKitWebKit

Page 13: Introducing iPad Apps for Mac - Apple Inc

UI frameworks

Low level frameworks

macOS Apps

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

AppKit

SceneKitWebKit

Databases

Page 14: Introducing iPad Apps for Mac - Apple Inc

UI frameworks

Low level frameworks

macOS Apps

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

AppKit

SceneKitWebKit

Services

Databases

Page 15: Introducing iPad Apps for Mac - Apple Inc

UI frameworks

Low level frameworks

macOS Apps

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

AppKit

Darwin

SceneKitWebKit

Kernel

Services

Databases

Page 16: Introducing iPad Apps for Mac - Apple Inc

UI frameworks

Low level frameworks

iOS AppsmacOS Apps

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

AppKit

Darwin

SceneKitWebKit

Kernel

Services

Databases

Page 17: Introducing iPad Apps for Mac - Apple Inc

UI frameworks

Low level frameworks

iOS AppsmacOS Apps

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UserNotifications

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UIKitAppKit

Darwin

SceneKitWebKit WebKit SceneKit ARKit

DarwinKernel

Services

Databases

Page 18: Introducing iPad Apps for Mac - Apple Inc

iOS AppsmacOS Apps

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UserNotifications

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UIKitAppKit

Darwin

SceneKitWebKit WebKit SceneKit ARKit

Page 19: Introducing iPad Apps for Mac - Apple Inc

iOS Simulator

iOS AppsmacOS Apps

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UserNotifications

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UIKitAppKit

Darwin

SceneKitWebKit WebKit SceneKit ARKit

Page 20: Introducing iPad Apps for Mac - Apple Inc

iOS AppsmacOS Apps

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UserNotifications

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UIKitAppKit

Darwin

SceneKitWebKit WebKit SceneKit ARKit

Page 21: Introducing iPad Apps for Mac - Apple Inc

UIKit AppsAppKit Apps

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UserNotifications

Darwin

ARKit

AppKit

SceneKitWebKit

UIKit

SceneKitWebKit

Page 22: Introducing iPad Apps for Mac - Apple Inc

UIKit AppsAppKit Apps

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UserNotifications

Darwin

AppKit

SceneKitWebKit

UIKit

SceneKitWebKit

Page 23: Introducing iPad Apps for Mac - Apple Inc

UIKit AppsAppKit Apps

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UserNotifications

Darwin

AppKit

SceneKitWebKit

UIKit

SceneKitWebKit

Page 24: Introducing iPad Apps for Mac - Apple Inc

UIKit AppsAppKit Apps

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UserNotifications

Darwin

AppKit

SceneKitWebKit

UIKit

SceneKitWebKit

Page 25: Introducing iPad Apps for Mac - Apple Inc

UIKit AppsAppKit Apps

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UserNotifications

Darwin

AppKit

SceneKitWebKit

UIKit

SceneKitWebKit

Page 26: Introducing iPad Apps for Mac - Apple Inc

UIKit AppsAppKit Apps

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UserNotifications

Darwin

AppKit

SceneKitWebKit

UIKit

SceneKitWebKit

Page 27: Introducing iPad Apps for Mac - Apple Inc

“Twin” Frameworks

UIKitAppKit

SceneKitWebKit WebKit SceneKitMapKit RealityKit MapKit RealityKitPhotosUI PhotosUI… …

Page 28: Introducing iPad Apps for Mac - Apple Inc

“Twin” Frameworks

UIKitAppKit

SceneKitWebKit WebKit SceneKitMapKit RealityKit MapKit RealityKitPhotosUI PhotosUI… …

import Cocoa open class MKMapView : NSView, NSCoding { ... }

Page 29: Introducing iPad Apps for Mac - Apple Inc

“Twin” Frameworks

UIKitAppKit

SceneKitWebKit WebKit SceneKitMapKit RealityKit MapKit RealityKitPhotosUI PhotosUI… …

import Cocoa open class MKMapView : NSView, NSCoding { ... }

import UIKit

open class MKMapView : UIView, NSCoding { ... }

Page 30: Introducing iPad Apps for Mac - Apple Inc

“Twin” Frameworks

UIKitAppKit

SceneKitWebKit WebKit SceneKitMapKit RealityKit MapKit RealityKitPhotosUI PhotosUI… …

import Cocoa open class MKMapView : NSView, NSCoding { ... }

import UIKit

open class MKMapView : UIView, NSCoding { ... }

Page 31: Introducing iPad Apps for Mac - Apple Inc

“Twin” Frameworks

UIKitAppKit

SceneKitWebKit WebKit SceneKitMapKit RealityKit MapKit RealityKitPhotosUI PhotosUI… …

import Cocoa open class MKMapView : NSView, NSCoding { ... }

import UIKit

open class MKMapView : UIView, NSCoding { ... }

Page 32: Introducing iPad Apps for Mac - Apple Inc

UIKit AppsAppKit Apps

CoreGraphics

Foundation

libSystem

Photos, Contacts, Prefs, …

Clipboard, File coordination, …

UserNotifications

Darwin

AppKit

SceneKitWebKit

UIKit

SceneKitWebKit

Page 33: Introducing iPad Apps for Mac - Apple Inc
Page 34: Introducing iPad Apps for Mac - Apple Inc

When to Consider iPad Apps for Mac

Page 35: Introducing iPad Apps for Mac - Apple Inc

When to Consider iPad Apps for Mac

Make iPad app available on the Mac

Page 36: Introducing iPad Apps for Mac - Apple Inc

When to Consider iPad Apps for Mac

Make iPad app available on the Mac

Bring older Mac app to feature parity with iPad app

Page 37: Introducing iPad Apps for Mac - Apple Inc

When to Consider iPad Apps for Mac

Make iPad app available on the Mac

Bring older Mac app to feature parity with iPad app

Replace Mac app built on non-native technology

Page 38: Introducing iPad Apps for Mac - Apple Inc

When to Consider iPad Apps for Mac

Make iPad app available on the Mac

Bring older Mac app to feature parity with iPad app

Replace Mac app built on non-native technology

Page 39: Introducing iPad Apps for Mac - Apple Inc

Not All Apps Are Candidates

iPhone-only apps

Page 40: Introducing iPad Apps for Mac - Apple Inc

Not All Apps Are Candidates

iPhone-only apps

Apps that are built around mobile features

Page 41: Introducing iPad Apps for Mac - Apple Inc

Goals

Easy to get started

Page 42: Introducing iPad Apps for Mac - Apple Inc

Goals

Easy to get started

One project, one source base, one target

Page 43: Introducing iPad Apps for Mac - Apple Inc

Goals

Easy to get started

One project, one source base, one target

iPad app on the inside

Page 44: Introducing iPad Apps for Mac - Apple Inc

Goals

Easy to get started

One project, one source base, one target

iPad app on the inside

Mac app on the outside

Page 45: Introducing iPad Apps for Mac - Apple Inc

Jake Petroules

•Getting Started

Page 46: Introducing iPad Apps for Mac - Apple Inc

Ali Ozer

•Things You Get For Free

Page 47: Introducing iPad Apps for Mac - Apple Inc

Default Menu Bar

Page 48: Introducing iPad Apps for Mac - Apple Inc
Page 49: Introducing iPad Apps for Mac - Apple Inc
Page 50: Introducing iPad Apps for Mac - Apple Inc

Window Management

Page 51: Introducing iPad Apps for Mac - Apple Inc

Window Management

Page 52: Introducing iPad Apps for Mac - Apple Inc
Page 53: Introducing iPad Apps for Mac - Apple Inc
Page 54: Introducing iPad Apps for Mac - Apple Inc

Dark Mode

Page 55: Introducing iPad Apps for Mac - Apple Inc

Dark Mode

Page 56: Introducing iPad Apps for Mac - Apple Inc

Scroll Bars

Page 57: Introducing iPad Apps for Mac - Apple Inc

Scroll Bars

Page 58: Introducing iPad Apps for Mac - Apple Inc

Scroll Bars

Page 59: Introducing iPad Apps for Mac - Apple Inc

Scroll Bars

Page 60: Introducing iPad Apps for Mac - Apple Inc

Scroll Bars

Page 61: Introducing iPad Apps for Mac - Apple Inc

Settings

Page 62: Introducing iPad Apps for Mac - Apple Inc

Settings

Page 63: Introducing iPad Apps for Mac - Apple Inc

Settings

Page 64: Introducing iPad Apps for Mac - Apple Inc

Settings

Page 65: Introducing iPad Apps for Mac - Apple Inc

Settings

Page 66: Introducing iPad Apps for Mac - Apple Inc

Settings

Page 67: Introducing iPad Apps for Mac - Apple Inc

Settings

Page 68: Introducing iPad Apps for Mac - Apple Inc

Touch Bar

Page 69: Introducing iPad Apps for Mac - Apple Inc

Touch Bar

Page 70: Introducing iPad Apps for Mac - Apple Inc

Touch Bar

Page 71: Introducing iPad Apps for Mac - Apple Inc

Open and Save Panels

Page 72: Introducing iPad Apps for Mac - Apple Inc

Open and Save Panels

Page 73: Introducing iPad Apps for Mac - Apple Inc

Custom Views

Page 74: Introducing iPad Apps for Mac - Apple Inc

Custom Views

Page 75: Introducing iPad Apps for Mac - Apple Inc

Controls

Page 76: Introducing iPad Apps for Mac - Apple Inc

!47

Page 77: Introducing iPad Apps for Mac - Apple Inc

!48

Page 78: Introducing iPad Apps for Mac - Apple Inc

!49

Page 79: Introducing iPad Apps for Mac - Apple Inc

!50

Page 80: Introducing iPad Apps for Mac - Apple Inc

Text Sizes

Page 81: Introducing iPad Apps for Mac - Apple Inc

Text Sizes

17 ptiOS =

Page 82: Introducing iPad Apps for Mac - Apple Inc

Text Sizes

13 pt17 pt

macOS =iOS =

Page 83: Introducing iPad Apps for Mac - Apple Inc

Text Sizes

13 pt17 pt

Page 84: Introducing iPad Apps for Mac - Apple Inc

Text Sizes

13 pt17 ptScaled

Page 85: Introducing iPad Apps for Mac - Apple Inc

More Things You Get For Free

Copy and paste

Drag and drop

Printing

Multiple windows

Application lifecycle

Page 86: Introducing iPad Apps for Mac - Apple Inc

Features to Adopt

Mac icon

Custom menus

Toolbars

Touch Bar

Hover events

Help

And more!

Page 87: Introducing iPad Apps for Mac - Apple Inc

Jason Beaver

•API Differences

Page 88: Introducing iPad Apps for Mac - Apple Inc

Overview of API Differences

Page 89: Introducing iPad Apps for Mac - Apple Inc

Overview of API Differences

APIs that have identical behavior

Page 90: Introducing iPad Apps for Mac - Apple Inc

Overview of API Differences

APIs that have identical behavior

APIs that are mapped to macOS functionality

Page 91: Introducing iPad Apps for Mac - Apple Inc

Overview of API Differences

APIs that have identical behavior

APIs that are mapped to macOS functionality

APIs that are unavailable

Page 92: Introducing iPad Apps for Mac - Apple Inc

•Mouse and Touch Events

Page 93: Introducing iPad Apps for Mac - Apple Inc

Mouse and Touch Events

Page 94: Introducing iPad Apps for Mac - Apple Inc

Mouse and Touch Events

Hover

Page 95: Introducing iPad Apps for Mac - Apple Inc

Mouse and Touch Events

Hover

Single-finger touch tracking

Page 96: Introducing iPad Apps for Mac - Apple Inc

Mouse and Touch Events

Hover

Single-finger touch tracking

Page 97: Introducing iPad Apps for Mac - Apple Inc

Mouse and Touch Events

Hover

Single-finger touch tracking

Standard gestures

Page 98: Introducing iPad Apps for Mac - Apple Inc

Mouse and Touch Events

Hover

Single-finger touch tracking

Standard gestures

Page 99: Introducing iPad Apps for Mac - Apple Inc

Mouse and Touch Events

Hover

Single-finger touch tracking

Standard gestures

Page 100: Introducing iPad Apps for Mac - Apple Inc

Mouse and Touch Events

Hover

Single-finger touch tracking

Standard gestures

Page 101: Introducing iPad Apps for Mac - Apple Inc

Mouse and Touch Events

Hover

Single-finger touch tracking

Standard gestures

Custom multi-touch code

Page 102: Introducing iPad Apps for Mac - Apple Inc

Unavailable APIs

Page 103: Introducing iPad Apps for Mac - Apple Inc

Unavailable APIs

Deprecated frameworks

Page 104: Introducing iPad Apps for Mac - Apple Inc

Unavailable APIs

Deprecated frameworks

iOS-specific frameworks

Page 105: Introducing iPad Apps for Mac - Apple Inc

Unavailable APIs

Deprecated frameworks

iOS-specific frameworks

Hardware-specific frameworks

Page 106: Introducing iPad Apps for Mac - Apple Inc

Unavailable APIs

Deprecated frameworks

iOS-specific frameworks

Hardware-specific frameworks

Framework differences

Page 107: Introducing iPad Apps for Mac - Apple Inc

Deprecated Frameworks

Page 108: Introducing iPad Apps for Mac - Apple Inc

Deprecated Frameworks

Deprecated Framework Replacement Framework

AddressBook Contacts

AddressBookUI ContactsUI

AssetsLibrary Photos

OpenGLES Metal

GLKit MetalKit

Page 109: Introducing iPad Apps for Mac - Apple Inc

iOS Specific Frameworks

Page 110: Introducing iPad Apps for Mac - Apple Inc

iOS Specific Frameworks

ClassKit

HealthKit

HomeKit

Page 111: Introducing iPad Apps for Mac - Apple Inc

Hardware Specific Frameworks

Page 112: Introducing iPad Apps for Mac - Apple Inc

Hardware Specific Frameworks

ARKit

CarPlay

VisionKit

Page 113: Introducing iPad Apps for Mac - Apple Inc

Framework Differences

Page 114: Introducing iPad Apps for Mac - Apple Inc

Framework Differences

Core Location

Core Motion

Core Telephony

Core NFC

Core Bluetooth

Page 115: Introducing iPad Apps for Mac - Apple Inc

Framework Differences

Page 116: Introducing iPad Apps for Mac - Apple Inc

Framework Differences

Media Player

AVFoundation

AudioToolbox

Page 117: Introducing iPad Apps for Mac - Apple Inc

Framework Differences

Page 118: Introducing iPad Apps for Mac - Apple Inc

Framework Differences

Metal

UIKit

SafariServices

QuickLook

ReplayKit

StoreKit

SystemConfiguration

PassKit

Page 119: Introducing iPad Apps for Mac - Apple Inc

•API Availability

Page 120: Introducing iPad Apps for Mac - Apple Inc

API Availability

// Swift @available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0)

// Objective-C API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))

Page 121: Introducing iPad Apps for Mac - Apple Inc

API Availability

// Swift @available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0)

// Objective-C API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))

Page 122: Introducing iPad Apps for Mac - Apple Inc

API Availability

// Swift @available(macOS 10.10, UIKitForMac 13.0) @unavailable(iOS, watchOS, tvOS)

// Objective-C API_AVAILABLE(macos(10.10), uikitformac(13.0)) API_UNAVAILABLE(ios, watchos, tvos)

Page 123: Introducing iPad Apps for Mac - Apple Inc

API Availability

// Swift @available(macOS 10.10, UIKitForMac 13.0) @unavailable(iOS, watchOS, tvOS)

// Objective-C API_AVAILABLE(macos(10.10), uikitformac(13.0)) API_UNAVAILABLE(ios, watchos, tvos)

Page 124: Introducing iPad Apps for Mac - Apple Inc

API Availability

// Swift @available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0) @unavailable(UIKitForMac)

// Objective-C API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(uikitformac)

Page 125: Introducing iPad Apps for Mac - Apple Inc

API Availability

// Swift @available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0) @unavailable(UIKitForMac)

// Objective-C API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(uikitformac)

Page 126: Introducing iPad Apps for Mac - Apple Inc

•Conditionalizing Code

Page 127: Introducing iPad Apps for Mac - Apple Inc

Conditionalizing Code

// iOS-specific code let recognizer = MyGestureRecognizer(target: self, action: #selector(myAction(recognizer:))) recognizer.delegate = self view.addGestureRecognizer(recognizer)

Page 128: Introducing iPad Apps for Mac - Apple Inc

Conditionalizing Code

#if !targetEnvironment(UIKitForMac) // iOS-specific code let recognizer = MyGestureRecognizer(target: self, action: #selector(myAction(recognizer:))) recognizer.delegate = self view.addGestureRecognizer(recognizer) #endif

Page 129: Introducing iPad Apps for Mac - Apple Inc

Conditionalizing Code

#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

Page 130: Introducing iPad Apps for Mac - Apple Inc

•Data Protection

Page 131: Introducing iPad Apps for Mac - Apple Inc

Data Protection

NSData.WritingOptions.noFileProtection .completeFileProtection .completeFileProtectionUnlessOpen .completeFileProtectionUntilFirstUserAuthentication

Page 132: Introducing iPad Apps for Mac - Apple Inc

Data Protection

Page 133: Introducing iPad Apps for Mac - Apple Inc

try data.write(to: fileURL, options: .completeFileProtection)

Data Protection

Page 134: Introducing iPad Apps for Mac - Apple Inc

try data.write(to: fileURL, options: .completeFileProtection)

Data Protection

let key = SymmetricKey(size: .bits256) let sealed = try AES.GCM.seal(data, using: key)

Page 135: Introducing iPad Apps for Mac - Apple Inc

•Bundle Format

Page 136: Introducing iPad Apps for Mac - Apple Inc

Bundle Format

Page 137: Introducing iPad Apps for Mac - Apple Inc

Bundle Format

ChocolateChip.app

ChocolateChip

en.lproj

Info.plist

MyImages

Image1.png

Image2.png

Localizable.strings

MainWindow.nib

Page 138: Introducing iPad Apps for Mac - Apple Inc

Bundle Format

ChocolateChip.app

Contents

Resources

en.lproj

MyImages

Image1.png

Image2.png

Localizable.strings

MainWindow.nib

Info.plist

ChocolateChip

MacOS

ChocolateChip.app

ChocolateChip

en.lproj

Info.plist

MyImages

Image1.png

Image2.png

Localizable.strings

MainWindow.nib

Page 139: Introducing iPad Apps for Mac - Apple Inc

•Extensions

Page 140: Introducing iPad Apps for Mac - Apple Inc

Available Extensions

Page 141: Introducing iPad Apps for Mac - Apple Inc

Available Extensions

Action

Audio Unit

Broadcast UI

Broadcast Upload

Notification Service

Share

Spotlight Index

Network

Page 142: Introducing iPad Apps for Mac - Apple Inc

Available Extensions

Action

Audio Unit

Broadcast UI

Broadcast Upload

Notification Service

Share

Spotlight Index

Network

Page 143: Introducing iPad Apps for Mac - Apple Inc

Unavailable Extensions

Page 144: Introducing iPad Apps for Mac - Apple Inc

Unavailable Extensions

Content Blocker

File Provider

File Provider UI

Intents

Intents UI

QuickLook Preview

Unwanted Communication

AutoFill Credential Provider

Call Directory

Custom Keyboard

iMessage

Thumbnail

Message Filter

Notification Content

Photo Editing

Sticker Pack

Today

Page 145: Introducing iPad Apps for Mac - Apple Inc

•Demo

Page 146: Introducing iPad Apps for Mac - Apple Inc

More Informationdeveloper.apple.com/wwdc19/205

Taking iPad Apps for Mac to the Next Level Thursday, 5:00

What's New in iOS and macOS Design Tuesday, 5:00

Font Management and Text Scaling Thursday, 9:00

Page 147: Introducing iPad Apps for Mac - Apple Inc