Touch on Mac für Entwickler: 36 Punkte, Recognizer, Sidecar

Was ändert Touch auf dem Mac für Mac-Entwickler? Bestehende Apps funktionieren, weil „macOS automatically translates touches into clicks“ (macOS übersetzt Berührungen automatisch in Klicks), und drei Tech Talks liefern die Regeln: Gesture Recognizer sind „the only way to get direct touches on macOS“ (der einzige Weg zu direkten Berührungen unter macOS), Standard-Bedienelemente sind touch-nativ, das Touch-Ziel misst 36 Punkte, Hover hat keine Entsprechung, und ein iPad über Sidecar dient als Testgerät.1234 Die Touch-APIs stecken bereits im macOS-27.0-SDK; die Schalter für Systemgesten und ein unter macOS verfügbares ActivityKit fehlen in den beiden SDKs, die ich geprüft habe, und die Xcode-27.3-Beta ist „Coming soon“.25678

Kurzfassung: Apple hat Touch auf dem MacBook Pro with PROLED XDR Display angekündigt (14,2 und 16,3 Zoll, Vorbestellung ab 28. Oktober, im Handel ab 6. November) und Entwicklern am 28. Oktober in drei Talks erklärt, wie sie es übernehmen.129 Nutzt Ihre App Standard-Bedienelemente von AppKit, SwiftUI-Gesten oder Mac Catalyst, sagt der Talk, dass sie „just work“ (einfach funktionieren), und das Audit weiter unten (Trefferflächen, Hover) gilt trotzdem. Eigener mouseDown(with:)-Code wird emuliert, bis er auf Control-Events oder Gesture Recognizer umgestellt ist, und ein UI-Framework, das nicht von Apple stammt, erhält eine generische Emulationsschicht, die NSIsTouchNative abschaltet, sobald die App Touch selbst verarbeitet.36 Um in AppKit eine direkte Berührung zu empfangen, brauchen Sie einen Gesture Recognizer, denn Berührungen erreichen weder die Responder Chain noch Event-Monitore.36 Der Design-Talk legt das Touch-Ziel auf 36 Punkte fest, dieselbe physische Größe wie 44 Punkte unter iOS, und sagt, dass macOS mit und ohne Touch gleich aussieht.4 Getestet wird mit einem iPad über Sidecar; die neuesten Bausteine sind macOS 27.2 und der Xcode 27.2 RC, eine Konfiguration, die ich nicht ausgeführt habe.311 Die Touch-APIs stecken bereits im macOS-27.0-SDK. Der Schalter für Systemgesten und ein unter macOS verfügbares ActivityKit fehlen in den beiden SDKs, die ich geprüft habe, und die Xcode-27.3-Beta ist „Coming soon“.2378

Was Apple veröffentlicht hat und was nicht

Apples Ankündigung war eine Pressemitteilung, keine Keynote; der Live-Beitrag dokumentiert den Tag. Der Entwicklerteil der Mitteilung besteht aus drei Sätzen im Abschnitt „Touch Arrives on Mac“: „Apple apps are optimized for the new MacBook Pro, and many existing apps work with Touch right away, because macOS automatically translates touches into clicks“, dann „Updated system gesture APIs also enable developers to create intuitive experiences designed specifically for Touch“ (aktualisierte APIs für Systemgesten ermöglichen Entwicklern außerdem, intuitive, eigens für Touch gestaltete Erlebnisse zu schaffen) und der Hinweis, dass „app developers can test how Touch performs in their iOS and iPadOS apps directly on the MacBook Pro display“ (Entwickler können direkt auf dem Display des MacBook Pro testen, wie sich Touch in ihren iOS- und iPadOS-Apps verhält).1 Der Abschnitt zu macOS sagt, der Laptop „comes to life with macOS 27“, und nennt „Touch built for macOS 27“; ein Point-Release nennt er nicht.1

Die Entwicklerseite war spätestens um 11:47 a.m. PT online: ein News-Beitrag, „Say hello to Touch on Mac“, und eine Landingpage, „Get ready for Touch on Mac“, mit drei Tech Talks, Group Labs am 18. und 19. November und drei Kacheln mit dem Vermerk „Coming soon“: „Xcode 27.3 beta“, „Documentation resources“ und „Design resources“.2 Das HTML der Seite enthält die Links, die Apple an diese Kacheln hängen will, in Kommentaren, die zur Reaktivierung vorgemerkt sind, sobald die Ressourcen online gehen: einen AppKit-Artikel, „Adopting gesture recognizers in your app“, der heute 404 zurückgibt, das bestehende Beispiel für Drag and Drop mit File Promises und, unter seinen Links, vier Seiten der Human Interface Guidelines sowie Apple Design Resources; die erfassten HIG-Seiten enthalten keine Hinweise zu Touch auf dem Mac-Display, und das Änderungsprotokoll der Live-Activities-Seite endet am 13. Oktober.2710

Die Primärquellen für die Regeln sind also die Talks und eine Technote, die Apple am 8. Juni veröffentlicht hat, „TN3212: Adopting gesture recognizers for Sidecar touch support“, deren Overview sagt: „In macOS 27, AppKit continues to standardize on gesture recognizers as the primary mechanism for input handling“ (in macOS 27 setzt AppKit bei der Eingabeverarbeitung weiter einheitlich auf Gesture Recognizer als primären Mechanismus), und deren Abschnitte „Explore updated APIs in macOS 27“, „Detect touch capability“, „Handle control events“ und „Configure scroll behavior“ die API-Oberfläche beschreiben, die die Talks vom 28. Oktober vorführen.6 Jedes neue Symbol, das die Technote nennt, steht in Apples Dokumentation mit introducedAt macOS 27.0 und ohne Beta-Kennzeichnung, abgerufen am 28. Oktober um 12 Uhr mittags PT, und ist, abgesehen von den beiden Info.plist-Schlüsseln, im macOS-27.0-SDK in Xcode 27.1 (27A9275) deklariert, geprüft in den Headern und Swift-Interfaces auf diesem Mac (Analyse des Autors).7 Für die drei Systemgesten-Symbole, die der Talk nennt, gilt das nicht, und ebenso wenig für ein unter macOS verfügbares ActivityKit; zu beidem weiter unten.

Nichts zu tun, und was Sie dafür bekommen

Die Kompatibilitätsgeschichte ist großzügig. Der AppKit-Talk beginnt damit: „The good news is that we’ve already made touch work great out of the box for all apps. Across our native frameworks, standard components just work with native touch. Existing gestures created in SwiftUI just work“ (0:30), und dasselbe gilt für Mac Catalyst (0:52).3 Für AppKit heißt es: „Standard buttons, controls, tables, collections, split views, tabs, scrolling, and more are all touch native“ (1:10).3

Was nicht nativ ist, wird emuliert: „for existing custom AppKit mouse interactions, or if you use non-Apple UI frameworks, AppKit intelligently emulates the mouse“ (1:17).3 Die Technote schlüsselt die Emulation für Frameworks von Drittanbietern auf: „A tap emulates a mouse-down followed immediately by a mouse-up“, „A touch and immediate pan emulates trackpad scroll events, even if the UI doesn’t respond to them“, „A long press without movement emulates a rightMouseDown(with:) (optionally followed by rightMouseDragged(with:)) with a rightMouseUp(with:) on touch lift“ und „A two-finger pinch or rotation simultaneously emulates both the trackpad magnify and rotate gestures“ (ein Tippen emuliert ein Mouse-down, unmittelbar gefolgt von einem Mouse-up; Berühren mit sofortigem Schwenken emuliert Trackpad-Scroll-Events, auch wenn die UI nicht darauf reagiert; langes Drücken ohne Bewegung emuliert ein rightMouseDown(with:), optional gefolgt von rightMouseDragged(with:), mit einem rightMouseUp(with:) beim Abheben des Fingers; ein Pinch oder eine Drehung mit zwei Fingern emuliert zugleich die Trackpad-Gesten zum Vergrößern und zum Drehen).6 Die Fassung des Talks: „a one-finger scroll with momentum, click, drag with a small hold delay, and even pinch for rotation and magnification“ (11:28).3 Die Emulation gilt pro Fenster und ist generisch, weil „AppKit can’t determine what kind of interactions are allowed at any particular location of your non-Apple UI framework content“ (11:17) (AppKit kann nicht erkennen, welche Interaktionen an einer bestimmten Stelle solcher Inhalte erlaubt sind).3

