Touch on Mac côté développeurs : 36 points, gestes, Sidecar

Qu’est-ce que le tactile sur le Mac change pour les développeurs Mac ? Les apps existantes fonctionnent parce que « macOS automatically translates touches into clicks » (macOS convertit automatiquement les touchers en clics), et trois Tech Talks posent les règles : les reconnaisseurs de gestes sont « the only way to get direct touches on macOS » (le seul moyen de recevoir des touchers directs sur macOS), les contrôles standard sont nativement tactiles, la cible tactile fait 36 points, le survol n’a pas d’équivalent, et un iPad en Sidecar sert de banc d’essai.1234 Les API tactiles figurent déjà dans le SDK macOS 27.0 ; les commutateurs des gestes système et un ActivityKit disponible sur macOS n’y figurent pas, dans les deux SDK que j’ai vérifiés, et la bêta de Xcode 27.3 est « Coming soon ».25678

TL;DR : Apple a annoncé le tactile sur le MacBook Pro with PROLED XDR Display (14,2 et 16,3 pouces, précommandes le 28 octobre, en magasin le 6 novembre) et a expliqué aux développeurs comment l’adopter dans trois Tech Talks le 28 octobre.129 Si votre app utilise les contrôles AppKit standard, les gestes SwiftUI ou Mac Catalyst, le Tech Talk dit qu’ils « just work » (fonctionnent, tout simplement), et l’audit ci-dessous (zones de toucher, survol) reste valable. Le code mouseDown(with:) personnalisé est émulé tant qu’il n’est pas passé aux événements de contrôle ou aux reconnaisseurs de gestes, et un framework d’interface tiers reçoit une couche d’émulation générique que NSIsTouchNative désactive dès que l’app gère elle-même le toucher.36 Pour recevoir un toucher direct dans AppKit, il vous faut un reconnaisseur de gestes, car les touchers n’atteignent jamais la chaîne de répondeurs ni les moniteurs d’événements.36 Le Tech Talk de design fixe la cible tactile à 36 points, la même taille physique que 44 points sur iOS, et précise que macOS a le même aspect avec ou sans tactile.4 Testez avec un iPad via Sidecar ; les éléments les plus récents sont macOS 27.2 et la release candidate de Xcode 27.2, une configuration que je n’ai pas fait tourner.311 Les API tactiles figurent déjà dans le SDK macOS 27.0. Le commutateur des gestes système et un ActivityKit disponible sur macOS sont absents des deux SDK que j’ai vérifiés, et la bêta de Xcode 27.3 est « Coming soon ».2378

Ce qu’Apple a publié, et ce qu’il n’a pas publié

L’annonce d’Apple a pris la forme d’un communiqué de presse, pas d’une keynote ; l’article en direct garde la trace de la journée. Le contenu destiné aux développeurs tient en trois phrases dans la section « 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 », puis « Updated system gesture APIs also enable developers to create intuitive experiences designed specifically for Touch », et la remarque selon laquelle « app developers can test how Touch performs in their iOS and iPadOS apps directly on the MacBook Pro display » (les développeurs peuvent tester le comportement tactile de leurs apps iOS et iPadOS directement sur l’écran du MacBook Pro).1 La section consacrée à macOS dit que le portable « comes to life with macOS 27 » et mentionne « Touch built for macOS 27 » ; elle ne nomme aucune version intermédiaire.1

Le volet développeurs était déjà en ligne à 11 h 47 PT : un article d’actualité, « Say hello to Touch on Mac », et une page d’accueil, « Get ready for Touch on Mac », avec trois Tech Talks, des Group Labs les 18 et 19 novembre, et trois vignettes marquées « Coming soon » : « Xcode 27.3 beta », « Documentation resources » et « Design resources ».2 Le HTML de la page contient les liens qu’Apple prévoit d’attacher à ces vignettes, dans des commentaires destinés à être réactivés quand les ressources seront en ligne : un article AppKit, « Adopting gesture recognizers in your app », qui renvoie aujourd’hui une erreur 404, l’exemple existant de glisser-déposer avec file promises et, parmi ses liens, quatre pages des Human Interface Guidelines et les Apple Design Resources ; les pages HIG capturées ne contiennent aucune recommandation sur le tactile sur l’écran du Mac, et le journal des modifications de la page Live Activities s’arrête au 13 octobre.2710

Les sources primaires des règles sont donc les Tech Talks et une technote publiée par Apple le 8 juin, « TN3212: Adopting gesture recognizers for Sidecar touch support », dont l’Overview indique que « In macOS 27, AppKit continues to standardize on gesture recognizers as the primary mechanism for input handling » (dans macOS 27, AppKit continue de faire des reconnaisseurs de gestes le mécanisme principal de gestion des entrées), et dont les sections « Explore updated APIs in macOS 27 », « Detect touch capability », « Handle control events » et « Configure scroll behavior » décrivent la surface d’API que les Tech Talks du 28 octobre démontrent.6 Chaque nouveau symbole cité par la technote figure dans la documentation d’Apple avec introducedAt macOS 27.0 et sans indicateur bêta, récupéré le 28 octobre à midi PT, et, à l’exception des deux clés Info.plist, est déclaré dans le SDK macOS 27.0 inclus dans Xcode 27.1 (27A9275), vérifié dans les en-têtes et les interfaces Swift de ce Mac (analyse de l’auteur).7 Les trois symboles de gestes système cités par le Tech Talk n’y sont pas, pas plus qu’un ActivityKit disponible sur macOS ; les deux points sont traités plus bas.

Rien à faire, et ce que vous y gagnez

Le volet compatibilité est généreux. Le Tech Talk AppKit s’ouvre là-dessus : « 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), et il en va de même pour Mac Catalyst (0:52).3 Dans AppKit, « Standard buttons, controls, tables, collections, split views, tabs, scrolling, and more are all touch native » (1:10).3

Ce qui n’est pas natif est émulé : « for existing custom AppKit mouse interactions, or if you use non-Apple UI frameworks, AppKit intelligently emulates the mouse » (1:17) (pour les interactions souris AppKit personnalisées existantes, ou si vous utilisez des frameworks d’interface tiers, AppKit émule intelligemment la souris).3 La technote détaille l’émulation pour les frameworks tiers : « 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 » et « A two-finger pinch or rotation simultaneously emulates both the trackpad magnify and rotate gestures ».6 La version du Tech Talk : « a one-finger scroll with momentum, click, drag with a small hold delay, and even pinch for rotation and magnification » (11:28).3 L’émulation est générique et s’applique fenêtre par fenêtre, car « AppKit can’t determine what kind of interactions are allowed at any particular location of your non-Apple UI framework content » (11:17).3

