On this page · 11 sections
- Status check: what Apple has and has not shipped since 29 October
- Which touch APIs are already in the macOS 27 SDK
- Availability guards: ship touch code without raising your deployment target
- Behaviour changes that still compile cleanly
- NSIsTouchNative: what the documentation now says
- Testing before the 27.3 beta and the hardware arrive
- What to check the day the Xcode 27.3 beta lands
- Plan by app type
- Mac Catalyst and SwiftUI notes for the same window
- How eCorpIT can help
- References
Summary. You can ship almost all Touch on Mac work today with Xcode 27.2. On 1 November 2026, Apple's Touch on Mac page still lists the Xcode 27.3 beta as coming soon, undated. But the SDK in Xcode 27.2 (build 27B52, released 29 October) already contains exclusiveGestureBehavior, isCancellableByScrollGesture, minimumNumberOfTouchesForScrolling, NSRefreshController and touchCapabilities, all marked macOS 27.0, and we type-checked each one. Only the three system-gesture opt-outs from Apple's tech talk are missing, from that SDK and from Apple's reference pages. Apple's China newsroom says a new iOS developer beta opens on 4 November and iOS 27.3 follows in December, the best timing signal available. One caution: Apple's talk ties Sidecar testing to its latest macOS beta and tools, and no macOS 27.3 beta is public yet. Finish the gesture recogniser migration on the shipping SDK, guard new calls with availability checks, and hold only the system-gesture code.
About this article. This is for teams maintaining Mac apps in AppKit, SwiftUI, Mac Catalyst or a cross-platform framework. On 1 November 2026 we checked Apple's Touch on Mac page, release notes, reference documentation, tech talks, Human Interface Guidelines and product pages, and built a scratch file against the Xcode 27.2 SDK. Xcode 27.3 had not shipped, so anything described as expected is our reading, not Apple's. No vendor paid for inclusion. Researched with AI assistance and reviewed by our editorial team.
Our Touch on Mac launch guide walks through the 8 changes Apple asks for. This follow-up answers a narrower question: what can you build, test and ship with the tools that exist today, and what has to wait for Xcode 27.3?
Status check: what Apple has and has not shipped since 29 October
The table draws on Apple's Touch on Mac and releases pages, the Xcode 27.2 and macOS 27.2 notes, Apple's China newsroom and Apple's US and India product pages. The rest of the Touch on Mac page, including its three tech talks, matches what our launch guide recorded on 29 October.
| Item | Status on 1 November 2026 |
|---|---|
| Xcode 27.3 beta | Coming soon on the Touch on Mac page; not on Apple's releases list |
| Latest Xcode | Xcode 27.2 (27B52), released 29 October, with the macOS 27.2 SDK and Swift 6.4 |
| Device Hub touch input | New in 27.2: touches on a Sidecar iPad or a MacBook with Touch reach the remote device as touches, including pinch and rotate |
| macOS 27.2 notes | No touch entries; the one AppKit item removes the EnablePasteboardPrivacyDeveloperPreview default |
| Group labs | 18 November, 9 to 10 a.m. PT (10:30 to 11:30 p.m. IST); 19 November, 6 to 7 p.m. PT (7:30 to 8:30 a.m. IST on 20 November) |
| iOS 27.3 | Features open for testing with the latest iOS developer beta from 4 November (China date); iOS 27.3 release in December |
| MacBook Pro with PROLED XDR Display | Pre-orders open; available from 6 November in the US; Apple India lists 9 November |
MacRumors reads Apple's China announcement as the first iOS 27.3 beta, arriving on 3 November in US time. Xcode has followed closely in this cycle: final Xcode 27.2 came three days after final macOS 27.2. So an Xcode 27.3 beta in early November and a final release around December is a fair expectation, nothing more. Apple has not said whether the touch SDK arrives in the first 27.3 beta.
Which touch APIs are already in the macOS 27 SDK
Apple's reference pages give each symbol an availability line, and on 1 November none of the pages below carried a beta label. Any team can test this in minutes. We type-checked a scratch file with Xcode 27.2 against the macOS 27.2 SDK at a macOS 12 deployment target, and ran a selector check on a Mac running macOS 27.0.1. The SDK column is that test. For symbols, yes means behind an availability check.
| API | Apple's reference page | Xcode 27.2 SDK | What it does | Ship now? |
|---|---|---|---|---|
| NSView.exclusiveGestureBehavior | macOS 27.0; defaults to inherit | Compiles | Gesture exclusivity for a view and its subviews | Yes |
| NSViewGestureRecognizerIsExclusive | Info.plist key, macOS 27.0; defaults to YES | No compile step | App-wide switch for one-view-at-a-time gestures | Yes |
| NSGestureRecognizer.isCancellableByScrollGesture | macOS 27.0; defaults to false | Compiles | Lets a scroll gesture cancel a control's recogniser | Yes |
| NSScrollView.minimumNumberOfTouchesForScrolling | macOS 27.0; defaults to 1 | Compiles | Two-finger scrolling on drawing and editing canvases | Yes |
| NSRefreshController and NSScrollView.refreshController | macOS 27.0 | Compiles | Pull to refresh in a scroll view | Yes |
| NSScreen.touchCapabilities | macOS 27.0 | Compiles | Reports whether a screen has multi-touch | Yes, sparingly |
| NSIsTouchNative | Info.plist key, macOS 27.0; defaults to NO | No compile step | Stops AppKit injecting mouse-emulation recognisers | Only with your own touch pipeline |
| GestureInputKinds (SwiftUI) | 27.0 on every Apple platform | Compiles | Limits a gesture to direct touch, indirect touch, pencil or pointer | Yes |
| NSWindow.disablesDirectTouchSystemGestures | No page found | Fails: no such member | Per-window opt-out from system touch gestures | Not possible yet |
| UIViewController.prefersDirectTouchSystemGesturesDisabled | No page found | Fails: nothing to override | Same opt-out for Mac Catalyst | Not possible yet |
| View.directTouchSystemGesturesDisabled() | No page found | Fails: no such member | Same opt-out for SwiftUI | Not possible yet |
Apple's macOS 27 release notes list NSRefreshController, exclusiveGestureBehavior and the touch-count scroll properties as new in that release. The 27.2 headers also mark isTouchScrollingEnabled (defaults to true), maximumNumberOfTouchesForScrolling (0 requires exactly the minimum) and scrollGestureForRelationships as macOS 27.0. The release notes spell that last one differently; use the header's spelling.
Two points could trip you up. Apple's talk describes exclusiveGestureBehavior as coming in the next SDK, but the property is already in the 27.2 headers. And a clean compile is not proof of behaviour. On our Mac, which has no touch display, touchCapabilities returned an empty value for all three screens. We have not seen what it returns on a touch display or over Sidecar. Apple's advice is to write event code that behaves the same for every input source, and to check that property only for a touch-specific option such as capturing a signature.
The system-gesture opt-outs matter most for games, instruments and full-surface canvases. Apple's talk shows all three in a code listing and advises using them only when an interaction is critical and only while that part of the window is on screen. Our launch guide noted on 29 October that the reference pages were missing. They were still missing on 1 November, and NSWindow did not respond to the selector at runtime on macOS 27.0.1. Treat the names as provisional until the SDK confirms them.
Availability guards: ship touch code without raising your deployment target
Xcode 27, 27.1 and 27.2 all support macOS deployment targets from macOS 12 to 27, according to Apple's requirements table. Most Mac apps should keep their current floor and wrap the new calls in an availability check:
// Compiles with Xcode 27.2 at a macOS 12 deployment target
// and does nothing on macOS 12 to 26.
func configureTouchBehaviour() {
if #available(macOS 27.0, *) {
// Drawing canvas: one finger draws, two fingers scroll.
canvasScrollView.minimumNumberOfTouchesForScrolling = 2
// Mixer panel: several faders can move at once.
mixerView.exclusiveGestureBehavior = .notExclusive
// A button inside a scrolling list yields to scrolling.
rowButtonRecognizer.isCancellableByScrollGesture = true
// Dense table: pull to refresh. Call endRefreshing() when done.
let refresh = NSRefreshController()
refresh.target = self
refresh.action = #selector(reloadRows)
tableScrollView.refreshController = refresh
}
}
Without the check, the compiler rejects these calls at any deployment target below macOS 27.0. When the 27.3 SDK arrives, read the introduced version on every symbol you adopt from it. If it says 27.3 rather than 27.0, the guard has to name macOS 27.3. Info.plist keys need no guard, because they only change behaviour on releases that read them.
We found no App Store deadline pushing a Mac-only app onto this SDK yet: Apple's April 2027 upload rule names the iOS, iPadOS, tvOS, visionOS and watchOS SDKs, not macOS. If you share a codebase with iOS, plan around our April 2027 upload checklist.
Behaviour changes that still compile cleanly
Some changes need no new API, so nothing warns you. Apple ties only the first row below to the macOS 27 SDK, so test the others on macOS 27 whichever SDK you build with.
| Change | Who it affects | What to do |
|---|---|---|
| A custom NSGestureRecognizer subclass that does not override location(in:) gets NSZeroPoint back and a console error when built with the macOS 27 SDK | Custom recognisers for drawing, timelines or node editors | Override location(in:) and return the right point |
| Xcode adds NSViewGestureRecognizerIsExclusive set to NO to new macOS projects; a project without the key is treated as YES | Teams with new and older apps that behave differently under multi-touch | Decide the setting deliberately per app |
| Overriding mouseDown(with:), mouseDragged(with:) or mouseUp(with:) on a control makes AppKit fall back to a tracking loop, even if the override calls super | Custom buttons, sliders and steppers | Use target-action pairs for tracking events |
| NSApp.currentEvent no longer reliably returns the event that triggered an action | Action methods that read modifier keys | Read NSEvent.modifierFlags or pressedMouseButtons, which report the state when you ask; a touch is not a pressed button |
| Direct touches never travel through the responder chain or event monitors | Apps that intercept input with local monitors | Use gesture recognisers, and filter touches with gestureRecognizer(_:shouldReceive:) |
On the second row, we found the key set to NO in Xcode 27.2's macOS app and document templates, but not in its multiplatform templates, so check any new target.
We would fix the first row first: a zero point produces bugs that look like hit-testing errors. Keep the quotes around the include patterns, or zsh stops with a no-matches error:
# Swift: custom recognisers, then multi-finger gaps and tracking loops
grep -rnE "class [A-Za-z0-9_]+ *: *NS[A-Za-z]*GestureRecognizer" --include='*.swift' .
grep -rnE "override func mouse(Down|Dragged|Up)|nextEvent\(|trackEvents\(|currentEvent|trackSwipeEvent" --include='*.swift' .
# Objective-C: the same two searches
grep -rnE "@interface [A-Za-z0-9_]+ *: *NS[A-Za-z]*GestureRecognizer" --include='*.h' --include='*.m' --include='*.mm' .
grep -rnE "\(void\) *mouse(Down|Dragged|Up):|nextEventMatchingMask:|trackEventsMatchingMask:|currentEvent|trackSwipeEventWithOptions" --include='*.m' --include='*.mm' .
For debugging, Apple offers the defaults NSGestureRecognizerCrashOnMissingOverrides and NSCrashOnStuckGestureTimeout. It counts a recogniser as stuck if it has not reached a terminal state 2 seconds after input stops, which can make the rest of the app look frozen.
NSIsTouchNative: what the documentation now says
NSIsTouchNative is a Boolean Info.plist key, introduced in macOS 27.0, with a default of NO. AppKit normally injects recognisers that turn raw touches into the mouse events a third-party UI framework expects; YES tells it to skip them. Apple's page says most AppKit apps do not need it: it is meant for apps that embed a non-AppKit rendering or input framework with their own touch pipeline.
Apple's gesture recogniser article lists the emulation you give up:
- A tap becomes a mouse-down followed straight away by a mouse-up.
- Touching and panning straight away becomes a trackpad scroll.
- Touching, holding briefly and moving becomes
mouseDown(with:), thenmouseDragged(with:), andmouseUp(with:)on lift.
- Touching and holding still becomes
rightMouseDown(with:), andrightMouseUp(with:)on lift.
- Two-finger pinch or rotate becomes the trackpad magnify and rotate gestures.
The emulation covers one or two fingers. A third finger during a pinch is ignored, and anything with three or more fingers needs gesture recognisers.
| Your app | Set NSIsTouchNative? | Reason |
|---|---|---|
| Pure AppKit or SwiftUI | No | Standard controls and recognisers are already touch native |
| Electron, Flutter or React Native for macOS with no native touch code | No | The emulation is what makes taps, scrolls and context menus work today |
| A cross-platform framework that has added direct touch handling | Yes, once that handling ships in your build | Emulation recognisers would compete with the framework's own |
| A game engine or Metal canvas with its own touch pipeline | Yes, after you test without emulation | Your code should own every touch |
Setting the key too early is the main risk. On our reading of Apple's list, an Electron or Flutter app that flips it before its framework handles touch loses scrolling and right-click on a touch display.
Testing before the 27.3 beta and the hardware arrive
Apple's article says that with an iPad connected over Sidecar, AppKit routes touch the same way it does on a Mac with a touch display, and it gives no minimum macOS version. Its guidelines also treat Sidecar as a touch route. The talk is narrower: it says the touch features are available over Sidecar with Apple's latest macOS beta and developer tools. On 1 November the newest macOS on Apple's releases page is final 27.2, with no 27.3 beta listed.
We have not tested Sidecar. Try it on macOS 27.2 first: tap a control and pan a canvas with a recogniser attached. If the iPad does not deliver touches to your recognisers, treat the 27.3 beta as a requirement for this path.
| Test path | What it covers | What it misses |
|---|---|---|
| Sidecar iPad, newest macOS you can install | AppKit touch routing, gesture recognisers, mouse emulation, exclusivity | The real panel's size and feel, and the system-gesture opt-outs |
| MacBook Pro with PROLED XDR Display | Everything, including system gestures and target size at arm's length | Nothing, but it arrives from 6 November in the US and 9 November in India |
| Device Hub in Xcode 27.2 via Sidecar or a MacBook with Touch | Multi-finger gestures such as pinch and rotate on iOS and iPadOS targets | AppKit apps; Device Hub drives simulators and remote devices |
| Trackpad and keyboard pass | Regressions for Mac users without touch | Touch behaviour |
| Xcode 27.3 beta, when posted | Any new touch APIs | Release builds; plan App Store uploads on the final Xcode |
Our Xcode 27 and Swift 6.4 guide has the background on Device Hub. Xcode 27.2 needs a Mac on macOS Tahoe 26.6 or later, so update older build Macs before the beta lands; our macOS 27 IT guide covers the wider upgrade.
A useful order of work for the next few weeks:
- Run the searches above and list every custom recogniser, mouse override and tracking loop.
- Fix
location(in:)on custom recognisers first, because it fails without a compile error.
- Move control subclasses to tracking events, add touch-only pan recognisers next to loops you cannot rewrite yet, and expand custom hit targets to the 36 points Apple's design talk sets for touch.
- Add the macOS 27.0 properties behind availability guards, then test every window, sheet and popover by touch, trackpad and keyboard.
- Bring your two hardest problems to a group lab on 18 or 19 November.
What to check the day the Xcode 27.3 beta lands
- Read the Xcode 27.3 and macOS 27.3 release notes for AppKit, SwiftUI and Mac Catalyst touch entries.
- Confirm whether the three system-gesture opt-outs now compile, and note the introduced version of each.
- Check that the symbols you shipped against still report macOS 27.0.
- Look for any touch run destination or simulator support, and any change to Device Hub.
- Look for the gesture modernisation skill Apple's talk mentions; we did not find it among the skills bundled with Xcode 27.2.
- Re-read Apple's requirements table for macOS host and deployment target changes.
- Build on a branch with the beta, keep CI on Xcode 27.2 until the final release, and file Feedback for anything that differs from the talks.
Plan by app type
| If your Mac app is | Do now with Xcode 27.2 | Still waiting on |
|---|---|---|
| A drawing, photo, video or 3D tool | Recogniser migration, two-finger canvas scrolling, 36-point hit targets | System-gesture opt-outs for full-screen canvases |
| A music or performance app | Non-exclusive containers for simultaneous faders and keys | System-gesture opt-outs for on-screen instruments |
| A business app with dense tables and forms | Hit targets, hover alternatives, context menus through menu(for:), pull to refresh | Nothing we know of |
| Built on Electron, Flutter or React Native | Test emulation behaviour; track your framework's release notes | Your framework's own touch handling, then NSIsTouchNative |
| A Mac Catalyst app | allowedTouchTypes and touch-type checks that already exist in UIKit | prefersDirectTouchSystemGesturesDisabled |
| A SwiftUI app | GestureInputKinds to separate direct touch from pointer input | directTouchSystemGesturesDisabled() |
Mac Catalyst and SwiftUI notes for the same window
Two Xcode 27.2 known issues affect Catalyst builds. Projects that use iOS 27.1-specific APIs show compile errors when building for Mac Catalyst; Apple's workaround is #if !targetEnvironment(macCatalyst) around the affected code. Separately, Catalyst builds with a 27.1 or 27.2 deployment target might not be able to use newly introduced API, and several SDKs wrongly offer 27.1 as a target. Leave deployment targets on whole releases until 27.3 settles.
For SwiftUI, a shared gesture can treat .directTouch and .pointer differently on Mac, iPad and iPhone with one code path, because GestureInputKinds is available from 27.0 on every Apple platform. If the same code targets iPhone Duo, our iPhone Duo SDK guide covers its layout APIs.
How eCorpIT can help
eCorpIT is a Gurugram-based technology organisation, founded in 2021, assessed at CMMI Level 5 and MSME certified, with senior-led engineering teams working across AWS, Microsoft and Google platforms. Our iOS and Swift app development practice can audit a Mac app for custom recognisers, mouse overrides and tracking loops, move them to the shipping SDK behind availability guards, and set up a touch test pass. Talk to us at /contact-us/.
Last updated: 1 November 2026.