Wenn Sie native Unterstützung ergänzt haben, schalten Sie die Emulation ab: „add an NSIsTouchNative entry to your Info.plist to let AppKit know you are touch native and no longer need the non-Apple UI toolkit mouse emulations“ (11:47).3 Der Schlüssel ist als macOS 27.0 dokumentiert, und seine Seite sagt: „Most AppKit apps don’t need this key. It’s primarily intended for apps that embed a non-AppKit rendering or input framework and implement their own touch-handling pipeline.“7

Für die Frage, was „nichts zu tun“ optisch bedeutet, zählt die Rahmung des Design-Talks: „macOS on a device that supports touch doesn’t look any different than macOS on a device that doesn’t. The resolution, the size of windows, text and UI controls haven’t changed“ (0:41), und „Touch is a secondary input for macOS, and therefore has little impact on how macOS looks“ (1:06) (Touch ist unter macOS eine sekundäre Eingabe und hat daher wenig Einfluss darauf, wie macOS aussieht).4 Es gibt keinen Touch-Modus und kein kompaktes Layout. Das ist das Gegenteil der Lage beim iPhone Duo, wo das innere Display in beiden Dimensionen reguläre Size Classes meldet.

Gesture Recognizer sind der einzige Weg hinein

Der Satz, der alles Weitere ordnet, fällt bei 3:45 im AppKit-Talk: „In fact, gesture recognizers are the only way to get direct touches on macOS.“3 Davor: „Starting with macOS Golden Gate, gesture recognizers are the preferred approach in AppKit“ (3:33), und „gesture recognizers have become the shared input language across SwiftUI, Mac Catalyst, and now AppKit“ (3:38).3 Die Technote sagt dasselbe aus der anderen Richtung: „AppKit doesn’t deliver Sidecar touch events through the responder chain or through event monitors“, und in einem Hinweis: „Local and global event monitors don’t receive touch events. Touch events don’t go through NSApp or sendEvent(_:).“6

Für eine AppKit-Codebasis hat das drei Folgen.

Erstens: Tracking-Schleifen. Der Engineer im Talk baut ein Verkabelungspuzzle um, das „a custom NSView with a mouseDown(with:) override that uses the standard tracking loop technique“ (3:13) verwendete und nextEvent(matching:) bis zum Loslassen der Maustaste aufrief, und sagt: „Migrate your mouse tracking loops to gesture recognizers“ (3:51).3 Die Migration ist kein Alles oder Nichts: „tracking loops are still supported and can coexist with touch-only gesture recognizers. You may find that adding touch-only gesture recognizers is the fastest and least risky path for a dot release of your app“ (3:58) (Tracking-Schleifen werden weiterhin unterstützt und können neben reinen Touch-Recognizern bestehen; das Hinzufügen reiner Touch-Recognizer kann sich als schnellster und risikoärmster Weg für ein Punkt-Update Ihrer App erweisen).3 Der erste Schritt ist das Refactoring, das der Talk vornimmt, bevor er irgendetwas hinzufügt: „The first step is to refactor my tracking loop into separate start, continue, end, and cancel tracking functions“ (4:11), damit Mausschleife und Touch-Recognizer sie gemeinsam nutzen können.3 Apples Listing, wörtlich:

// Refactored tracking functions
func startTracking(at viewLocation: NSPoint) { /* ... */ }

func continueTracking(at viewLocation: NSPoint) { /* ... */ }

func endTracking(at viewLocation: NSPoint) { /* ... */ }

func cancelTracking() { /* ... */ }

Das Rezept für einen reinen Touch-Recognizer besteht dann aus zwei Property-Zuweisungen: „set the buttonMask to 0 and allowedTouchTypes to .direct on an initialized NSPanGestureRecognizer“ (4:29).3

// Add touch-only pan gesture recognizer
let touchRecognizer = NSPanGestureRecognizer(
    target: self,
    action: #selector(touchPan)
)

touchRecognizer.buttonMask = 0x0
touchRecognizer.allowedTouchTypes = .direct

wiringPanelView.addGestureRecognizer(touchRecognizer)

Die Action leitet die Zustände .began, .changed, .ended und .cancelled des Recognizers an die vier Funktionen weiter. Den Grund für den Abbruchpfad nannte der Talk schon beim Button: „If tracking is canceled due to a system gesture like Exposé, scroll, or any other reason, I can revert any unintended changes“ (2:41) (wird das Tracking durch eine Systemgeste wie Exposé, durch Scrollen oder aus einem anderen Grund abgebrochen, kann ich ungewollte Änderungen zurücknehmen), und die Regel der Technote lautet „Handle cancellation“.36

// Pan gesture recognizer action function
@objc func touchPan(_ recognizer: NSPanGestureRecognizer) {
    switch recognizer.state {
    case .began:
        startTracking(at: recognizer.location(in: wiringPanelView))
    case .changed:
        continueTracking(at: recognizer.location(in: wiringPanelView))
    case .ended:
        endTracking(at: recognizer.location(in: wiringPanelView))
    case .cancelled:
        cancelTracking()
    default:
        break
    }
}

NSPanGestureRecognizer stammt aus macOS 10.10 und allowedTouchTypes aus 10.12.2; nichts an diesem Rezept ist neu.7

Zweitens: die Regeln, die Recognizer mitbringen. Die Technote: „If your view is covered by another, often transparent, view, your gesture recognizer won’t be triggered“ und „You can’t place views on top of standard framework controls, because those controls now use gesture recognizers internally“, dazu ihr eigener Ausweg: „If necessary, rearrange the siblings, or override the occluding view’s hitTest(_:) method and return nil to ensure it doesn’t block events going to underlying controls.“6 Ein eigener Recognizer muss zu einem Ende kommen: „End your active gesture recognizer by transitioning to ended, failed, or cancelled. If you don’t, recognizers are blocked from activating.“6 Hinzu kommt eine Verhaltensänderung, die nur Unterklassen betrifft, die mit dem neuen SDK gebaut werden: „In apps built with the macOS 27 SDK and Xcode 27, location(in:) on NSGestureRecognizer returns NSZeroPoint and logs an error if the receiver’s class doesn’t override the method“, weil „Subclasses of NSGestureRecognizer must implement location(in:) to report a meaningful location“.6

Drittens: was Sie verlieren. Bei Control-Actions sagt die Technote, der Wechsel zu Recognizern in NSControl „changes the timing of when AppKit delivers control action messages with respect to event processing“, sodass currentEvent „no longer returns the event that triggered an action“; sie verweist stattdessen auf NSEvent.pressedMouseButtons und das klassenweite modifierFlags und ergänzt, dass „a touch is not part of pressedMouseButtons“.6 Und eine Unterklasse, die eine Methode für die linke Maustaste überschreibt, zahlt dafür: „If you subclass an AppKit control and override any of the left-mouse responder methods, that control falls back to a tracking loop path for compatibility.“6

Bedienelemente: Events statt mouseDown

Das erste Refactoring im AppKit-Talk betrifft einen Button. Das Original leitete von NSButton ab und überschrieb mouseDown(with:), um zu erfahren, wann das Tracking begann und endete; unter Touch „the buttons work, but AppKit must emulate mouse events to pass to the mouseDown override“ (2:17).3 Der Ersatz sind NSControl-Events „directly on NSButton without the need to subclass“ (2:27); das Listing der Talk-Seite bei 2:24 registriert am Button drei Aufrufe von addTarget(_:action:for:), für [.trackingBegan, .trackingEntered], [.trackingExited, .trackingEndedInside] und .trackingCancelled, und die Events machen auch den Zustand sichtbar, den ein Maus-Override nie gesehen hat: „If tracking is canceled due to a system gesture like Exposé, scroll, or any other reason, I can revert any unintended changes“ (2:41).3 Die Events sind alt: „NSControl events are available for standard AppKit controls, and most control events are available all the way back to macOS 11“ (2:51).3 Für das Muster verweist der Talk auf die WWDC26-Session, die er „Modernizing your AppKit app“ nennt; die Session, die die Technote als zugehöriges Video führt, heißt „Modernize your AppKit app“ (WWDC26 Session 289).36