Une fois la prise en charge native ajoutée, vous désactivez l’émulation : « 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 La clé est documentée pour macOS 27.0, et sa page indique : « 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

La façon dont le Tech Talk de design cadre les choses compte pour ce que « rien à faire » veut dire visuellement : « 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), et « Touch is a secondary input for macOS, and therefore has little impact on how macOS looks » (1:06) (le tactile est une entrée secondaire pour macOS et a donc peu d’incidence sur son aspect).4 Il n’existe ni mode tactile ni disposition compacte. C’est l’inverse de la situation de l’iPhone Duo, où l’écran interne annonce des classes de taille regular dans les deux dimensions.

Les reconnaisseurs de gestes sont la seule porte d’entrée

La phrase qui organise tout le reste se trouve à 3:45 dans le Tech Talk AppKit : « In fact, gesture recognizers are the only way to get direct touches on macOS. »3 Juste avant : « Starting with macOS Golden Gate, gesture recognizers are the preferred approach in AppKit » (3:33), et « gesture recognizers have become the shared input language across SwiftUI, Mac Catalyst, and now AppKit » (3:38).3 La technote dit la même chose par l’autre bout : « AppKit doesn’t deliver Sidecar touch events through the responder chain or through event monitors », et, dans une note, « Local and global event monitors don’t receive touch events. Touch events don’t go through NSApp or sendEvent(_:). »6

Cela a trois conséquences pour une base de code AppKit.

Premièrement, les boucles de suivi. L’ingénieur du Tech Talk reconstruit un puzzle de câblage qui utilisait « a custom NSView with a mouseDown(with:) override that uses the standard tracking loop technique » (3:13), en appelant nextEvent(matching:) jusqu’au relâchement de la souris, et il dit « Migrate your mouse tracking loops to gesture recognizers » (3:51).3 La migration n’est pas un tout ou rien : « 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) (les boucles de suivi restent prises en charge et peuvent coexister avec des reconnaisseurs réservés au toucher ; ajouter de tels reconnaisseurs pourra vous sembler la voie la plus rapide et la moins risquée pour une version mineure de votre app).3 La première étape est le refactoring que le Tech Talk effectue avant d’ajouter quoi que ce soit : « The first step is to refactor my tracking loop into separate start, continue, end, and cancel tracking functions » (4:11), afin que la boucle souris et le reconnaisseur tactile puissent les partager.3 Le listing d’Apple, mot pour mot :

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

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

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

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

La recette d’un reconnaisseur réservé au toucher tient alors en deux affectations de propriétés : « 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)

L’action aiguille les états .began, .changed, .ended et .cancelled du reconnaisseur vers les quatre fonctions. La raison d’être du chemin d’annulation est celle que le Tech Talk donnait pour le bouton : « If tracking is canceled due to a system gesture like Exposé, scroll, or any other reason, I can revert any unintended changes » (2:41), et la règle de la technote est « 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 remonte à macOS 10.10 et allowedTouchTypes à 10.12.2 ; rien dans cette recette n’est nouveau.7

Deuxièmement, les règles qu’imposent les reconnaisseurs. La technote : « If your view is covered by another, often transparent, view, your gesture recognizer won’t be triggered », et « You can’t place views on top of standard framework controls, because those controls now use gesture recognizers internally », avec sa propre porte de sortie : « 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 Un reconnaisseur personnalisé doit aller jusqu’au bout : « End your active gesture recognizer by transitioning to ended, failed, or cancelled. If you don’t, recognizers are blocked from activating. »6 Et un changement de comportement limité aux sous-classes compilées avec le nouveau SDK : « 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 », parce que « Subclasses of NSGestureRecognizer must implement location(in:) to report a meaningful location. »6

Troisièmement, ce que vous perdez. Pour les actions des contrôles, la technote indique que le passage aux reconnaisseurs sur NSControl « changes the timing of when AppKit delivers control action messages with respect to event processing », si bien que currentEvent « no longer returns the event that triggered an action » ; elle renvoie à NSEvent.pressedMouseButtons et aux modifierFlags de niveau classe, et ajoute que « a touch is not part of pressedMouseButtons ».6 Et une sous-classe qui surcharge une méthode du bouton gauche de la souris en paie le prix : « 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

Contrôles : des événements à la place de mouseDown

Le premier refactoring du Tech Talk AppKit porte sur un bouton. L’original sous-classait NSButton et surchargeait mouseDown(with:) pour savoir quand le suivi commençait et se terminait ; au toucher, « the buttons work, but AppKit must emulate mouse events to pass to the mouseDown override » (2:17).3 Le remplacement passe par les événements NSControl « directly on NSButton without the need to subclass » (2:27) ; le listing de la page du Tech Talk à 2:24 enregistre trois appels addTarget(_:action:for:) sur le bouton, pour [.trackingBegan, .trackingEntered], [.trackingExited, .trackingEndedInside] et .trackingCancelled, et ces événements exposent aussi l’état qu’une surcharge de la souris ne voyait jamais : « If tracking is canceled due to a system gesture like Exposé, scroll, or any other reason, I can revert any unintended changes » (2:41) (si le suivi est annulé par un geste système comme Exposé, par un défilement ou pour toute autre raison, je peux annuler les modifications involontaires).3 Ces événements ne sont pas récents : « NSControl events are available for standard AppKit controls, and most control events are available all the way back to macOS 11 » (2:51).3 Le Tech Talk renvoie, pour ce modèle, à la session WWDC26 qu’il appelle « Modernizing your AppKit app » ; la session que la technote cite comme vidéo associée s’intitule « Modernize your AppKit app » (session 289 de la WWDC26).36

macOS 27 ajoute des cas à NSControl.Events, d’après la section « Handle control events » de la technote : 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 ») et applicationReserved pour vos propres usages.67

Vient ensuite l’exclusivité. « By default, only one view can be interacted with at a time » (7:20) (par défaut, on ne peut interagir qu’avec une seule vue à la fois), ce que le Tech Talk appelle l’exclusivité des gestes et que la technote justifie par la compatibilité : « For maximum compatibility, AppKit restricts gesture activations to a single view hierarchy at a time », et « Unlike in iOS, the person can’t perform multiple interactions simultaneously, though scrolling is a notable exception. »36 Vous vous en affranchissez vue par vue : « The API to control gesture exclusivity is the exclusiveGestureBehavior property on NSView » (7:48). Par défaut, la propriété « inherits its parent’s exclusive gesture behavior » (7:57), et « By setting the exclusiveGestureBehavior property on the stove view to .notExclusive, the child slider subviews all become non-exclusive as well » (8:01) ; l’app entière s’en affranchit avec la clé Info.plist NSViewGestureRecognizerIsExclusive.367 Le Tech Talk dit que la propriété « is available in the next SDK » (7:54). La documentation d’Apple la répertorie en macOS 27.0 sans indicateur bêta, la technote de juin la décrit, et le SDK macOS 27.0 inclus dans Xcode 27.1 la déclare API_AVAILABLE(macos(27.0)) avec le commentaire « Defaults to .inherit » dans NSView.h : le SDK que le Tech Talk appelle « next » était donc déjà livré quand le Tech Talk a été mis en ligne (analyse de l’auteur à partir des en-têtes installés).367

36 points

Le Tech Talk de design donne le chiffre trois fois et le Tech Talk AppKit le répète. « 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 La cible est invisible par conception : « 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) (les contrôles n’ont pas changé de taille et n’exigent donc pas de nouvelle mise en page).4

Pour les vues personnalisées, la consigne est d’agrandir la zone de toucher, pas le contrôle. Les nœuds de câblage du Tech Talk AppKit étaient « a little tricky to touch » (5:14), si bien que l’ingénieur a ajouté un paramètre expandHitRect qui « 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), une technique qu’il recommande « for small resize or grab handles for selected objects in a canvas view » (6:07).3 La version du Tech Talk de design pour les contrôles non Apple : « consider increasing the touch target area around your control instead of changing the control size » (9:51).4

La taille des contrôles ne bouge pas. « 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), et « 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 Pour les vues de type réglages, « use FormStyle. Here as well, each row by default measures the 36-point height » (10:28).4 Les contrôles small et mini restent autorisés : « They fully support touch regardless of their size » (10:46), avec une règle pour les contrôles personnalisés : « If your app is using custom small controls, ensure touch works, even though the tap target might be small » (10:50), parce que « touch events should never be ignored » (11:00).4

Le framework se charge du plus difficile pour les trois contrôles qui ne peuvent pas faire 36 points : « the stepper, dial, and slider » (13:54) « now expand in place when interacting via touch » (14:07), sans que le toucher qui les agrandit ne modifie leur valeur (14:26), et « collapse themselves when I’m not interacting with them » (14:41) ; pour les curseurs, c’est une option, puisque « sliders have the option to expand when presented small » (15:36).4 Les menus s’adaptent aussi : « when using touch, the menu shows slightly larger rows to help make selection easier » (11:23), et les vues transitoires peuvent en faire autant : « 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

Le survol disparaît

« Direct touches don’t have an equivalent to mouseMoved events » (10:38) (les touchers directs n’ont pas d’équivalent aux événements mouseMoved) : tout ce qui apparaît au survol exige donc une décision.3 Les règles du Tech Talk AppKit : « 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) et « for hidden essential controls, install a touch-only click gesture recognizer to temporarily show the element on a touch tap » (10:57).3 La technote confirme que le chemin du pointeur reste intact : « Hovering via mouseMoved(with:) is still managed with NSTrackingArea. »6

Les règles du Tech Talk de design sont les mêmes, vues du côté de l’utilisateur. « hover actions that are purely showing information, like tooltips, are not required to work with touch » (11:53) ; les actions déjà faciles au toucher n’ont besoin d’aucune affordance, comme les boutons de défilement d’un carrousel, qui « remain hidden during a touch interaction » (12:22) parce que « horizontal scroll is always possible via touch » (12:19) ; « only the most important hover actions relevant to that content should reveal themselves » (12:30), Safari n’en affichant exactement que deux quand on touche une page (12:36) ; et les « actions that appear on hover be duplicated elsewhere in your UI » (13:05), le bouton de partage de Rappels se trouvant, au toucher, dans le menu contextuel de la ligne (13:20).4

Défilement, appui long, glisser, texte

Le défilement se fait à un doigt sur l’écran et à deux sur le trackpad (4:39).4 Quand un doigt doit dessiner au lieu de faire défiler, le Tech Talk AppKit règle « the decorating view’s enclosing scroll view to require two touches minimum for touch scrolling » (6:40) ; la propriété est NSScrollView.minimumNumberOfTouchesForScrolling, macOS 27.0, accompagnée de maximumNumberOfTouchesForScrolling, isTouchScrollingEnabled et scrollGestureForRelationships.37 Un reconnaisseur qui doit céder la place à un défilement règle isCancellableByScrollGesture ; « NSScrollView now supports pull-to-refresh functionality » via NSRefreshController ; et sur NSPanGestureRecognizer, la paire minimumNumberOfTouches et maximumNumberOfTouches « replace numberOfTouchesRequired », obsolète depuis 27.0.67

L’appui long est le geste tactile du Mac à la fois pour le glisser et pour le menu contextuel, et AppKit arbitre. « 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 Pour les menus, « 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), et « 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) (quand cette API de menu et les API de délégué de glisser-déposer du conteneur sont utilisées ensemble, AppKit coordonne le moment où un appui long devient un glisser-déposer ou un menu contextuel, et permet même à l’utilisateur de passer de l’un à l’autre).3 Le Tech Talk de design montre le point de vue de l’utilisateur : la photo « scales up under my finger » (3:50), son menu contextuel apparaît à côté (3:58), et le glisser referme le menu (4:05) ; Maj et Option fonctionnent toujours pendant un glisser au toucher (4:13).4 Pour les vues personnalisées, beginDraggingSession(items:gesture:source:) lance « a drag from a gesture recognizer », nouveauté de 27.0.67