macOS 27 ergänzt NSControl.Events laut dem Abschnitt „Handle control events“ der Technote um weitere Fälle: trackingRepeated („An event when multiple mouseDown(with:) events with a click count greater than 1 occur“), valueChanged („An event when the value changes on continuous controls, such as sliders“), primaryActionTriggered, menuActionTriggered („An event that triggers when a menu gesture occurs, but before the menu presents“) und applicationReserved für eigene Zwecke.67

Dann die Exklusivität. „By default, only one view can be interacted with at a time“ (7:20) (standardmäßig lässt sich jeweils nur eine View bedienen), was der Talk Gesten-Exklusivität nennt und die Technote mit Kompatibilität begründet: „For maximum compatibility, AppKit restricts gesture activations to a single view hierarchy at a time“ und „Unlike in iOS, the person can’t perform multiple interactions simultaneously, though scrolling is a notable exception.“36 Das Opt-out erfolgt pro View: „The API to control gesture exclusivity is the exclusiveGestureBehavior property on NSView“ (7:48). Der Standardwert der Property „inherits its parent’s exclusive gesture behavior“ (7:57), und „By setting the exclusiveGestureBehavior property on the stove view to .notExclusive, the child slider subviews all become non-exclusive as well“ (8:01); die ganze App steigt über den Info.plist-Schlüssel NSViewGestureRecognizerIsExclusive aus.367 Der Talk sagt, die Property „is available in the next SDK“ (7:54). Apples Dokumentation führt sie als macOS 27.0 ohne Beta-Kennzeichnung, die Technote vom Juni beschreibt sie, und das macOS-27.0-SDK in Xcode 27.1 deklariert sie in NSView.h als API_AVAILABLE(macos(27.0)) mit dem Kommentar „Defaults to .inherit“; das SDK, das der Talk „next“ nennt, war also bereits ausgeliefert, als der Talk online ging (Analyse des Autors anhand der installierten Header).367

36 Punkte

Der Design-Talk nennt die Zahl dreimal, und der AppKit-Talk wiederholt sie. „Touch on macOS uses a touch target of 36 points. This creates the same physical size on display as iOS’s 44 points“ (9:17).4 Das Ziel ist mit Absicht unsichtbar: „All macOS’s framework controls have been updated to use this new touch target, but notice it’s invisible. The controls haven’t changed size and therefore don’t require a new layout“ (9:26) (alle Framework-Bedienelemente von macOS nutzen dieses neue Touch-Ziel, doch es ist unsichtbar; die Bedienelemente haben ihre Größe nicht geändert und brauchen daher kein neues Layout).4

Bei eigenen Views lautet die Anweisung, die Trefferfläche zu vergrößern, nicht das Bedienelement. Die Verbindungsknoten im AppKit-Talk waren „a little tricky to touch“ (5:14), also ergänzte der Engineer einen Parameter expandHitRect, der „expands the size of the target rect to a minimum of 36 points on each axis. This makes it easier for a touch to hit a node while still requiring the mouse to be precise and without modifying the layout“ (5:50), eine Technik, die er „for small resize or grab handles for selected objects in a canvas view“ (6:07) empfiehlt.3 Die Fassung des Design-Talks für Bedienelemente, die nicht von Apple stammen: „consider increasing the touch target area around your control instead of changing the control size“ (9:51).4

Die Größen der Bedienelemente bleiben, wie sie sind. „When designing inspectors or other control-heavy areas, medium-sized controls continue to be the default control size. Window toolbars use extra-large-sized controls by default. Large and extra-large controls should not be used outside of the toolbar“ (9:58), und „They should only be used sparingly to emphasize key moments or in apps of which content consumption is the primary use case“ (10:14).4 Für einstellungsartige Views gilt: „use FormStyle. Here as well, each row by default measures the 36-point height“ (10:28).4 Kleine und Mini-Bedienelemente bleiben zulässig: „They fully support touch regardless of their size“ (10:46), mit einer Regel für eigene: „If your app is using custom small controls, ensure touch works, even though the tap target might be small“ (10:50), denn „touch events should never be ignored“ (11:00).4

Den schwierigen Teil übernimmt das Framework für die drei Bedienelemente, die keine 36 Punkte groß sein können: „the stepper, dial, and slider“ (13:54) „now expand in place when interacting via touch“ (14:07), ohne beim vergrößernden Tippen ihren Wert zu ändern (14:26), und „collapse themselves when I’m not interacting with them“ (14:41); bei Slidern ist es eine Option, denn „sliders have the option to expand when presented small“ (15:36).4 Auch Menüs passen sich an: „when using touch, the menu shows slightly larger rows to help make selection easier“ (11:23), und ebenso vorübergehend eingeblendete Views: „views in your app that are briefly presented, such as popovers or custom menus, can show slightly altered layouts depending on the input used to invoke them“ (11:29).4

Hover fällt weg

„Direct touches don’t have an equivalent to mouseMoved events“ (10:38) (direkte Berührungen haben keine Entsprechung zu mouseMoved-Events), also braucht alles, was sich beim Überfahren mit der Maus zeigt, eine Entscheidung.3 Die Regeln des AppKit-Talks: „don’t change your app experience to permanently show hidden controls“ (10:49), „Static data like tooltips shouldn’t be revealed on touch“ (10:53) und „for hidden essential controls, install a touch-only click gesture recognizer to temporarily show the element on a touch tap“ (10:57).3 Die Technote bestätigt, dass der Zeigerpfad unverändert bleibt: „Hovering via mouseMoved(with:) is still managed with NSTrackingArea.“6

Die Regeln des Design-Talks sind dieselben, aus Sicht der Nutzer. „hover actions that are purely showing information, like tooltips, are not required to work with touch“ (11:53); Aktionen, die per Touch ohnehin leicht sind, brauchen keine eigene Affordance, etwa die Scroll-Buttons eines Karussells, die „remain hidden during a touch interaction“ (12:22), weil „horizontal scroll is always possible via touch“ (12:19); „only the most important hover actions relevant to that content should reveal themselves“ (12:30), wobei Safari genau zwei zeigt, wenn eine Seite berührt wird (12:36); und „actions that appear on hover be duplicated elsewhere in your UI“ (13:05), wobei der Teilen-Button von Erinnerungen unter Touch im Kontextmenü der Zeile liegt (13:20).4

Scrollen, langes Drücken, Ziehen, Text

Gescrollt wird mit einem Finger auf dem Display und mit zweien auf dem Trackpad (4:39).4 Wenn ein Finger zeichnen statt scrollen soll, stellt der AppKit-Talk „the decorating view’s enclosing scroll view to require two touches minimum for touch scrolling“ (6:40) ein; die Property heißt NSScrollView.minimumNumberOfTouchesForScrolling, macOS 27.0, daneben stehen maximumNumberOfTouchesForScrolling, isTouchScrollingEnabled und scrollGestureForRelationships.37 Ein Recognizer, der einem Scrollen den Vortritt lassen soll, setzt isCancellableByScrollGesture; „NSScrollView now supports pull-to-refresh functionality“ über NSRefreshController; und bei NSPanGestureRecognizer gilt für das Paar minimumNumberOfTouches und maximumNumberOfTouches, dass sie „replace numberOfTouchesRequired“, das in 27.0 als veraltet markiert ist.67