Le texte est le point faible. La seule phrase de la technote est « NSTextSelectionManager allows custom text engines to support standard text gestures », et la classe est documentée pour macOS 27.0 avec le résumé « An object that coordinates text selection behavior for custom text views ».67 L’en-tête précise le contrat (analyse de l’auteur) : la classe « provides a centralized way to manage text selection interactions using a set of gesture recognizers », avec un mode d’interaction modifiable, sélection seule ou non interactif, un délégué qui stocke la sélection, et une source de données de mise en page.7 Aucun des deux Tech Talks ne traite des points d’insertion, des poignées de sélection ou d’un menu d’édition au toucher ; les recommandations de sélection du Tech Talk de design concernent des éléments, pour lesquels « on macOS we recommend to allow modeless selection through click and tap » (2:42), un toucher pour sélectionner et un double toucher pour ouvrir (3:10).4

Les gestes système, et le commutateur qui n’est pas documenté

macOS se réserve un ensemble de gestes à plusieurs doigts sur l’écran, « controlled by macOS and are therefore not available to any app running » (8:05) : trois doigts vers le haut pour Mission Control et vers le bas pour App Exposé (8:13), un pincement du pouce et de trois doigts pour afficher les apps et un écartement pour révéler le bureau (8:22), trois doigts à gauche ou à droite pour passer d’un espace à l’autre (8:32), des balayages depuis les bords supérieur et inférieur pour une barre des menus et un Dock masqués (8:37), un balayage sur la Dynamic Island pour solliciter Siri (8:46), et des balayages depuis les bords pour le centre de notifications et le centre de contrôle (8:51).4

Le Tech Talk AppKit se heurte au conflit avec trois curseurs : « 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), et montre le commutateur : « 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), avec cet avertissement : « Only disable system gestures if the interaction capabilities they open up are critical for the window » (8:42) (ne désactivez les gestes système que si les interactions ainsi rendues possibles sont essentielles pour la fenêtre).3 Le listing de code de la page du Tech Talk nomme les trois : disablesDirectTouchSystemGestures sur NSWindow, prefersDirectTouchSystemGesturesDisabled sur UIViewController et directTouchSystemGesturesDisabled() sur une View SwiftUI.3 Aucun des trois ne figure dans la documentation d’Apple le 28 octobre ; les points d’accès JSON renvoient une erreur 404 et les symboles sont absents des index d’AppKit, d’UIKit et de SwiftUI.7 Ma lecture, et non une déclaration d’Apple : ils sont le signe le plus net que le SDK supposé par les Tech Talks est celui qui est marqué « Coming soon ».

SwiftUI et Mac Catalyst

SwiftUI reçoit un seul nouveau type : « 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 est documenté sur les sept plateformes en 27.0, avec .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 et .all, ainsi que des paramètres inputKinds: sur onTapGesture, onLongPressGesture et les initialiseurs de TapGesture, SpatialTapGesture, LongPressGesture, DragGesture, MagnifyGesture et RotateGesture.7 La phrase de la technote est « Use GestureInputKinds to limit gestures to specific types of input in SwiftUI. »6

Mac Catalyst utilise ce qu’UIKit possède depuis iOS 9 : le Tech Talk dit « UITouch.touchType and UIGestureRecognizer’s allowedTouchTypes » (0:59) ; la propriété documentée est UITouch.type, avec l’énumération UITouch.TouchType, et allowedTouchTypes se trouve sur UIGestureRecognizer depuis Mac Catalyst 13.1.37 La formulation du Tech Talk est un lapsus, pas une nouvelle API.

Les Live Activities sur le Mac, en avance sur la documentation

Le troisième Tech Talk est court et avance une affirmation de taille. « The Dynamic Island has come to the Mac. To fully take advantage of its capabilities, Mac apps now support native Live Activities » (0:05), et « now in macOS Golden Gate, applications running on the Mac can create Live Activities directly » (0:57) (désormais, dans macOS Golden Gate, les applications exécutées sur le Mac peuvent créer directement des Live Activities).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).5 L’emplacement : « 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 Le code est celui d’iOS : le modèle de données dans ActivityAttributes (2:36), les présentations compacte et minimale dans ActivityConfiguration avec le view builder de la Dynamic Island (3:24), la seule présentation propre au Mac, « The menu bar expanded Live Activity view is created along with the ActivityConfiguration as a simple view » (3:52), tandis que « 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), des démarrages immédiats, programmés ou par push (4:40), une intégration « with existing backgrounding technologies on the Mac, like background tasks and user agents » (4:54), des actions via App Intents (5:56), et « If you have an iOS activity, there’s no code to port » (7:09).5 Deux règles sont reprises d’iOS : « Only a single Live Activity can be expanded at a time » (3:12), et « An activity is only expanded when interacted with or if explicitly triggered through an alert request » (3:06).5

La documentation d’Apple ne le dit pas encore. Le résumé de la page du framework ActivityKit mentionne « the Mac », mais son Overview indique « On Mac, it appears in the Menu bar », sa liste de plateformes se limite à iOS, iPadOS et Mac Catalyst 16.1, et Activity, ActivityAttributes, ActivityConfiguration, DynamicIsland ainsi que la clé NSSupportsLiveActivities ne mentionnent aucune plateforme macOS.87 La page Live Activities des HIG, dont le journal des modifications s’arrête au 13 octobre, ne décrit toujours que le chemin de l’iPhone jumelé : « Active Live Activities automatically appear in the Menu bar of a paired Mac », « Clicking the Live Activity launches iPhone Mirroring to display your app » et, sous « macOS dimensions », « Use the provided iOS dimensions ».10 Les SDK donnent raison à la documentation, pas au Tech Talk : dans le SDK macOS 27.0 inclus dans Xcode 27.1 comme dans le SDK macOS 27.2 inclus dans la bêta de Xcode 27.2 (27B5019j), l’interface macOS d’ActivityKit marque ActivityAttributes, Activity, chaque request et update comme @available(macOS, unavailable), vérifié sur ce Mac (analyse de l’auteur). La phrase juste pour une planification est donc la plus étroite : le Tech Talk dit que la fonctionnalité existe dans macOS Golden Gate, et ni la documentation ni aucun des deux SDK que j’ai vérifiés ne permet encore de la compiler. L’article sur la machine à états présente une implémentation iOS du modèle commun de démarrage, de mise à jour et de fin ; la durée, la fermeture et les limites en arrière-plan propres au Mac ne figurent encore dans aucune source.

Design : macOS ne change pas

Les règles de conclusion du Tech Talk de design sont assez courtes pour être citées en entier. « 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).4

La seule règle spatiale concerne les mains, pas les postures. « The edges of the display are easy to touch by grabbing the side of the display with my hand » (6:17), si bien que « 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), tandis que « the center of the display is best used for coarse, imprecise and big gestures » (6:46).4 Les gestes personnalisés sont soumis à trois contraintes : « your gestures should work with touch and trackpad and possibly Magic Mouse » (7:00), « Avoid adding gestures that only work with touch » (7:05) et « The action your gesture does should be duplicated elsewhere in the UI, for example in a menu » (7:37).4 Le Tech Talk autorise aussi ce que le Mac n’a jamais eu : « macOS now allows multiple touch gestures at the same time » (5:30), avec pour exemple deux curseurs de Logic sous deux doigts (5:45).4 C’est le versant utilisateur de la propriété d’exclusivité vue plus haut : par défaut, AppKit s’en tient à une seule hiérarchie de vues à la fois, et .notExclusive est la façon dont une app ouvre le reste.36

Tester aujourd’hui : Sidecar, et le SDK qui n’est pas là

Vous n’avez pas besoin du portable. « 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), et « The fastest way to get started with touch on Mac is with the Sidecar tools you already own » (12:09) (le moyen le plus rapide de commencer avec le tactile sur Mac, ce sont les outils Sidecar que vous possédez déjà).3 La technote exige un iPad sous iPadOS 27 et ajoute une réserve sur la vérification des capacités (NSScreen.touchCapabilities, un option set avec un bit .multiTouch) : dans macOS 27, la vérification « returns true for all displays when a touch-capable Sidecar display is connected, not just for the Sidecar display », avec ce conseil : « it’s better to handle events regardless of input source and decide on an alternate presentation based on the interaction type, if needed ».67

L’audit du Tech Talk, dans son propre ordre : « 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 Il existe aussi un skill : « there’s a gesture modernization skill that has an understanding of the features and changes I’ve talked about » (12:16) ; la vignette Xcode de la page d’accueil porte un commentaire provisoire, TK skill, et aucune source ne le nomme.23

Ce que contiennent les SDK livrés, en analyse de l’auteur à partir des en-têtes et des interfaces Swift de ce Mac : le SDK macOS 27.0 inclus dans Xcode 27.1 (27A9275) déclare NSScreen.TouchCapabilities, les cinq nouveaux cas d’événements NSControl, les propriétés tactiles de NSScrollView, NSRefreshController, beginDraggingSession(items:gesture:source:) et exclusiveGestureBehavior, tous en API_AVAILABLE(macos(27.0)), et l’interface macOS de SwiftUICore, que SwiftUI réexporte, déclare GestureInputKinds. Les trois commutateurs de gestes système ne figurent ni dans ce SDK ni dans le SDK macOS 27.2 inclus dans la bêta de Xcode 27.2 (27B5019j), que ce soit dans les en-têtes d’AppKit, dans l’interface de SwiftUI ou dans les en-têtes UIKit de Mac Catalyst, et l’interface macOS d’ActivityKit marque son API comme indisponible dans les deux.78

Ce sont les deux SDK que j’ai vérifiés ; la release candidate de Xcode 27.2 (27B48), que le flux des sorties d’Apple date du 19 octobre, est plus récente que cette bêta et n’a pas été vérifiée, si bien que ces absences valent pour les SDK nommés et pas au-delà.11

Ce qu’il faut installer pour tester aujourd’hui, sans que je l’aie testé : macOS 27.2 (26B123, sorti le 26 octobre d’après le flux) et la release candidate de Xcode 27.2, avec un iPad sous iPadOS 27 via Sidecar ; la technote décrit le toucher Sidecar comme fonctionnel dans macOS 27, et le flux ne mentionne aucune bêta de macOS 27.3 au 28 octobre.611 Une réserve tirée des notes de la RC elle-même : « macOS, watchOS, tvOS, and visionOS SDKs in Xcode 27.2 incorrectly report 27.1 as a valid deployment target », et « Mac Catalyst builds with a 27.1 or 27.2 deployment target might be unable to use newly introduced API ». Ne choisissez donc pas 27.1 comme cible de déploiement macOS (le flux des sorties mentionne macOS 27.0.1 et 27.2, et aucun macOS 27.1), et interprétez une cible Mac Catalyst en 27.1 ou 27.2 qui ne voit pas une nouvelle API comme ce problème connu plutôt que comme un symbole manquant.11

Ce qui manque, donc : la bêta de Xcode 27.3 que promet la page d’accueil, l’article AppKit vers lequel elle pointe, les trois symboles de gestes système et un ActivityKit disponible sur macOS (absents des deux SDK vérifiés, non vérifiés dans la RC 27.2), et toute déclaration concernant un simulateur. Les notes de la RC de Xcode 27.2 ne mentionnent le toucher qu’une fois, sous la forme d’un correctif du Device Hub pour des entrées qui s’arrêtaient « after a period of inactivity » (après une période d’inactivité), et les notes de macOS 27.2 ne contiennent aucune entrée sur le toucher, les gestes ou les Live Activities.11 Les API tactiles sont arrivées avec Xcode 27.1, les règles sont publiées, et la page d’accueil marque la suite « Coming soon ».

Un audit tactile pour n’importe quelle app Mac

Analyse de l’auteur, pas une recommandation d’Apple : les quatre étapes du Tech Talk, dans l’ordre, sous forme de liste de contrôle. Aucun test en conditions réelles ne la soutient encore.

  1. Sidecar avec un iPad sous iPadOS 27, sur les versions les plus récentes de macOS et de Xcode (macOS 27.2 et la release candidate de Xcode 27.2), et chaque écran de l’app touché avant de modifier quoi que ce soit.
  2. Une recherche des surcharges de mouseDown(with:) et des boucles nextEvent(matching:), chacune affectée à des événements de contrôle, à une méthode de délégué ou à un reconnaisseur de gestes.
  3. Une passe sur les petits contrôles et les zones de toucher, en agrandissant la zone tactile là où cela aide et sans changer la mise en page ; le Tech Talk autorise un contrôle plus petit tant que le toucher y fonctionne.
  4. Une liste de tout ce qui apparaît au survol, avec une décision pour chaque élément : une infobulle reste réservée à la souris ; une action déjà facile au toucher n’a besoin de rien ; un contrôle essentiel reçoit un reconnaisseur de clic réservé au toucher et une place ailleurs dans l’interface, par exemple dans un menu contextuel.