Langes Drücken ist auf dem Mac die Touch-Geste für Ziehen und Kontextmenü zugleich, und AppKit vermittelt zwischen beiden. „When a draggable item is long pressed, it should hint at its draggability with a lift animation. To get the drag-and-drop lift preview, use the existing drag-and-drop delegate APIs on NSTableView, NSOutlineView, and NSCollectionView“ (9:49).3 Für Menüs: „Use the menu property on NSView or override menu(for:). AppKit will detect this and automatically install the appropriate gesture recognizers, which include a control-tap gesture recognizer as an accelerator“ (10:11), und „When using both this menu API and the container view drag-and-drop delegate APIs, AppKit will coordinate when a long press becomes a drag-and-drop operation or a context menu one, even allowing the user to switch between them“ (10:25) (nutzen Sie diese Menü-API zusammen mit den Drag-and-Drop-Delegate-APIs der Container-View, koordiniert AppKit, wann ein langes Drücken zu einem Drag-and-Drop-Vorgang oder zu einem Kontextmenü wird, und lässt den Nutzer sogar zwischen beiden wechseln).3 Der Design-Talk zeigt die Sicht der Nutzer: Das Foto „scales up under my finger“ (3:50), sein Kontextmenü erscheint daneben (3:58), und Ziehen schließt das Menü (4:05); Umschalt- und Wahltaste funktionieren beim Ziehen per Touch weiterhin (4:13).4 Für eigene Views startet beginDraggingSession(items:gesture:source:) „a drag from a gesture recognizer“, neu in 27.0.67

Text ist die dünne Stelle. Der eine Satz der Technote lautet „NSTextSelectionManager allows custom text engines to support standard text gestures“, und die Klasse ist als macOS 27.0 dokumentiert, mit dem Abstract „An object that coordinates text selection behavior for custom text views“.67 Der Header füllt den Vertrag aus (Analyse des Autors): Die Klasse „provides a centralized way to manage text selection interactions using a set of gesture recognizers“, mit einem Interaktionsmodus, der bearbeitbar, nur auswählbar oder nicht interaktiv ist, einem Delegate, das die Auswahl speichert, und einer Layout-Datenquelle.7 Keiner der beiden Talks behandelt Einfügemarken, Auswahlgriffe oder ein Bearbeitungsmenü unter Touch; die Auswahlhinweise des Design-Talks betreffen Elemente, für die gilt: „on macOS we recommend to allow modeless selection through click and tap“ (2:42), einmal tippen zum Auswählen und zweimal tippen zum Öffnen (3:10).4

Systemgesten und der Schalter, der nicht dokumentiert ist

macOS beansprucht auf dem Display eine Reihe von Mehrfingergesten, die „controlled by macOS and are therefore not available to any app running“ (8:05) sind (von macOS gesteuert und daher für keine App verfügbar): drei Finger nach oben für Mission Control und nach unten für App Exposé (8:13), ein Zusammenziehen mit Daumen und drei Fingern, um Apps anzuzeigen, und ein Spreizen, um den Schreibtisch freizulegen (8:22), drei Finger nach links oder rechts zwischen Spaces (8:32), Wischen vom oberen und unteren Rand für eine ausgeblendete Menüleiste und das Dock (8:37), ein Wischen über die Dynamic Island, um Siri aufzurufen (8:46), und Wischen vom Rand für Mitteilungszentrale und Kontrollzentrum (8:51).4

Der AppKit-Talk gerät mit drei Slidern in den Konflikt: „if I try to control three or more sliders in the same direction at the same time, I get the system gesture instead“ (8:17), und zeigt den Schalter: „I can control system gesture availability at the window level with the disablesDirectTouchSystemGestures property on NSWindow. SwiftUI and Mac Catalyst also have similar API on UIViewController and View“ (8:25), mit der Warnung „Only disable system gestures if the interaction capabilities they open up are critical for the window“ (8:42) (Systemgesten nur abschalten, wenn die dadurch möglichen Interaktionen für das Fenster unverzichtbar sind).3 Das Code-Listing der Talk-Seite nennt alle drei: disablesDirectTouchSystemGestures an NSWindow, prefersDirectTouchSystemGesturesDisabled an UIViewController und directTouchSystemGesturesDisabled() an einer SwiftUI-View.3 Keines der drei steht am 28. Oktober in Apples Dokumentation; die JSON-Endpunkte liefern 404, und die Symbole fehlen in den Indizes von AppKit, UIKit und SwiftUI.7 Meine Lesart, keine Aussage von Apple: Sie sind das deutlichste Zeichen dafür, dass das SDK, von dem die Talks ausgehen, dasjenige ist, das als „Coming soon“ markiert ist.

SwiftUI und Mac Catalyst

SwiftUI bekommt einen neuen Typ: „if you have a specialized need to distinguish between mouse and direct touch input, you can use the new GestureInputKinds gesture modifier API“ (0:43).3 GestureInputKinds ist auf allen sieben Plattformen mit 27.0 dokumentiert, mit .directTouch („A person is touching content directly“), .pointer („A person is pressing a mouse or a trackpad button while the pointer is pointing at content“), .indirectTouch, .pencil und .all sowie inputKinds:-Parametern an onTapGesture, onLongPressGesture und den Initialisierern von TapGesture, SpatialTapGesture, LongPressGesture, DragGesture, MagnifyGesture und RotateGesture.7 Der Satz der Technote lautet: „Use GestureInputKinds to limit gestures to specific types of input in SwiftUI.“6

Mac Catalyst nutzt, was UIKit seit iOS 9 hat: Der Talk sagt „UITouch.touchType and UIGestureRecognizer’s allowedTouchTypes“ (0:59); die dokumentierte Property ist UITouch.type mit dem Enum UITouch.TouchType, und allowedTouchTypes steht an UIGestureRecognizer ab Mac Catalyst 13.1.37 Die Formulierung des Talks ist ein Versprecher, keine neue API.

Live Activities auf dem Mac, der Dokumentation voraus

Der dritte Talk ist kurz und stellt eine große Behauptung auf. „The Dynamic Island has come to the Mac. To fully take advantage of its capabilities, Mac apps now support native Live Activities“ (0:05), und „now in macOS Golden Gate, applications running on the Mac can create Live Activities directly“ (0:57).5 „Universal applications with existing Live Activities will work on the Mac with no code change, and native macOS apps can create Live Activities directly through the Live Activities API“ (1:03) (universelle Apps mit bestehenden Live Activities funktionieren ohne Codeänderung auf dem Mac, und native macOS-Apps können Live Activities direkt über die Live Activities API erzeugen).5 Zur Platzierung: „On a Mac with Dynamic Island, Live Activities blend in seamlessly into the top edge of the device. On other devices and displays, they are shown in the menu bar“ (1:14).5 Der Code ist der iOS-Code: das Datenmodell in ActivityAttributes (2:36), die Compact- und Minimal-Darstellungen in ActivityConfiguration mit dem View Builder für die Dynamic Island (3:24), die einzige Mac-spezifische Darstellung, „The menu bar expanded Live Activity view is created along with the ActivityConfiguration as a simple view“ (3:52), während „Expanded Live Activities in the Dynamic Island are defined with the Dynamic Island view builder“ (4:02), „This same code works on iOS and macOS“ (4:30), Starts, die sofort, geplant oder per Push erfolgen (4:40), die Integration „with existing backgrounding technologies on the Mac, like background tasks and user agents“ (4:54), Aktionen über App Intents (5:56) und „If you have an iOS activity, there’s no code to port“ (7:09).5 Zwei Regeln gelten wie unter iOS: „Only a single Live Activity can be expanded at a time“ (3:12) und „An activity is only expanded when interacted with or if explicitly triggered through an alert request“ (3:06).5