La seule chose que l’audit ne produira pas, c’est une refonte, car la première règle du Tech Talk de design est qu’il ne doit y avoir aucune différence visuelle ; la seule mise en page qui peut changer selon l’entrée est une mise en page transitoire, un popover ou un menu personnalisé.

Ce qu’Apple n’a pas dit

Chacun de ces points est une question que les sources laissent ouverte, vérifiée dans le communiqué, la page d’accueil, les trois Tech Talks, la technote, la page des caractéristiques techniques, les notes de la RC de Xcode 27.2 et de macOS 27.2, et les quatre pages des HIG.

  • Quelle version intermédiaire de macOS apporte le tactile sur l’écran intégré, et quel SDK apporte les trois symboles non documentés. Le communiqué dit « macOS 27 » et ne nomme macOS 27.2 que dans sa note de bas de page sur Siri AI ; la page d’accueil indique « Xcode 27.3 beta », « Coming soon ».
  • Si un binaire compilé avec un SDK plus ancien obtient le même comportement tactile qu’un binaire recompilé avec le SDK macOS 27. Le Tech Talk dit « all apps » ; la technote ne lie au nouveau SDK que le changement de location(in:).
  • L’Apple Pencil ou la pression sur l’écran, et la question de savoir si la dalle détecte un doigt avant le contact. Les Tech Talks traitent de l’absence d’un état de survol semblable à celui de la souris ; aucune source ne mentionne de pencil, de pression ou de détection de proximité, et GestureInputKinds.pencil est répertorié pour macOS 27.0 comme tous les autres membres, alors qu’aucune source ne dit que l’écran détecte un pencil.7
  • Le tactile sur les écrans externes ou en mode capot fermé, et la possibilité pour les utilisateurs de désactiver le tactile.
  • L’édition de texte au toucher : points d’insertion, poignées, loupe et menu d’édition.
  • L’accessibilité avec l’écran tactile. La page des caractéristiques techniques cite AssistiveTouch et Touch Accommodations parmi les fonctionnalités du portable et ne dit pas si elles sont nouvelles sur le Mac.9
  • La façon dont une app « Designed for iPad » reçoit les touchers sur l’écran du Mac, et si cela diffère de Mac Catalyst.
  • Un chemin par le simulateur ou le Device Hub pour le tactile sur Mac sans iPad.
  • Le contenu web : WKWebView et Safari transmettent-ils aux pages des événements tactiles ou des événements de pointeur.
  • La relation entre les fenêtres ou le contenu plein écran et la Dynamic Island, et l’API de zone sûre qui la signale.
  • Les détails des Live Activities sur macOS : la version intermédiaire et le SDK, l’obligation ou non de NSSupportsLiveActivities, le fonctionnement du push-to-start et de l’enregistrement APNs sur le Mac, et les dimensions d’une activité native du Mac.

Le calendrier

  • 28 octobre : précommandes dans 30 pays et régions ; la page développeur et les trois Tech Talks ; la technote est en ligne depuis le 8 juin.126
  • 6 novembre : le portable arrive chez les clients et en magasin.1
  • 18 novembre, de 9 h à 10 h PT, et 19 novembre, de 18 h à 19 h PT : Group Labs Touch on Mac, en ligne, avec des ingénieurs et des designers d’Apple.2
  • « Coming soon » : la bêta de Xcode 27.3, les ressources de documentation, les ressources de design.2
  • En novembre : la mise à jour d’Apple Creator Studio dont le communiqué décrit les fonctionnalités tactiles de Logic Pro et de Final Cut Pro ; les apps tierces qu’il nomme « will be available later this year » (seront disponibles plus tard cette année).1

Points clés à retenir

Pour les développeurs AppKit : les contrôles standard sont désormais nativement tactiles ; votre code mouseDown(with:) personnalisé est émulé tant que vous ne passez pas aux événements de contrôle ou aux reconnaisseurs de gestes, et un NSPanGestureRecognizer réservé au toucher, avec buttonMask = 0 et allowedTouchTypes = .direct, est la voie que le Tech Talk recommande pour une version mineure ; les API figurent dans le SDK macOS 27.0 dont vous disposez déjà.37

Pour les développeurs SwiftUI et Catalyst : vos gestes fonctionnent déjà ; GestureInputKinds est le seul nouveau type SwiftUI, et la réponse de Catalyst est UITouch.type et allowedTouchTypes.37

Pour les designers : 36 points, invisibles ; pas de refonte ; les actions de survol essentielles accessibles au toucher et placées aussi ailleurs dans l’interface, par exemple dans un menu contextuel, les infobulles étant dispensées ; une interface dense sur les bords, des gestes amples au centre.4

Pour la planification : testez dès maintenant avec Sidecar ; avant de construire quoi que ce soit qui désactive les gestes système ou crée une Live Activity native du Mac, vérifiez que le SDK installé déclare ces API, puisque les deux SDK examinés ici ne le font pas et que la release candidate de Xcode 27.2 n’est pas vérifiée ; le prochain SDK promis par Apple est la bêta de Xcode 27.3.278

Questions fréquentes

Mon app Mac existante fonctionne-t-elle avec le tactile ?

Apple répond oui pour la plupart des apps : « many existing apps work with Touch right away, because macOS automatically translates touches into clicks », et le Tech Talk AppKit dit que les composants standard d’AppKit, de SwiftUI et de Mac Catalyst et les gestes existants « just work » (fonctionnent, tout simplement).13 Le code personnalisé de suivi de la souris est émulé tant qu’il n’est pas passé aux événements de contrôle ou aux reconnaisseurs de gestes ; un framework d’interface tiers reçoit une couche d’émulation générique que NSIsTouchNative désactive dès que l’app gère elle-même le toucher.36

Comment recevoir un toucher direct dans AppKit ?

Avec un reconnaisseur de gestes. Le Tech Talk dit que « gesture recognizers are the only way to get direct touches on macOS », et la technote indique que les événements tactiles ne passent ni par la chaîne de répondeurs, ni par les moniteurs d’événements, ni par NSApp ou sendEvent(_:).36 Un reconnaisseur réservé au toucher règle buttonMask sur 0 et allowedTouchTypes sur .direct.3

Quelle est la cible tactile sur macOS ?