Apples Dokumentation sagt das noch nicht. Der Abstract der ActivityKit-Framework-Seite nennt „the Mac“, aber ihr Overview sagt „On Mac, it appears in the Menu bar“, ihre Plattformliste lautet iOS, iPadOS und Mac Catalyst 16.1, und Activity, ActivityAttributes, ActivityConfiguration, DynamicIsland sowie der Schlüssel NSSupportsLiveActivities führen keine macOS-Plattform.87 Die Live-Activities-Seite der HIG, deren Änderungsprotokoll am 13. Oktober endet, beschreibt weiterhin nur den Weg über ein gekoppeltes iPhone: „Active Live Activities automatically appear in the Menu bar of a paired Mac“, „Clicking the Live Activity launches iPhone Mirroring to display your app“ und, unter „macOS dimensions“, „Use the provided iOS dimensions“.10 Die SDKs stimmen mit der Dokumentation überein, nicht mit dem Talk: Im macOS-27.0-SDK in Xcode 27.1 und im macOS-27.2-SDK in der Xcode-27.2-Beta (27B5019j) markiert das macOS-Interface von ActivityKit ActivityAttributes, Activity, jedes request und update als @available(macOS, unavailable), geprüft auf diesem Mac (Analyse des Autors). Der richtige Satz für eine Planung ist also der enge: Der Talk sagt, die Fähigkeit existiere in macOS Golden Gate, und weder die Dokumentation noch eines der beiden SDKs, die ich geprüft habe, lässt Sie sie bisher bauen. Der Beitrag zur Zustandsmaschine zeigt eine iOS-Implementierung des gemeinsamen Modells aus Start, Aktualisierung und Ende; die eigenen Grenzen des Mac für Dauer, Ausblenden und Hintergrundbetrieb stehen noch in keiner Quelle.

Design: macOS ändert sich nicht

Die abschließenden Regeln des Design-Talks sind kurz genug, um sie vollständig wiederzugeben. „Avoid redesigning your app just to support touch. Your app on a Mac that supports touch should have no visual distinction from your app on a Mac that doesn’t“ (16:05). „Use gestures to navigate your app and directly manipulate your content“ (16:14). „Use 36 points as a touch target on macOS, and use Apple frameworks to get touch-optimized layouts and expandable controls“ (16:18). „Most apps will work great with touch right away“ (16:28). „Keep keyboard and mouse as a primary input“ (16:31) (kurz: kein Redesign nur für Touch und kein sichtbarer Unterschied, Gesten für Navigation und direkte Manipulation, 36 Punkte als Touch-Ziel und Apple-Frameworks für touch-optimierte Layouts und sich vergrößernde Bedienelemente, die meisten Apps funktionieren mit Touch sofort gut, Tastatur und Maus bleiben die primäre Eingabe).4

Die eine räumliche Regel betrifft Hände, nicht Haltungen. „The edges of the display are easy to touch by grabbing the side of the display with my hand“ (6:17), daher gilt: „The left and right side of my app window are therefore best used to show rich controls and dense UI, such as inspectors and navigation sidebars“ (6:29), während „the center of the display is best used for coarse, imprecise and big gestures“ (6:46) (die linke und rechte Seite des App-Fensters eignen sich am besten für umfangreiche Bedienelemente und dichte UI wie Inspektoren und Navigationsseitenleisten, die Mitte des Displays für grobe, ungenaue und große Gesten).4 Eigene Gesten unterliegen drei Einschränkungen: „your gestures should work with touch and trackpad and possibly Magic Mouse“ (7:00), „Avoid adding gestures that only work with touch“ (7:05) und „The action your gesture does should be duplicated elsewhere in the UI, for example in a menu“ (7:37).4 Der Talk erlaubt auch, was der Mac nie hatte: „macOS now allows multiple touch gestures at the same time“ (5:30), mit zwei Slidern in Logic unter zwei Fingern als Beispiel (5:45).4 Das ist die Nutzerseite der Exklusivitäts-Property von oben: Der Standard von AppKit lässt jeweils nur eine View-Hierarchie zu, und .notExclusive ist der Weg, auf dem eine App den Rest öffnet.36

Testen heute: Sidecar und das SDK, das noch nicht da ist

Den Laptop brauchen Sie nicht. „With the latest macOS beta and developer tools, all the touch features of the Mac with Touch Display are available with an iPad connected to your Mac with Sidecar“ (11:59) (mit der neuesten macOS-Beta und den neuesten Entwicklertools stehen alle Touch-Funktionen des Mac mit Touch-Display mit einem per Sidecar verbundenen iPad zur Verfügung), und „The fastest way to get started with touch on Mac is with the Sidecar tools you already own“ (12:09).3 Die Technote setzt voraus, dass auf dem iPad iPadOS 27 läuft, und ergänzt einen Vorbehalt zur Fähigkeitsprüfung (NSScreen.touchCapabilities, ein Option Set mit einem .multiTouch-Bit): In macOS 27 „returns true for all displays when a touch-capable Sidecar display is connected, not just for the Sidecar display“ (meldet die Prüfung für alle Displays true, sobald ein touchfähiges Sidecar-Display verbunden ist, nicht nur für das Sidecar-Display), mit dem Rat: „it’s better to handle events regardless of input source and decide on an alternate presentation based on the interaction type, if needed“.67

Das Audit des Talks, in seiner eigenen Reihenfolge: „start testing your application with touch on macOS with Sidecar. Then audit your code for mouseDown(with:) overrides. Determine if you can use control events or delegate methods instead, or if you need to add your own touch-specific gesture recognizers. Look for areas that have small hit targets and expand them for touch. And finally, add an affordance or use a tap to reveal essential hidden UI“ (12:24).3 Es gibt außerdem einen Skill: „there’s a gesture modernization skill that has an understanding of the features and changes I’ve talked about“ (12:16); die Xcode-Kachel der Landingpage trägt einen Platzhalterkommentar, TK skill, und keine Quelle nennt ihn beim Namen.23

Was die ausgelieferten SDKs enthalten, Analyse des Autors anhand der Header und Swift-Interfaces auf diesem Mac: Das macOS-27.0-SDK in Xcode 27.1 (27A9275) deklariert NSScreen.TouchCapabilities, die fünf neuen NSControl-Event-Fälle, die Touch-Properties von NSScrollView, NSRefreshController, beginDraggingSession(items:gesture:source:) und exclusiveGestureBehavior, alle als API_AVAILABLE(macos(27.0)), und das macOS-Interface von SwiftUICore, das SwiftUI re-exportiert, deklariert GestureInputKinds. Die drei Schalter für Systemgesten stehen weder in diesem SDK noch im macOS-27.2-SDK in der Xcode-27.2-Beta (27B5019j), weder in den Headern von AppKit noch im Interface von SwiftUI noch in den UIKit-Headern für Mac Catalyst, und das macOS-Interface von ActivityKit markiert seine API in beiden SDKs als nicht verfügbar.78

Das sind die beiden SDKs, die ich geprüft habe; der Xcode 27.2 RC (27B48), den Apples Releases-Feed auf den 19. Oktober datiert, ist neuer als diese Beta und wurde nicht geprüft, die Befunde zum Fehlen gelten also für die genannten SDKs und nicht darüber hinaus.11

Was Sie heute zum Testen installieren sollten, von mir nicht getestet: macOS 27.2 (26B123, laut Feed am 26. Oktober erschienen) und den Xcode 27.2 RC, dazu ein iPad mit iPadOS 27 über Sidecar; die Technote beschreibt Sidecar-Touch als funktionsfähig unter macOS 27, und der Feed führt am 28. Oktober keine Beta von macOS 27.3.611 Ein Vorbehalt aus den eigenen Notes des RC: „macOS, watchOS, tvOS, and visionOS SDKs in Xcode 27.2 incorrectly report 27.1 as a valid deployment target“ und „Mac Catalyst builds with a 27.1 or 27.2 deployment target might be unable to use newly introduced API“ (die SDKs für macOS, watchOS, tvOS und visionOS in Xcode 27.2 melden 27.1 fälschlich als gültiges Deployment-Target, und Mac-Catalyst-Builds mit einem Deployment-Target von 27.1 oder 27.2 können neu eingeführte APIs möglicherweise nicht nutzen); wählen Sie also nicht 27.1 als macOS-Deployment-Target (der Releases-Feed führt macOS 27.0.1 und 27.2, aber kein macOS 27.1), und lesen Sie ein Mac-Catalyst-Target mit 27.1 oder 27.2, das eine neue API nicht sieht, als dieses bekannte Problem und nicht als fehlendes Symbol.11

Was also fehlt: die Xcode-27.3-Beta, die die Landingpage verspricht, der AppKit-Artikel, auf den sie verlinkt, die drei Systemgesten-Symbole und ein unter macOS verfügbares ActivityKit (in den beiden geprüften SDKs nicht vorhanden, im 27.2 RC nicht überprüft) sowie jede Aussage zu einem Simulator. Die Notes zum Xcode 27.2 RC erwähnen Touch ein einziges Mal, als Korrektur in Device Hub für Eingaben, die „after a period of inactivity“ (nach einer Zeit der Inaktivität) ausblieben, und die Notes zu macOS 27.2 haben keinen Eintrag zu Touch, Gesten oder Live Activities.11 Die Touch-APIs kamen mit Xcode 27.1, die Regeln sind veröffentlicht, und die Landingpage markiert das Nächste mit „Coming soon“.

Ein Touch-Audit für jede Mac-App

Analyse des Autors, keine Anleitung von Apple: die vier Schritte des Talks, in ihrer Reihenfolge, als Checkliste. Bisher stehen keine Tests zur Laufzeit dahinter.

  1. Sidecar mit einem iPad unter iPadOS 27, auf den neuesten Versionen von macOS und Xcode (macOS 27.2 und der Xcode 27.2 RC), und jeder Bildschirm der App berührt, bevor irgendetwas geändert wird.
  2. Eine Suche nach Overrides von mouseDown(with:) und nach nextEvent(matching:)-Schleifen, wobei jeder Fund Control-Events, einer Delegate-Methode oder einem Gesture Recognizer zugeordnet wird.
  3. Ein Durchgang durch kleine Bedienelemente und Trefferflächen, mit vergrößerter Touch-Fläche, wo es hilft, und ohne Layoutänderung; der Talk erlaubt ein kleineres Bedienelement, solange Touch darauf noch funktioniert.
  4. Eine Liste von allem, was beim Überfahren mit der Maus erscheint, mit einer Entscheidung je Element: Ein Tooltip bleibt der Maus vorbehalten; eine Aktion, die per Touch schon leicht ist, braucht nichts; ein essenzielles Bedienelement bekommt einen reinen Touch-Klick-Recognizer und einen zweiten Platz an anderer Stelle der UI, etwa in einem Kontextmenü.

Das Einzige, was das Audit nicht hervorbringt, ist ein Redesign, denn die erste Regel des Design-Talks lautet, dass es keinen sichtbaren Unterschied geben soll; das einzige Layout, das sich mit der Eingabe ändern darf, ist ein vorübergehendes, ein Popover oder ein eigenes Menü.

Was Apple nicht gesagt hat

Jeder dieser Punkte ist eine Frage, die die Quellen offenlassen, geprüft an der Pressemitteilung, der Landingpage, den drei Talks, der Technote, der Seite mit den technischen Daten, den Notes zum Xcode 27.2 RC und zu macOS 27.2 sowie den vier HIG-Seiten.

  • Welches Point-Release von macOS Touch auf dem eingebauten Display mitbringt und welches SDK die drei undokumentierten Symbole enthält. Die Pressemitteilung sagt „macOS 27“ und nennt macOS 27.2 nur in ihrer Fußnote zu Siri AI; die Landingpage sagt „Xcode 27.3 beta“, „Coming soon“.
  • Ob eine Binärdatei, die gegen ein älteres SDK gebaut wurde, dasselbe Touch-Verhalten bekommt wie eine, die mit dem macOS-27-SDK neu gebaut wurde. Der Talk sagt „all apps“; die Technote knüpft nur die Änderung an location(in:) an das neue SDK.
  • Apple Pencil oder Druck auf dem Display und ob das Glas einen Finger erkennt, bevor er es berührt. Die Talks behandeln das Fehlen eines mausähnlichen Hover-Zustands; keine Quelle erwähnt einen Stift, Druck oder Annäherungserkennung, und GestureInputKinds.pencil ist für macOS 27.0 aufgeführt wie jedes andere Mitglied, während keine Quelle sagt, dass das Display einen Stift erkennt.7
  • Touch auf externen Displays oder im zugeklappten Betrieb, und ob Nutzer Touch abschalten können.
  • Textbearbeitung per Touch: Einfügemarken, Griffe, eine Lupe und das Bearbeitungsmenü.
  • Bedienungshilfen mit dem Touch-Display. Die Seite mit den technischen Daten führt AssistiveTouch und Touch-Anpassungen unter den Funktionen des Laptops und sagt nicht, ob sie auf dem Mac neu sind.9
  • Wie eine App im Modus „Designed for iPad“ auf dem Mac-Display Berührungen empfängt und ob sich das von Mac Catalyst unterscheidet.
  • Ein Weg über Simulator oder Device Hub für Mac-Touch ohne iPad.
  • Webinhalte: ob WKWebView und Safari Touch- oder Pointer-Events an Seiten liefern.
  • Wie sich Fenster und Vollbildinhalte zur Dynamic Island verhalten und welche Safe-Area-API sie meldet.
  • Details zu Live Activities unter macOS: das Point-Release und das SDK, ob NSSupportsLiveActivities erforderlich ist, wie Push-to-Start und die APNs-Registrierung auf dem Mac funktionieren, und Maße für eine Mac-native Activity.

Der Kalender

  • 28. Oktober: Vorbestellungen in 30 Ländern und Regionen; die Entwicklerseite und drei Talks; die Technote ist seit dem 8. Juni online.126
  • 6. November: Der Laptop erreicht Kunden und Geschäfte.1
  • 18. November, 9 bis 10 a.m. PT, und 19. November, 6 bis 7 p.m. PT: Touch on Mac Group Labs, online, mit Ingenieuren und Designern von Apple.2
  • „Coming soon“: die Xcode-27.3-Beta, die Dokumentationsressourcen, die Designressourcen.2
  • Diesen November: das Update von Apple Creator Studio, dessen Touch-Funktionen in Logic Pro und Final Cut Pro die Pressemitteilung beschreibt; die Drittanbieter-Apps, die sie nennt, „will be available later this year“ (werden später in diesem Jahr verfügbar sein).1

Die wichtigsten Erkenntnisse

Für AppKit-Entwickler: Standard-Bedienelemente sind jetzt touch-nativ; Ihr eigener mouseDown(with:)-Code wird emuliert, bis Sie auf Control-Events oder Gesture Recognizer umstellen, und ein reiner Touch-NSPanGestureRecognizer mit buttonMask = 0 und allowedTouchTypes = .direct ist der Weg für ein Punkt-Update, den der Talk empfiehlt; die APIs stecken im macOS-27.0-SDK, das Sie bereits haben.37

Für SwiftUI- und Catalyst-Entwickler: Ihre Gesten funktionieren bereits; GestureInputKinds ist der eine neue SwiftUI-Typ, und die Antwort von Catalyst sind UITouch.type und allowedTouchTypes.37

Für Designer: 36 Punkte, unsichtbar; kein Redesign; essenzielle Hover-Aktionen per Touch erreichbar und zusätzlich an anderer Stelle der UI platziert, etwa in einem Kontextmenü, Tooltips ausgenommen; dichte UI an den Rändern, grobe Gesten in der Mitte.4

Für die Planung: Testen Sie jetzt mit Sidecar; bevor Sie etwas bauen, das Systemgesten deaktiviert oder eine Mac-native Live Activity erzeugt, prüfen Sie, ob das installierte SDK diese APIs deklariert, denn die beiden hier untersuchten SDKs tun es nicht, und der Xcode 27.2 RC ist ungeprüft; das nächste SDK, das Apple versprochen hat, ist die Xcode-27.3-Beta.278

Häufige Fragen

Funktioniert meine bestehende Mac-App mit Touch?

Apple sagt für die meisten Apps ja: „many existing apps work with Touch right away, because macOS automatically translates touches into clicks“, und der AppKit-Talk sagt, dass Standardkomponenten von AppKit, SwiftUI und Mac Catalyst sowie bestehende Gesten „just work“.13 Eigener Code für Maus-Tracking wird emuliert, bis er auf Control-Events oder Gesture Recognizer umgestellt ist; ein UI-Framework, das nicht von Apple stammt, erhält eine generische Emulationsschicht, die NSIsTouchNative abschaltet, sobald die App Touch selbst verarbeitet.36