36 points, « the same physical size on display as iOS’s 44 points » (la même taille physique que les 44 points d’iOS). Les contrôles du framework la respectent déjà sans changer de taille ; pour les vues personnalisées, agrandissez la zone de toucher plutôt que la vue.43

Comment tester le tactile sans le nouveau MacBook Pro ?

Connectez un iPad sous iPadOS 27 via Sidecar. La condition posée par le Tech Talk est « With the latest macOS beta and developer tools » (11:59), et aucune bêta de macOS 27.3 n’est sortie : la configuration que j’essaierais est donc macOS 27.2 avec la release candidate de Xcode 27.2, sans l’avoir testée.3611

Les API tactiles sont-elles dans le SDK aujourd’hui ?

Oui, pour tout ce que les Tech Talks démontrent, sauf les commutateurs de gestes système et les Live Activities natives du Mac, absents des deux SDK examinés ici (la release candidate de Xcode 27.2 n’a pas été examinée). Le SDK macOS 27.0 inclus dans Xcode 27.1 déclare NSScreen.TouchCapabilities, les nouveaux cas d’événements NSControl, les propriétés tactiles de NSScrollView, NSRefreshController, exclusiveGestureBehavior et la session de glisser fondée sur un geste, et l’interface de SwiftUICore déclare GestureInputKinds ; la documentation d’Apple les répertorie en macOS 27.0 sans indicateur bêta.7 Les commutateurs de gestes système au niveau de la fenêtre, du view controller et de la vue ne figurent ni dans la documentation ni dans les SDK de Xcode 27.1 ou de la bêta de Xcode 27.2, ActivityKit marque son API comme indisponible sur macOS dans les deux, et la page d’accueil marque la bêta de Xcode 27.3 « Coming soon ».278

Une app Mac peut-elle créer des Live Activities ?

Le Tech Talk répond oui dans macOS Golden Gate, avec le même code ActivityKit et WidgetKit que sur iOS et une présentation dans la barre des menus sur les Mac sans Dynamic Island.5 La documentation d’ActivityKit et les HIG ne répertorient pas encore macOS comme plateforme pour les activités créées par une app, elles décrivent le chemin de la barre des menus via l’iPhone jumelé, et l’interface d’ActivityKit dans les SDK de Xcode 27.1 et de la bêta de Xcode 27.2 marque l’API comme indisponible sur macOS.108

D’où viennent les faits de cet article ?

Du communiqué, de l’article d’actualité et de la page d’accueil pour les développeurs, des pistes de sous-titres anglais des trois Tech Talks avec le premier repère de chaque citation entre parenthèses, de la technote de juin, du JSON de documentation d’Apple pour chaque symbole cité, de la page des caractéristiques techniques, des notes de version de la RC de Xcode 27.2 et de macOS 27.2, et des quatre pages des HIG, tous récupérés le 28 octobre 2026, ainsi que des en-têtes et des interfaces Swift des SDK macOS 27.0 et de la bêta 27.2 sur mon Mac, ce qui relève de l’analyse de l’auteur. La couverture de presse n’est pas une source.