Wie empfange ich in AppKit eine direkte Berührung?

Mit einem Gesture Recognizer. Der Talk sagt „gesture recognizers are the only way to get direct touches on macOS“, und die Technote sagt, dass Touch-Events weder durch die Responder Chain noch durch Event-Monitore, NSApp oder sendEvent(_:) laufen.36 Ein reiner Touch-Recognizer setzt buttonMask auf 0 und allowedTouchTypes auf .direct.3

Wie groß ist das Touch-Ziel unter macOS?

36 Punkte, „the same physical size on display as iOS’s 44 points“ (dieselbe physische Größe wie 44 Punkte unter iOS). Framework-Bedienelemente erfüllen das bereits, ohne ihre Größe zu ändern; vergrößern Sie bei eigenen Views die Trefferfläche, nicht die View.43

Wie teste ich Touch ohne das neue MacBook Pro?

Verbinden Sie ein iPad mit iPadOS 27 über Sidecar. Die Bedingung des Talks lautet „With the latest macOS beta and developer tools“ (11:59), und eine Beta von macOS 27.3 ist nicht erschienen, also ist die Konfiguration, die ich ausprobieren würde, macOS 27.2 mit dem Xcode 27.2 RC, von mir nicht getestet.3611

Sind die Touch-APIs heute im SDK?

Ja, für alles, was die Talks vorführen, außer den Schaltern für Systemgesten und Mac-nativen Live Activities, die in den beiden hier untersuchten SDKs fehlen (der Xcode 27.2 RC wurde nicht untersucht). Das macOS-27.0-SDK in Xcode 27.1 deklariert NSScreen.TouchCapabilities, die neuen NSControl-Event-Fälle, die Touch-Properties von NSScrollView, NSRefreshController, exclusiveGestureBehavior und die gestenbasierte Dragging-Session, und das Interface von SwiftUICore deklariert GestureInputKinds; Apples Dokumentation führt sie als macOS 27.0 ohne Beta-Kennzeichnung.7 Die Schalter für Systemgesten an Fenster, View Controller und View stehen weder in der Dokumentation noch in den SDKs von Xcode 27.1 oder der 27.2-Beta, ActivityKit markiert seine API in beiden unter macOS als nicht verfügbar, und die Landingpage markiert die Xcode-27.3-Beta mit „Coming soon“.278

Kann eine Mac-App Live Activities erstellen?

Der Talk sagt ja, in macOS Golden Gate, mit demselben ActivityKit- und WidgetKit-Code wie unter iOS und einer Darstellung in der Menüleiste auf Macs ohne Dynamic Island.5 Die Dokumentation von ActivityKit und die HIG führen macOS noch nicht als Plattform für von Apps erstellte Activities, sie beschreiben den Weg über die Menüleiste mit einem gekoppelten iPhone, und das ActivityKit-Interface in den SDKs von Xcode 27.1 und der 27.2-Beta markiert die API unter macOS als nicht verfügbar.108

Woher stammen die Fakten in diesem Beitrag?

Aus der Pressemitteilung, dem Entwickler-News-Beitrag und der Landingpage, den englischen Untertitelspuren der drei Tech Talks, wobei der erste Cue jedes Zitats in Klammern steht, der Technote vom Juni, Apples Dokumentations-JSON für jedes genannte Symbol, der Seite mit den technischen Daten, den Release Notes zum Xcode 27.2 RC und zu macOS 27.2 sowie den vier HIG-Seiten, alle abgerufen am 28. Oktober 2026, dazu aus den Headern und Swift-Interfaces der SDKs von macOS 27.0 und der 27.2-Beta auf meinem Mac, was Analyse des Autors ist. Presseberichte sind keine Quelle.

Quellen


  1. Apple Newsroom, Apple unveils groundbreaking MacBook Pro with PROLED XDR Display, 28. Oktober 2026, im Newsroom-Feed erstmals um 10:09 a.m. PT gesehen (der updated-Stempel des Feeds lautet 17:09:28Z). Abschnitte „Touch Arrives on Mac“, „Say Hello to the Dynamic Island on Mac“ und „macOS 27 Golden Gate“; Preise und Verfügbarkeit; Fußnote 4 zu Apps von Drittanbietern. ↩↩↩↩↩↩↩↩

  2. Apple Developer, Say hello to Touch on Mac, 28. Oktober 2026, und Get ready for Touch on Mac, abgerufen am 28. Oktober 2026 um 11:49 a.m. PT: die drei Talks, „Touch on Mac Group Labs“ am 18. November, 9 bis 10 a.m. PT, und am 19. November, 6 bis 7 p.m. PT, sowie die Kacheln „Xcode 27.3 beta“, „Documentation resources“ und „Design resources“, jeweils mit „Coming soon“ markiert, deren Links in HTML-Kommentaren hinterlegt sind. ↩↩↩↩↩↩↩↩↩↩↩↩

  3. Apple Developer, Tech Talk Bring Touch to your Mac app, 13:19, Raleigh Ledet, 28. Oktober 2026. Die Zitate stammen aus der englischen Untertitelspur; die Zeit in Klammern ist der erste Cue des zitierten Abschnitts. Unter den Code-Listings der Talk-Seite: „Use NSControl events to detect tracking“ (2:24), „Refactored tracking functions“ (4:11), „Add a touch-only pan gesture recognizer“ (4:24), „Pan gesture recognizer action“ (4:52), „Require two touches for scrolling“ (6:40), „Allow simultaneous slider interaction“ (7:48), „Disable system gestures“ (8:25), „Declare touch-native support in Info.plist“ (11:47); die drei im Beitrag wiedergegebenen Listings sind wörtlich von der Seite übernommen. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  4. Apple Developer, Tech Talk Design for touch on Mac, 16:52, Cas Lemmens, 28. Oktober 2026. Zitate aus der englischen Untertitelspur, erster Cue in Klammern. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  5. Apple Developer, Tech Talk Bring Live Activities to Mac, 7:40, Jonathan Tilley, 28. Oktober 2026. Zitate aus der englischen Untertitelspur, erster Cue in Klammern. ↩↩↩↩↩↩↩

  6. Apple Developer Documentation, TN3212: Adopting gesture recognizers for Sidecar touch support, Revisionsverlauf „2026-06-08 First published“, abgerufen am 28. Oktober 2026 um 12 Uhr mittags PT. Zitierte Abschnitte: Overview, „Understand how gesture recognizers gather events“, „Handle Sidecar touch input“, „Update your event-handling code“, „Implement custom gesture recognizers“, „Handle tracking loop compatibility“, „Update to gesture recognizer behavior“, „Support third-party UI frameworks“, „Explore updated APIs in macOS 27“, „Detect touch capability“, „Handle control events“, „Configure scroll behavior“, „Work with text and dragging“ und „Handle deprecations and behavior changes“. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  7. Apples Dokumentations-JSON (developer.apple.com/tutorials/data/documentation/<path>.json, die Daten hinter den hier verlinkten Seiten), abgerufen am 28. Oktober 2026, 11:55 a.m. bis 12:05 p.m. PT. Als macOS 27.0 ohne Beta-Kennzeichnung geführt: NSScreen.TouchCapabilities und .multiTouch, NSControl.Events .trackingRepeated, .valueChanged, .primaryActionTriggered, .menuActionTriggered und .applicationReserved, NSScrollView .isTouchScrollingEnabled, .minimumNumberOfTouchesForScrolling, .maximumNumberOfTouchesForScrolling, .scrollGestureForRelationships und .refreshController, NSRefreshController, NSPanGestureRecognizer.minimumNumberOfTouches und .maximumNumberOfTouches, NSGestureRecognizer.isCancellableByScrollGesture, NSView.exclusiveGestureBehavior und ExclusiveGestureBehavior, NSView.beginDraggingSession(items:gesture:source:), NSTextSelectionManager, NSIsTouchNative (seine Seite: „Most AppKit apps don’t need this key. It’s primarily intended for apps that embed a non-AppKit rendering or input framework and implement their own touch-handling pipeline.“), NSViewGestureRecognizerIsExclusive und GestureInputKinds mit seinen Mitgliedern (alle sieben Plattformen 27.0). Älter: NSGestureRecognizer und die konkreten Unterklassen (macOS 10.10), allowedTouchTypes (10.12.2), die Tracking-Fälle von NSControl.Events (11.0), UITouch.type und UIGestureRecognizer.allowedTouchTypes (iOS 9.0, Mac Catalyst 13.1); numberOfTouchesRequired in 27.0 als veraltet markiert. Nicht gefunden (HTTP 404, fehlen in den Framework-Indizes): NSWindow.disablesDirectTouchSystemGestures, UIViewController.prefersDirectTouchSystemGesturesDisabled, SwiftUI directTouchSystemGesturesDisabled() und der Artikel „Adopting gesture recognizers in your app“. SDK-Prüfung am 28. Oktober 2026 (Analyse des Autors) in MacOSX27.0.sdk in Xcode 27.1 (27A9275): In NSView.h lautet Zeile 583 @property NSViewExclusiveGestureBehavior exclusiveGestureBehavior API_AVAILABLE(macos(27.0)); unter dem Kommentar „Defaults to .inherit“; NSScreen.h deklariert NSScreen.TouchCapabilities und touchCapabilities; NSControl.h deklariert NSControlEventTrackingRepeated, ValueChanged, PrimaryActionTriggered, MenuActionTriggered und ApplicationReserved; NSScrollView.h deklariert touchScrollingEnabled, minimumNumberOfTouchesForScrolling, maximumNumberOfTouchesForScrolling (Zeile 148), scrollGestureForRelationships und refreshController; NSRefreshController.h deklariert die Klasse; NSPanGestureRecognizer.h deklariert minimumNumberOfTouches und maximumNumberOfTouches und markiert numberOfTouchesRequired als veraltet mit dem Ersatz minimumNumberOfTouches; NSGestureRecognizer.h deklariert cancellableByScrollGesture; NSTextSelectionManager.h deklariert die Klasse und ihren Mode, mit dem Kommentar „provides a centralized way to manage text selection interactions using a set of gesture recognizers“; NSView.h deklariert beginDraggingSession(items:gesture:source:); alle als API_AVAILABLE(macos(27.0)). SwiftUICore.swiftmodule/arm64e-apple-macos.swiftinterface deklariert GestureInputKinds in Zeile 25274 unter @available(anyAppleOS 27.0, *), und das Interface von SwiftUI, das ihn re-exportiert, deklariert die inputKinds:-Parameter an onTapGesture, onLongPressGesture (Zeile 22962) und den Initialisierern von SpatialTapGesture, LongPressGesture, DragGesture, MagnifyGesture und RotateGesture, während TapGesture.init(count:inputKinds:) im Interface von SwiftUICore steht (Zeile 18305). DirectTouchSystemGestures kommt in keinem AppKit-Header, keinem macOS-Swift-Interface von SwiftUI oder SwiftUICore und keinem UIKit-Header für Mac Catalyst vor, weder in diesem SDK noch in MacOSX27.2.sdk in der Xcode-27.2-Beta (27B5019j). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  8. Apple Developer Documentation, ActivityKit, abgerufen am 28. Oktober 2026: Abstract „Share live updates from your app as Live Activities on iPhone, iPad, Apple Watch, and the Mac“, Overview „On Mac, it appears in the Menu bar“, Plattformen iOS, iPadOS und Mac Catalyst 16.1; Activity, ActivityAttributes, ActivityContent (iOS und iPadOS 16.1 oder 16.2), ActivityConfiguration und DynamicIsland aus WidgetKit (iOS und iPadOS 16.1) sowie NSSupportsLiveActivities (iOS und iPadOS 16.1), von denen keines macOS führt. Displaying live data with Live Activities, Abstract: „Display up-to-date data and offer quick interactions in the Dynamic Island, on the Lock Screen, in CarPlay, and on a paired Mac or Apple Watch.“ SDK-Prüfung (Analyse des Autors): ActivityKit.swiftmodule/arm64e-apple-macos.swiftinterface in MacOSX27.2.sdk (Xcode-27.2-Beta, 27B5019j) trägt @available(macOS, unavailable) an ActivityAttributes, Activity, jeder Überladung von request und an update; das arm64e-apple-macos.swiftinterface in MacOSX27.0.sdk (Xcode 27.1, 27A9275) trägt dieselben Markierungen. ↩↩↩↩↩↩↩

  9. Apple, MacBook Pro with PROLED XDR Display Technical Specifications, abgerufen am 28. Oktober 2026 um 11:57 a.m. PT: „14.2-inch (diagonal) tandem OLED display“ mit „3024-by-1986 native resolution at 254 pixels per inch“, „16.3-inch (diagonal) tandem OLED display“ mit „3472-by-2266 native resolution at 254 pixels per inch“, die Display-Zeilen „Touch“, „Multi-Touch gesture support“ und „Dynamic Island“ sowie „ProMotion technology with adaptive refresh rates from 10Hz to 120Hz“. ↩↩

  10. Apple Developer, Human Interface Guidelines, Gestures (Änderungsprotokoll „September 9, 2024“), Pointing devices („June 21, 2023“), Designing for macOS und Live Activities („October 13, 2026 | Added guidance for limited width layouts, and updated supported platforms and specifications.“), alle abgerufen am 28. Oktober 2026; keine davon erwähnt Touch auf dem Mac-Display. Live Activities, Platform considerations, macOS: „Active Live Activities automatically appear in the Menu bar of a paired Mac using the compact, minimal, and expanded presentations“, „Clicking the Live Activity launches iPhone Mirroring to display your app“ und, unter der Überschrift „macOS dimensions“, „Use the provided iOS dimensions“. ↩↩↩

  11. Apple Developer Documentation, Xcode 27.2 RC Release Notes, abgerufen am 28. Oktober 2026: „Xcode 27.2 RC includes Swift 6.4 and SDKs for iOS 27.2, iPadOS 27.2, tvOS 27.2, watchOS 27.2, macOS 27.2, and visionOS 27.2“; Device Hub, Resolved Issues: „Fixed: Device Hub stopped sending touch and button input to a connected device after a period of inactivity. (182695157) (FB23873443).“; Known Issues: „macOS, watchOS, tvOS, and visionOS SDKs in Xcode 27.2 incorrectly report 27.1 as a valid deployment target. Builds and other functionality might have unexpected behavior if this deployment target is used. Mac Catalyst builds with a 27.1 or 27.2 deployment target might be unable to use newly introduced API.“ macOS 27.2 Golden Gate Release Notes, am selben Tag abgerufen: Kein Eintrag erwähnt Touch, Gesten, Sidecar oder Live Activities. Apple Developer, Releases, RSS-Feed abgerufen am 28. Oktober 2026: „Xcode 27.2 RC (27B48)“ datiert Mon, 19 Oct 2026 10:00:00 PDT, „macOS 27.2 (26B123)“ datiert Mon, 26 Oct 2026 10:00:00 PDT, und kein Eintrag nennt macOS 27.3 oder Xcode 27.3. ↩↩↩↩↩↩

Verwandte Beiträge

Bilder in Menüeinträgen verschwinden in macOS 27 und iPadOS 27

macOS 27 und iPadOS 27 blenden Bilder in Menüeinträgen standardmäßig aus. Was verschwindet, hängt vom SDK ab – drei Fram…

14 Min. Lesezeit

Die Ära des skalierbaren iPhones: Machen Sie Ihre App bis September bereit

iOS 27 zieht die Grenze der Größenveränderbarkeit beim SDK, gegen das Sie bauen. Die Checkliste: Annahmen über feste Grö…

12 Min. Lesezeit

Der Mac App Store lässt Fenstermanager nicht zu. Ich habe trotzdem einen veröffentlicht.

App Sandbox verbietet die API, die jeder Fenster-Tiler braucht, und Apple sagte, ich solle außerhalb des Stores vertreib…

12 Min. Lesezeit