Sources


  1. Apple Newsroom, Apple unveils groundbreaking MacBook Pro with PROLED XDR Display, 28 octobre 2026, repéré pour la première fois dans le flux du Newsroom à 10 h 09 PT (l’horodatage updated du flux indique 17:09:28Z). Sections « Touch Arrives on Mac », « Say Hello to the Dynamic Island on Mac » et « macOS 27 Golden Gate » ; prix et disponibilité ; note de bas de page 4 sur les apps tierces. ↩↩↩↩↩↩↩↩

  2. Apple Developer, Say hello to Touch on Mac, 28 octobre 2026, et Get ready for Touch on Mac, consultée le 28 octobre 2026 à 11 h 49 PT : les trois Tech Talks, les « Touch on Mac Group Labs » le 18 novembre de 9 h à 10 h PT et le 19 novembre de 18 h à 19 h PT, et les vignettes « Xcode 27.3 beta », « Documentation resources » et « Design resources », chacune marquée « Coming soon », avec leurs liens conservés dans des commentaires HTML. ↩↩↩↩↩↩↩↩↩↩↩↩

  3. Apple Developer, Tech Talk Bring Touch to your Mac app, 13:19, Raleigh Ledet, 28 octobre 2026. Les citations proviennent de la piste de sous-titres anglais ; le temps entre parenthèses est le premier repère du passage cité. Parmi les listings de code de la page du Tech Talk : « 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) ; les trois listings reproduits dans l’article sont copiés mot pour mot depuis la page. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  4. Apple Developer, Tech Talk Design for touch on Mac, 16:52, Cas Lemmens, 28 octobre 2026. Citations tirées de la piste de sous-titres anglais, premier repère entre parenthèses. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  5. Apple Developer, Tech Talk Bring Live Activities to Mac, 7:40, Jonathan Tilley, 28 octobre 2026. Citations tirées de la piste de sous-titres anglais, premier repère entre parenthèses. ↩↩↩↩↩↩↩

  6. Documentation développeur Apple, TN3212: Adopting gesture recognizers for Sidecar touch support, historique des révisions « 2026-06-08 First published », consultée le 28 octobre 2026 à midi PT. Sections citées : 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 » et « Handle deprecations and behavior changes ». ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  7. JSON de documentation d’Apple (developer.apple.com/tutorials/data/documentation/<path>.json, les données derrière les pages liées ici), récupéré le 28 octobre 2026, de 11 h 55 à 12 h 05 PT. Répertoriés en macOS 27.0 sans indicateur bêta : NSScreen.TouchCapabilities et .multiTouch, NSControl.Events .trackingRepeated, .valueChanged, .primaryActionTriggered, .menuActionTriggered et .applicationReserved, NSScrollView .isTouchScrollingEnabled, .minimumNumberOfTouchesForScrolling, .maximumNumberOfTouchesForScrolling, .scrollGestureForRelationships et .refreshController, NSRefreshController, NSPanGestureRecognizer.minimumNumberOfTouches et .maximumNumberOfTouches, NSGestureRecognizer.isCancellableByScrollGesture, NSView.exclusiveGestureBehavior et ExclusiveGestureBehavior, NSView.beginDraggingSession(items:gesture:source:), NSTextSelectionManager, NSIsTouchNative (sa page : « 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, et GestureInputKinds avec ses membres (les sept plateformes en 27.0). Plus anciens : NSGestureRecognizer et les sous-classes concrètes (macOS 10.10), allowedTouchTypes (10.12.2), les cas de suivi de NSControl.Events (11.0), UITouch.type et UIGestureRecognizer.allowedTouchTypes (iOS 9.0, Mac Catalyst 13.1) ; numberOfTouchesRequired obsolète depuis 27.0. Introuvables (HTTP 404, absents des index des frameworks) : NSWindow.disablesDirectTouchSystemGestures, UIViewController.prefersDirectTouchSystemGesturesDisabled, directTouchSystemGesturesDisabled() de SwiftUI, et l’article « Adopting gesture recognizers in your app ». Vérification des SDK le 28 octobre 2026 (analyse de l’auteur), dans MacOSX27.0.sdk inclus dans Xcode 27.1 (27A9275) : la ligne 583 de NSView.h indique @property NSViewExclusiveGestureBehavior exclusiveGestureBehavior API_AVAILABLE(macos(27.0)); sous le commentaire « Defaults to .inherit » ; NSScreen.h déclare NSScreen.TouchCapabilities et touchCapabilities ; NSControl.h déclare NSControlEventTrackingRepeated, ValueChanged, PrimaryActionTriggered, MenuActionTriggered et ApplicationReserved ; NSScrollView.h déclare touchScrollingEnabled, minimumNumberOfTouchesForScrolling, maximumNumberOfTouchesForScrolling (ligne 148), scrollGestureForRelationships et refreshController ; NSRefreshController.h déclare la classe ; NSPanGestureRecognizer.h déclare minimumNumberOfTouches et maximumNumberOfTouches et marque numberOfTouchesRequired comme obsolète, avec minimumNumberOfTouches pour remplacement ; NSGestureRecognizer.h déclare cancellableByScrollGesture ; NSTextSelectionManager.h déclare la classe et son Mode, avec le commentaire « provides a centralized way to manage text selection interactions using a set of gesture recognizers » ; NSView.h déclare beginDraggingSession(items:gesture:source:) ; tous en API_AVAILABLE(macos(27.0)). SwiftUICore.swiftmodule/arm64e-apple-macos.swiftinterface déclare GestureInputKinds à la ligne 25274 sous @available(anyAppleOS 27.0, *), et l’interface de SwiftUI, qui le réexporte, déclare les paramètres inputKinds: sur onTapGesture, onLongPressGesture (ligne 22962) et les initialiseurs de SpatialTapGesture, LongPressGesture, DragGesture, MagnifyGesture et RotateGesture, tandis que TapGesture.init(count:inputKinds:) se trouve dans l’interface de SwiftUICore (ligne 18305). DirectTouchSystemGestures n’apparaît dans aucun en-tête AppKit, aucune interface Swift macOS de SwiftUI ou de SwiftUICore, ni aucun en-tête UIKit de Mac Catalyst, ni dans ce SDK ni dans MacOSX27.2.sdk inclus dans la bêta de Xcode 27.2 (27B5019j). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  8. Documentation développeur Apple, ActivityKit, consultée le 28 octobre 2026 : résumé « 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 », plateformes iOS, iPadOS et Mac Catalyst 16.1 ; Activity, ActivityAttributes, ActivityContent (iOS et iPadOS 16.1 ou 16.2), ActivityConfiguration et DynamicIsland de WidgetKit (iOS et iPadOS 16.1), et NSSupportsLiveActivities (iOS et iPadOS 16.1), aucun ne mentionnant macOS. Displaying live data with Live Activities, résumé : « 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. » Vérification des SDK (analyse de l’auteur) : ActivityKit.swiftmodule/arm64e-apple-macos.swiftinterface dans MacOSX27.2.sdk (bêta de Xcode 27.2, 27B5019j) porte @available(macOS, unavailable) sur ActivityAttributes, Activity, chaque surcharge de request et update ; le arm64e-apple-macos.swiftinterface de MacOSX27.0.sdk (Xcode 27.1, 27A9275) porte les mêmes marques. ↩↩↩↩↩↩↩

  9. Apple, MacBook Pro with PROLED XDR Display Technical Specifications, consultée le 28 octobre 2026 à 11 h 57 PT : « 14.2-inch (diagonal) tandem OLED display » en « 3024-by-1986 native resolution at 254 pixels per inch », « 16.3-inch (diagonal) tandem OLED display » en « 3472-by-2266 native resolution at 254 pixels per inch », les lignes Display « Touch », « Multi-Touch gesture support » et « Dynamic Island », et « ProMotion technology with adaptive refresh rates from 10Hz to 120Hz ». ↩↩

  10. Apple Developer, Human Interface Guidelines, Gestures (journal des modifications « September 9, 2024 »), Pointing devices (« June 21, 2023 »), Designing for macOS et Live Activities (« October 13, 2026 | Added guidance for limited width layouts, and updated supported platforms and specifications. »), toutes consultées le 28 octobre 2026 ; aucune ne mentionne le tactile sur l’écran du Mac. 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 » et, sous l’intitulé « macOS dimensions », « Use the provided iOS dimensions ». ↩↩↩

  11. Documentation développeur Apple, Xcode 27.2 RC Release Notes, consultées le 28 octobre 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, consultées le même jour : aucune entrée ne mentionne le toucher, les gestes, Sidecar ou les Live Activities. Apple Developer, Releases, flux RSS récupéré le 28 octobre 2026 : « Xcode 27.2 RC (27B48) » daté Mon, 19 Oct 2026 10:00:00 PDT, « macOS 27.2 (26B123) » daté Mon, 26 Oct 2026 10:00:00 PDT, et aucun élément mentionnant macOS 27.3 ou Xcode 27.3. ↩↩↩↩↩↩

Articles connexes

Les images des éléments de menu disparaissent dans macOS 27 et iPadOS 27

macOS 27 et iPadOS 27 masquent par défaut les images des éléments de menu, et le résultat dépend du SDK de liaison. Troi…

17 min de lecture

L'ère de l'iPhone redimensionnable : préparez votre app avant septembre

iOS 27 place la limite des apps redimensionnables au niveau du SDK de compilation. La checklist : auditer les tailles fi…

14 min de lecture

Le Mac App Store interdit l'existence des gestionnaires de fenêtres. J'en ai publié un quand même.

App Sandbox interdit l'API dont tout outil de mosaïque de fenêtres a besoin, et Apple m'a répondu de publier hors de la …

14 min de lecture