macOS Sequoia 15 Release Notes
Update your apps to use new features, and test your apps against API changes.
Overview
The macOS 15 SDK provides support to develop apps for Mac computers running Sequoia 15. The SDK comes bundled with Xcode 16, available from the Mac App Store. For information on the compatibility requirements for Xcode 16, see Xcode 16 Release Notes.
Accessibility
Resolved Issues
Fixed: User might be unable to play newly added background sounds (Fire and Night). (128898875)
AccessorySetupKit
Resolved Issues
Fixed: Resolved an issue where iPhone and iPad apps on Apple Silicon Macs quit unexpectedly if AccessorySetupKit is linked. (99817447)
AdAttributionKit
Resolved Issues
Fixed: Resolved an issue where iPhone and iPad apps on Apple Silicon Macs quit unexpectedly if AdAttributionKit is linked. (121731262)
App Intents
Resolved Issues
Fixed: EntityURLRepresentation allows arbitrary custom URLs without validation. (119524801)
Fixed: Resolved an issue where iPhone and iPad apps on Apple Silicon Macs quit unexpectedly when SiriTipUIView is referenced. (128038651)
Fixed: Parameterless
@Parameterand@Propertywrappers might cause protocol conformance failures. (130219933)
Known Issues
@UnionValuetypes currently only work as intent results. Attempting to use a@UnionValueas the type of an intent parameter or entity property results in failure to compile. (128069844)
App Store
New Features
Starting in macOS 15, the App Store no longer needs twice the space free for an initial app download and install. The free space requirement will now be the final install size of the app, plus a small buffer. Developers should consider this change in any messaging they might have around size requirements. (123838124)
AppKit
New Features
Added API to request a window share when the user performs some action in the app. Presenter who starts a presentation while on a video conferencing call can now be given an option to share that presentation with other call participants. This addresses an issue where the presenter might not want to share all application windows, and might not have an affordance to start sharing the presentation once it has begun. The API allows one NSWindow to request sharing of another existing window, or of a window to be provided in a callback.
public func requestSharingOfWindow(_ window: NSWindow) async throws public func requestSharingOfWindow(usingPreview image: NSImage, title: String) async throws(115318870)
Resolved Issues
Fixed: AppKit’s “warn once” logs have been moved to os_log_error() with a “WarnOnce” logging category, in order to increase their visibility to developers. (75992959)
Application Firewall
Deprecations
Application Firewall settings are no longer contained in a property list. If your app or workflow relies on changing Application Firewall settings by modifying /Library/Preferences/com.apple.alf.plist, then you need to make changes to use the socketfilterfw command line tool instead. (124405935)
ARKit
Resolved Issues
Fixed: iPhone and iPad apps on Apple Silicon Macs quit unexpectedly when initializing
ARSkeletonDefinition. (128038936)
Automation
New Features
To improve security, the process of allowing an application to control Finder has changed. Instead of a modal “Allow/Don’t Allow” dialog, the attempt to control Finder fails, and a notification appears that directs the user to allow control in System Settings > Security & Privacy > Automation. (129086419)
Backup
Resolved Issues
Fixed: Attempting to create a new encrypted Time Machine backup on a Time Capsule or other AFP file server will fail. (129082348)
Camera
Resolved Issues
Fixed: Using presenter overlay in full-size mode with a single shared window and reactions at the same time can result in glitching. (128586125)
CFNetwork
Resolved Issues
Fixed:
CFNetworkExecuteProxyAutoConfigurationScriptandCFNetworkExecuteProxyAutoConfigurationURLhave always returned a +1 retained CF type object, but the function declarations were not decorated with theCF_RETURNS_RETAINEDattribute until iOS 18, macOS 15, tvOS 18, and visionOS 2.For C-based languages, the clang static analyzer might note if the object is leaked. No source code changes are required, but they are encouraged to fix the leak.
For Swift, this changes the return type of these functions from
Unmanaged<>to the actual CF type returned, which will require a source change to fix when compiling with newer SDKs. However, Swift programs compiled with older SDKs will continue to work on the new OSes, though the returned CF type object will continue to leak as it did prior to this change. (126154509)
ContactProvider
Resolved Issues
Fixed: Resolved an issue where iPhone and iPad apps on Apple Silicon Macs quit unexpectedly if ContactProvider is linked. (124717115)
Core Location
Resolved Issues
Fixed: Resolved an issue where iPhone and iPad apps on Apple Silicon Macs quit unexpectedly when invoking -[CLLocationManager startMonitoringLocationPushesWithCompletion:]. (128038918)
Core ML
Resolved Issues
Fixed: Core ML Model Deployment API is unavailable (
MLModelCollectionandMLModelCollectionEntry). Consider using Background Assets orNSURLSessioninstead. (122955353)Fixed: Inference time for large Core ML models is slower than expected on a subset of M-series SOCs (e.g. M1, M1 max) on macOS. (129682801)
Core Motion
Resolved Issues
Fixed: Resolved an issue where iPhone and iPad apps on Apple Silicon Macs quit unexpectedly when invoking +[CMAltimeter isAbsoluteAltitudeAvailable]. (128038968)
Core Spotlight
Resolved Issues
Fixed: iPhone and iPad apps on Apple Silicon Macs quit unexpectedly when invoking
-[CSSearchableItemAttributeSet setActionIdentifiers:]. (128039095)
Create ML
Known Issues
3D object views in Create ML might stop rendering correctly, causing occasional flickering or appearing fully blacked out. This will not negatively impact training. (132026726)
Workaround: To view object and object dimensions in viewport again, restart Create ML.
DirectoryService
Deprecations
DirectoryService plug-in support has been removed. Developers should migrate to Platform SSO. (119515880)
Finder
Resolved Issues
Fixed: Home Videos unexpectedly sync as Music Videos to iPod nano (7th generation). (94899119)
Foundation
New Features
JSONEncoder.OutputFormatting.sortedKeys will now sort keys with a different ordering. Previously, keys were sorted using a numeric, case-insensitive, or localized ordering. Beginning in beta 4, keys are sorted lexicographically based on the keys’ UTF-8 contents. (126874437)
Resolved Issues
Fixed: Date.ComponentsFormatStyle was incorrectly producing strings like
"1m"with theDate.ComponentsFormatStyle.Style.condensedAbbreviatedstyle and strings like"1min"with the.narrowstyle instead of the other way around. The behavior was corrected to match the behavior of Duration.UnitsFormatStyle.UnitWidth. (125790342)
FSKit
Resolved Issues
Fixed: Users with connected MSDOS volumes might receive an intermittent error on system startup saying the internal MSDOS partition cannot be repaired and needs to be reformatted. (130011123)
Headphone Accommodations
Resolved Issues
Fixed: Headphone Accommodations won’t be applied to headphones. (128964879)
iCloud Drive
Resolved Issues
Fixed: Frequently changed files syncing over iCloud Drive will use more data than expected. (128771010)
iPhone Mirroring
Resolved Issues
Fixed: Universal Clipboard might not to work during iPhone Mirroring. (128165996)
Fixed: Scrolling with a scroll wheel with Logitech mice or typing with a Bluetooth keyboard might not work with iPhone Mirroring. (129403645)
Fixed: The space bar does not work when Full Keyboard Access is enabled. (130535985)
Known Issues
If you have a device using iOS 18.0 beta 3 and one using macOS 15.0 beta 4, clicking a notification on your iPhone might result in timeout of a new iPhone Mirroring connection or interruption of an existing connection. (131780502)
Workaround: Update both iPhone and Mac to beta 4 or higher.
Logging
New Features
By default, the
sudocommand in macOS does not have logging enabled. To enable logging forsudo, simply remove the lineDefaults !log_allowedfromsudoersconfiguration file. (126771963)
Mac Catalyst
New Features
When building against the macOS 15.0 Catalyst SDK or newer, UIWindowScene systemFrame changes using UIWindowScene.GeometryPreferences.Mac can be animated by wrapping the request in the existing UIView animation API ( animate(withDuration duration:…) ). Mixing such systemFrame animations with animations of individual UIViews is not recommended - instead, rely on autolayout constraints to reposition scene contents during the systemFrame animation. (121456766)
Resolved Issues
Fixed: Starting with macOS 15.0, the activationState of all attached UIScenes in Mac Catalyst apps will now also be changed to UIScene.ActivationState.background when the machine and/or the attached displays go to sleep, as an indication that the scenes are not producing user-visible pixels. (104518600)
Fixed: When building against the macOS 15.0 Catalyst SDK or newer, the TrueValue and FalseValue for toggle switch elements (PSToggleSwitchSpecifier) in your Settings Bundle will be respected, when reading/writing User Defaults. (118947907) (FB13425114)
Maps
New Features
Introduced Place ID, a unique and persistent identifier. (129071038)
Added new resultTypes to MKLocalSearch.Request and additional PointofInterestCategory values. (129073725)
Introduced Place Card API to show Maps Place Card UI. (129073922)
Resolved Issues
Fixed: The Place Card API fails to load place details. (128231815)
Fixed: In searches that use MKLocalSearch.Request, the result type option physicalFeature is ignored. (128961972)
Fixed: Satellite map images might not appear for users on Intel Macs. (130466174)
Known Issues
Conversion between a point in the map view and a physical location (CLLocationCoordinate2D) might be imprecise at high zoom levels. (129042241)
MarketplaceKit
Resolved Issues
Fixed: Resolved an issue where iPhone and iPad apps on Apple Silicon Mac and Apple Vision Pro quit unexpectedly if MarketplaceKit is linked. (132598608)
Music
Resolved Issues
Fixed: Artwork for the currently playing song might be incorrectly displayed in the Music window. (128688400)
Networking
Resolved Issues
Fixed: For apps linked on macOS 15 / iOS 18 or newer, the default User-Agent request header field value generated by URLSession now includes the unlocalized bundle name instead of the localized bundle name. (117380285)
Notifications
Resolved Issues
Fixed: User might be unable to snooze Calendar notifications. (128564243)
NSToolbar
New Features
The new
-removeItemWithItemIdentifier:method allows removing an item with the specifieditemIdentifier. Note that all items matching the specified identifier will be removed when using this method (i.e. specifyingNSToolbarFlexibleSpaceItemIdentifierwill remove all flexible space items). To remove only a single space item, use-removeItemAtIndex:instead. (2823286)The
NSToolbar.allowsDisplayModeCustomizationproperty allows a toolbar to enable display mode customization independently of item customization. Some users have an easier time finding items when they are labeled so it’s important to support them with the choice of display modes. This property is enabled by default for apps linked on macOS 15.0 or later, otherwise it follows the value ofallowsUserCustomization. Make sure to verify all your items provide labels using theNSToolbarItem.labelproperty to support Icon and Text mode.Note that Text Only mode is omitted automatically when one or more items don’t provide sufficient
menuFormRepresentations. (2858103)NSToolbarItemgains a newhiddenproperty. A hidden item will not be visible in the toolbar, but will be visible during user customization so that users can specify where the item should appear when it is shown. For apps that support multiple windows with synchronized toolbars (NSToolbars with shared identifiers), use thehiddenproperty to display a particular item in one window but not another.Note that there is an important difference between an
enableditem and ahiddenitem. Typically on macOS, a user interface element that does not currently apply will be disabled but remains visible (main menu items, context menu items, toolbar items). The introduction of this newhiddenproperty does not indicate that toolbar items should be hidden when they don’t apply. An item should only be hidden in very special circumstances such as the Downloads button in Safari which only shows when there are downloads present, or the Displays popup button in Screen Sharing which is only visible when viewing a remote machine with multiple displays. (114109109)When responding to an
NSToolbarWillAddItemNotificationtheuserInfoDictionarynow contains a value specifying the item’s new index which can be accessed via theNSToolbarNewIndexKey. This value is only available on macOS 15.0 or later. (114661283)The new
itemIdentifiersproperty allows for easy access to an identifier-only representation of items in the toolbar which is useful when implementingNSToolbarDelegatemethods such as-toolbar:itemIdentifier:canBeInsertedAtIndex:. Assigning a new array of itemIdentifiers will replace all items in the toolbar with the new configuration by doing the minimal amount of insert/remove operations necessary. This property is also key value observable. Note, set new values to this property with caution when the toolbar is customizable. The user might find it disruptive to have their curated items moved or removed unexpectedly. The new value will also replace any saved customization defaults. (115908180)
Deprecations
The
-setConfigurationFromDictionary:and-configurationDictionarymethods are now deprecated. The same values might be obtained from theitemIdentifiers,displayMode, andvisibleproperties. (31540854)The
NSToolbarItem.allowsDuplicatesInToolbarproperty is now deprecated. The only items that are allowed to have shared identifiers are system space items. On apps linked against macOS 15.0 or later, an exception will be thrown if a new item is added to the toolbar when an item with that identifier already exists (excluding space items). (115908214)
Object Tracker
Resolved Issues
Fixed: Training Object Tracker reference objects might fail without warning for unsupported USDZ inputs. (129721127)
Photos
Resolved Issues
Fixed: Photos and videos might stop syncing via iCloud Photo Library. (128325085)
Platform
New Features
On Apple Silicon based devices with M3 or later, and A16 Bionic or later, the values returned by reading the CNTFRQ_EL0 and CNTVCT_EL0 registers have been updated to 1 GHz, instead of the prior value of 24 MHz. It is still recommended for apps to use libsystem APIs like
mach_absolute_time()for timekeeping. Your app will not be impacted by this change if it uses Apple’s timekeeping APIs. For compatibility purposes, this change will only be visible when using the SDK associated with this release or later. On macOS, applications running inside a Virtualization.framework VM will continue to receive the legacy behavior. (84639494)The firmware image for iBoot will be made available in cleartext in the PCC image. To reduce the overhead imposed by firmware encryption and align policies where appropriate, firmware encryption has been disabled for iBoot on iOS, macOS, watchOS, tvOS, and visionOS. See Private Cloud Compute for more details. (125171074)
Power
Resolved Issues
Fixed: Users with default wallpaper (macOS Beta) on Intel laptops with an AMD GPU might see elevated battery drain, device temperatures, and fan noise. (128623427)
Quick Look
Deprecations
Support for deprecated Quick Look Generator plugins is being removed. To provide previews and thumbnails for your custom file types, migrate to Quick Look Preview Extension and Thumbnail Extension API. (116791365)
RealityKit
New Features
USD files which use Catmull-Clark subdivision now render using subdivision in RealityKit. Meshes which produce less than 35,000 patches can render using subdivision. This can increase memory consumption and reduce rendering performance. (129016034)
Virtual objects now render using the Display P3 color gamut. When using a
DrawableQueueconnected to aTextureResourcewith the.colorsemantic, render using the Display P3 color space. (129017592)
Resolved Issues
Fixed: Resolved an issue where iPhone and iPad apps on Apple Silicon Macs quit unexpectedly when using ObjectCaptureSession. (117112309)
In iOS & iPadOS 17, macOS 14, visionOS 1 and earlier, UnlitMaterials’ blending modes inconsistently respond to
.blending,.color, and.baseColorsetters. In applications building against RealityKit from iOS & iPadOS 18, macOS 15, or visionOS 2, alpha-blending enablement should be configured explicitly with.blending = .transparent(opacity:). Developers are advised to check that their code-configured materials are alpha-blending as intended, and use the.blendingsetting where appropriate. (118210191)In iOS & iPadOS 17, macOS 14, visionOS 1 and earlier, transparent materials’ apparent final opacities respond inconsistently to
.blending,.color, and.baseColorsetters. In applications building against RealityKit from iOS & iPadOS 18, macOS 15, or visionOS 2, the final opacity of transparent materials is computed as a multiplication of its.coloror.baseColor’s alpha and.blending = .transparent(opacity:). Developers are advised to check that their code-configured transparent materials render with the intended final opacities, and update their usages of.color,.baseColorand/or.blending = .transparent(opacity:)when necessary. (125431647)Fixed: Using an
Image 2D ArrayShader Graph node in Reality Composer Pro might result in corruption or a system crash. (127122590)Fixed: Reality files written by beta versions of RealityKit might not load in later versions. (128424173)
Fixed: Physics simulation behavior is different from previous releases. (128435086)
Fixed: Emphasize actions are always additive and should be played with
separateAnimatedValueset totrue. (128622689)Fixed: In the Swift 6 language mode, subclasses of the
Entityclass fail to compile. (128787131)Fixed: The
.triggermode of CollisionComponent no longer generates CollisionEvents when both involved collision shapes use the.triggermode. (129016567)
Deprecations
In previous versions, the order of child entities was sometimes preserved. Now, the order of an
Entity’s children might not be reliable and can change unexpectedly when any child is reparented. (129015381)
Screen Time
Resolved Issues
Fixed: When an Apple Watch is upgraded to 11.0 from an earlier Beta, Screen Time App Limits might be deleted for both the parent and child. If this occurs, parent will need to add back the app limits. (130981807)
ScreenCaptureKit
New Features
Windows recorded using the new SCRecordingOutputConfiguration API will now have a new “Stop Recording This Window” menu item in the purple window menu to stop the window’s recording stream. (125112908)
Deprecations
Applications utilizing deprecated APIs for content capture such as
CGDisplayStream&CGWindowListCreateImagecan trigger system alerts indicating they might be able to collect detailed information about the user. Developers need to migrate toScreenCaptureKitandSCContentSharingPicker. (120910350)
Security & Privacy
New Features
When attempting to change home directory of a user, dscl and dsimport will trigger privacy prompts. Previously this did not happen when a device was under MDM management. (121868524)
Setup Assistant
Resolved Issues
Fixed: FileVault pane is shown and is automatically enabled with recovery key when iCloud is signed in. (128770548)
Fixed: End of Setup Assistant might only show a blurred background with no text or buttons. (128771559)
Shortcuts
Resolved Issues
Fixed: The Shortcuts editor might offer some new actions that are not yet ready for use. If you save a shortcut with one of these actions, you might need to correct it after a future update with the corrected actions. (128841105)
Fixed: Some actions are missing from the Actions Drawer, but are still available for use. (128908702)
StoreKit
New Features
macOS now supports in-app
Offer Coderedemption. Use StoreKit Testing in Xcode to ensure your app responds correctly when customers redeem a Mac App Store Offer Code. (60096251)The SubscriptionStoreView now supports custom control styles. To create a custom control style, declare a type that conforms to SubscriptionStoreControlStyle and implement
makeBody(configuration:)method. (106819454)New standard styles are available for laying out subscription store view controls with a compact height. Use
pagedPickerandpagedProminentPickerfor a platform appropriate paging effect, orcompactPickerto place options in a horizontal stack. For watchOS, the newpagedPickerstyle is available for laying out SubscriptionStoreView controls with a compact height. (110286601)Use types such as
SubscriptionOptionGroupandSubscriptionPeriodGroupSetto declare a hierarchical structure for your SubscriptionStoreView. You can use thesubscriptionStoreOptionGroupStyle(_:)to choose between presenting groups as a tab view or as navigation links. (110429924) (FB12264937)The subscription status RenewalInfo object now supports new properties
renewalPriceandcurrencyto indicate the price at which the subscription will renew, and its currency. There is also a newofferproperty containing the information of the offer that will be applied to the next renewal, if there is any. This includes the offer ID, the offer type, and the payment mode. (114217892)Finished consumables can now be included when using the Transaction APIs. Users can enable this feature by setting
SKInAppPurchaseHistoryIncludesConsumablesto true in app’s Info.plist. (115079880)When configuring the control style for a SubscriptionStoreView, users can specify a placement for the controls using the
subscriptionStoreControlStyle(_:placement:)view modifier. For tvOS, by default SubscriptionStoreView will place the controls trailing the marketing content. (115319543)When building an app with Xcode 16, SubscriptionStoreView instances using the picker control style have an updated appearance. Use
subscriptionStorePickerItemBackground(_:in:)to configure a different background color and shape for the picker items. (120558960)Users can now use APIs like monthly or yearly to get common Product.SubscriptionPeriod values when comparing subscription periods. (122684230)
Resolved Issues
Fixed an issue where StoreKit APIs could unexpectedly fail with a system error. (111689346) (FB12509606)
Fixed: Selecting
Donein the refund request confirmation sheet returns an error when using the refund request API with StoreKit Testing in Xcode. (123865137)Fixed: VoiceOver does not read a product’s title and description in ProductView and StoreView. (124254957) (FB13679318)
Fixed an issue where the tab control in SubscriptionStoreView is too wide when using StoreContent with the tabs option group style. (128567088)
The requestReview environment variable is now compatible with Swift 6. (129929512) (FB13922875)
Known Issues
When using
SubscriptionStorePickerwithin a container view, the window bar doesn’t work correctly. (117701666)Workaround: Return
SubscriptionStorePickeras a top level view frommakeBody(configuration:)method, instead of using it within a container.
Deprecations
The Original API for In-App Purchase is now deprecated, including: SKStoreReviewController, SKProduct, SKReceiptRefreshRequest, SKStorefront, SKPayment, SKRequest, SKProductsRequest, and SKProductDiscount. Please upgrade to StoreKit 2 for current APIs and future enhancements. (116600524)
Swift Charts
New Features
Plot math functions using
LinePlotandAreaPlot. (117186178)Visualize large datasets more efficiently using vectorized plot APIs such as
PointPlotandRectanglePlot. (117469419)
Resolved Issues
Fixed: Rotated axis labels stretch to incorrect sizes. (106013386)
Fixed: Blur and shadow effects on marks might disappear during animation. (125493885)
Fixed: Glitches when animating a connected scatter plot made of
LineMark. (127196185)Fixed: Stroke styles can now be animated. (127465359)
Fixed: For function plots, the Y domain cannot be inferred automatically. (128877906)
SwiftUI
New Features
TabViews declared at the root of aSceneuse a new style that hosts the tabs in the toolbar of theScene. To achieve the prior behavior, apply a.tabViewStyle(.grouped)modifier:TabView { ... }.tabViewStyle(.grouped)(61410733)
Pickers now can have keyboard shortcuts attached to their individual options, by attaching the
keyboardShortcut()modifier to the individual views in the picker content. (67682762) (FB8522629)macOS clients can now get the macOS seamless scrolling appearance (like the Mail app) with
FormandScrollView. The seamless appearance was already available withList.Formgets a seamless appearance by default, opt out with.scrollContentBackground(.hidden).ScrollViewis opt-in with.scrollContentBackground(.visible). See the docs ofscrollContentBackgroundmore. (115563289)Added the ability to request sharing of a newly opened window. A presenter who starts a presentation while on a video conferencing call can now be given an option to share that presentation with other call participants. This addresses an issue where the presenter might not want to share all application windows, and might not have an affordance to start sharing the presentation once it has begun. This is supported by a new ‘sharingBehavior’ argument to the ‘openWindow’ callable. If the
sharingBehaviorisrequested, the window is opened and then shared if possible. If thesharingBehaviorisrequired, the window is opened only if the sharing request succeeds. (115806658)For
ObservableObjectsubclasses used with@EnvironmentObject,@ObservedObject, and@StateObject, SwiftUI will now only callobjectWillChangeonce per property per object instance. If you use@Publishedand the defaultObservableObjectPublisher, you do not need to change anything. If you overrideobjectWillChange, ensure the lifetime of the publisher you return matches the lifetime of its enclosingObservableObject. (116197689)SwiftUI sheets presented with the
.sheetmodifier now use.automaticsizing by default..automaticresolves to.formor.form.fitted(horizontal:false, vertical: true)depending on the platform (see the symbol’s documentation for more). Platforms prior to iOS 18 and aligned releases used different, non-customizable default sheet sizing. iOS 17 and earlier used what is now called.pagepresentation sizing. macOS 14 and earlier used what is now called.fittedsizing. visionOS 1 used.fittedsizing. When linking apps against iOS 18 and aligned SDKs, audit your sheet presentations and pick the sizing best for you. Apply a.presentationSizingmodifier to sheet contents:ContentView().sheet(isPresented: $present) { SheetView().presentationSizing(.form) }(117551515)
Types conforming to the View protocol, and other similar SwiftUI protocols, are now isolated to the
@MainActorby default. SwiftUI’s runtime behavior with respect to actor isolation has not changed: SwiftUI views and similar types have always been evaluated on the main actor at runtime; this change improves compile-time diagnostics for potential data-race safety issues. To opt out of the new default main actor isolation and restore the previous default isolation, add the nonisolated keyword to methods and properties as needed, or move the protocol conformance to an extension to opt out the entire type. (120815051)Text(_:format:) now automatically injects
FormatStyleknown to SwiftUI with theTimeZoneandCalendarfrom the environment. (123662780)@Entrymacro can now be used to simplify declarations of customEnvironmentValues,FocusedValues,Transaction, andContainerValuesproperties. (125568810)Added the ability to give a gesture a name, which gets surfaced to UIGestureRecognizers when establishing dependencies. (126527559)
Resolved Issues
Fixed:
Liston macOS 15 does not useNSTableViewfor showing non-outline content anymore. (77273697)Fixed: The .tint view modifier can be used to customize the color of a
TextFieldandTextEditortext insertion indicator and selection highlight on macOS, in addition to iOS and iPadOS. (85523172) (FB9766312)Fixed:
ForEachis now able to reclaim persistent state of unused child views.@Statevalues created by views insideForEachelements might be destroyed earlier than previously observed. (90667238)Fixed: A
DismissActioncaptured in the content or detail column of aNavigationSplitViewnow pops the implicit stack.For apps linked on or after iOS 18 and aligned releases, the button in the example below will now clear any selection in the sidebar
List. Previously, this would fail silently on iOS, and close the window on macOS.NavigationSplitView { List(…) } detail: { DetailView() } struct DetailView: View { @Environment(\.dismiss) private var dismiss var body: some View { Button("Pop") { dismiss() } } }To retain the previous behavior, capture the
DismissActionfrom the environment above theNavigationSplitView. (92522613)Fixed: The
scenePhaseenvironment property andonAppear/onDisappearcallbacks behave in a more predictable manner when using theWindowandWindowGroupscene types. (94004478)Fixed: Toolbar items with the principal placement will now be centered within the column they are applied to, when applied to a child of a
NavigationSplitView. (96895871)Fixed: Drag now supports file promises. Dragged items can be successfully dropped on a Finder window. (98710028) (FB11275037)
Fixed: Sliders now adapt appropriately when the environment’s
layoutDirectionis.rightToLeft. (99664719)Fixed: The
scenePhaseenvironment property andonAppear/onDisappearcallbacks now behave in a more predictable manner when using the window style for menu bar extras. (103575895)Fixed an issue where searchable suggestions automatically filter out completion options that have a
searchCompletionmatching the current search text. Exact matches should be explicitly elided from the suggestions if desired. (107706241)Fixed:
View._printChangesnow outputs key path of mutated observable properties instead of “@dependencies”. (111392797)Fixed: Using the
scrollClipDisabled()view modifier with aScrollViewwith aLazyHStackorLazyVStackwill use the containing window to determine what content the lazy stack should render. (111796138)Fixed: macOS applications that previously linked with macOS 14 or older SDK had
.swipeActionsapplied in reversed order for the trailing edge. For macOS 15 this behavior is fixed to align with.swipeActionson iOS (no longer reversed). This means the placement of buttons will follow the order in SwiftUI view construction, starting from the originating edge of swipe actions. (112891121) (FB12753741)Fixed: SwiftUI will now assert that types conforming to the
Appprotocol are value types. (113634782)Fixed: When compiled with macOS 15 SDK,
safeAreaInsetapplied onTablewill now be used as the insets on the content view instead of the insets onTableitself. This aligns with howListbehaves withsafeAreaInsetmodifier attached. (114998212)Fixed: In macOS, a Toggle of the
.switchstyle now animates when itsisOnstate is changed programatically, matching the existing behavior on iOS and iPadOS. The animation can be disabled in all platforms by setting the transaction’sdisablesAnimationsproperty when updating a Toggle’s state. (115071023)Fixed: Automatically updating
Textcreated via Text(_:style:) or Text(timerInterval:pauseTime:countsDown:showsHours:) was causing increased battery drain when used in long running Live Activities. They now no longer animate changes in digits that signal the seconds value, keeping the power impact to a minimum. (115906895)Fixed: SwiftUI no longer overrides a nil
scrollTargetAnchorwhen using thescrollPosition(id:anchor:)modifier with a nil anchor. Specify atopLeadinganchor to restore the previous behavior. (116124988)Fixed: Writing
.toolbar(.hidden, for: .windowToolbar)will result in different behaviors depending if the application was linked with macOS 15 SDK. On prior SDKs,.toolbar(.hidden, for: .windowToolbar)will hide the toolbar items. On new SDKs, the same writing will hide the entire toolbar including the window controls, the title, the toolbar items, and the toolbar background. To hide only toolbar items again, please write.toolbar(.hidden, for: .automatic). (116618483)Fixed: App scenePhase now reports as active when at least one scene is active. (117864591)
Fixed: Scroll views can now accept interaction in their content insets. (117928468)
Fixed:
.navigationDestination(for:destination)modifiers inside of lazy containers are no longer evaluated..navigationDestination(isPresented:destination:)andnavigationDestination(item:destination)will log warning when used in lazy containers. Lazy containers in this context include:List,LazyVGrid,LazyHGrid,LazyHStack,LazyVStackTable, andTabView. If usingnavigationDestinations in lazy containers, users will see logged errors at runtime. Lift the modifiers higher up in the view hierarchy so they are outside of the lazy containers. Allowing navigation destination modifiers in lazy containers had two significant costs: (1) app navigation state could be undefined if a navigationDestination had been scrolled off screen (2) The navigation system had to explore all list contents to ensure navigation destinations remained up to date. Only allowing these modifiers outside of lazy containers improves app navigation reliability and performance. (117998693)Fixed: When linked against the macOS 15 SDK,
NSHostingViewwill no longer eagerly size its associated window immediately upon being added to it. (118586136)Fixed: Views at the root of a
NavigationStackwill now always have matchingonAppearandonDisappearcallbacks. (119737698)Fixed: The order of
ShapeStylecompositing modifiers is now honored with respect to shadows. Previously infill(style.blendMode(…).shadow(…))the added blend mode would also apply to the shadow, that is no longer the case. The blend mode modifier must be added after the shadow modifier to affect it. As a consequence, the fill and any shadows added can now use different blend modes. Similar rules apply toShapeStyle.opacity()except that outeropacity()modifiers multiply with inner modifiers, e.g. infill(style.opacity(0.5).shadow(…).opacity(0.5))the shadow is drawn with 50% opacity (of whateverstyledraws) andstyleitself draws with 25% opacity. (119738072)Fixed: The meaning of the boolean value passed to the
ContentTransition.numericText(countsDown:)function has been flipped for apps deployed prior to iOS 18 aligned releases. (120561508)Fixed: Gestures might not pick up a modified content shape, such as when increasing the tappable area of a button. (120938385)
Fixed an issue when a
sheetmodifier is removed from a view hierarchy. This can happen if thesheetmodifier is in one branch of anifstatement and the statement’s condition changes. For apps linked on or after iOS 18 and aligned releases, when asheetmodifier is completely removed from the hierarchy, the binding associated with the sheet will not be reset. (123742063)Fixed:
ForEachchild views are no longer re-evaluated unconditionally, only when a parameter of theForEachview might have changed. (123902210)Fixed: Scroll views have improved behavior in right to left languages when the size of their content is smaller than the size of their container. (124008045)
Fixed: Elements along a
NavigationPathor the data structure passed to thepathparameter ofNavigationStack(path:root:)are now compared more efficiently. Any side-effects from setting apathequal to itself are no longer reliable and likely will not occur. (125093883)Fixed:
SceneBuilder,WidgetBundleBuilder,TableColumnBuilder,TableRowBuilder,CommandsBuilder, andToolbarContentBuildernow diagnose unsupportedif #availableconditions at compile time instead of crashing at run time. (125379937)Fixed:
UIViewRepresentable,NSViewRepresentableand their view controller variants no longer create a layer withallowsGroupOpacityset to true. (125561916)Fixed: In TabViews in the Mac idiom of Mac Catalyst, section actions in the sidebar sometimes do not appear. (125876373)
Fixed: In certain scenarios, Text(_:style:) produced suboptimal output, such as choosing an unnecessarily small calendar unit, showing zero values for large calendar units instead of omitting them, or showing seconds in Always On Display. (125885307)
Fixed: Text(timerInterval:pauseTime:countsDown:showsHours:) was redacting the seconds value even when the timer was paused, had not started yet, or had already reached its end. (125885429)
Fixed: When applying a
searchable()modifier to aTabView, the tab view will reset the search state when switching tabs. (125926765)Fixed: Swipe actions with icon-only labels now appear as expected on macOS. (Note: For improved accessibility, provide a text label even if it won’t be displayed. Use the .labelStyle(.iconOnly) view modifier to visually hide the label’s text.) (125939243)
Fixed: Resolved an issue where scroll views would not receive touches if placed near a tappable control. When rebuilt with the newer SDK, make sure that small buttons and tap targets are correctly enlarged. You can use the
contentShapemodifier. (126232279)Fixed: Navigation constructions that relied on a List selection binding driving transient navigation state might behave differently. Prior to macOS 15.0, this was undefined behavior. For applications linked on and after macOS 15.0, this is still undefined behavior and should not be relied upon. This is also undefined behavior on all other platforms.
struct ContentView: View { @State private var selection: Set<Int> = [5] var body: some View { NavigationSplitView { List(selection: $selection) { ForEach(1...6, id: \.self) { num in NavigationLink("\(num)", value: num) } } .navigationDestination(for: Int.self) { number in // The List selection binding above should not be used // to drive this navigationDestination modifier Text("\(number)") } } detail: { ContentUnavailableView("Make a selection", systemImage: "dice") } } }(127626852)
Fixed: The lifecycle of windows for apps using the SwiftUI App Lifecycle has been adjusted to better match platform conventions. (127697378)
Fixed: Some NavigationLinks in the deprecated
NavigationViewmight not work. (128358023)Fixed:
NavigationSplitViewon macOS fails to clear the path when selection changes in a subsequent column. (128548564)Fixed: Sheets presented with the
.sheetmodifier will haveFittedPresentationSizingby default. This can cause sheets to appear too narrow or too large, depending on their contents. This is incorrect. The default presentation sizing should be.form. (128902804)Fixed: Deprecated
NavigationLinkslinks with anisActiveargument that are wrapped with a get/setBindingderived from anotherBindingmight not update the destination view if the derived binding updates too late. (129018685)Fixed: In the Swift 6 language mode, the
@Entrymacro now works with non-Sendabletypes if the type of the entry is declared explicitly. (129073803)Fixed: Changes to a view’s
pointerStyle(_:)value, such as in response to modifier key presses or other state changes, might not be reflected on screen until the mouse is moved. (129740140) (FB13878258)Fixed an issue where the pointer did not update when it exited a view with the
.pointerStyle(_:)modifier. (129741260) (FB13878385)
Known Issues
On macOS views presented on a stack with
navigationDestination(for:destination)might fail to update contents. (110118681)Workaround: Use a different style of navigation link to present the view that must update like
.navigationDestination(isPresented:destination)orNavigationLink(_:destination).SwiftUI Animations in AppKit -
NSAnimationContext.animate(using:change:completion:)might not work for some keypaths and might not merge correctly. (129178630)
System Integrity Protection
New Features
To protect users’ privacy, app group containers (in
~/Library/Group Containers) are now protected by System Integrity Protection. This is similar to the protection added to app data containers in macOS Sonoma. An app that’s properly entitled for an app group continues to have access to the app group container. Specifically, the app must use FileManager to get the app group container path and meet one of the following requirements: the app is deployed through Mac App Store; the app group identifier is prefixed with the app’s Team ID; or the app group identifier is authorised by a provisioning profile embedded within the app. If the app doesn’t meet these requirements, the system might present the user a prompt to authorize the app’s use of the app group container. If granted, that consent applies only for the duration of that app instance. This restriction also applies to app extensions, although in that case the system won’t prompt the user for consent but will instead just deny the access. (114586798)
Resolved Issues
Fixed: Users might be incorrectly prompted when an app attempts to access an application group container that is authorized by an embedded provisioning profile. (129667695) (FB13860644)
Known Issues
Users might be incorrectly prompted to approve access to other app’s data when an app that is distributed through TestFlight attempts to access its own application group container. The incorrect prompt might happen even if the app would otherwise not prompt in local development or when distributed on Mac App Store. (132449491)
Translation
New Features
Users can translate text and display results in app. See the
TranslationSessionclass, and learn more in the WWDC24 video “Meet the Translation API.” (112844581)Translation now supports translating Hindi in the Translate app, System-wide translation, Safari translation, and the new Translation APIs. (116622913)
UIKit
Resolved Issues
Fixed: Resolved an issue where iPhone and iPad apps on Apple Silicon Macs quit unexpectedly when invoking
-[UIInputViewController hasFullAccess]. (128039254)
Video Subscriber Account
Resolved Issues
Fixed: iPhone and iPad apps on Apple Silicon Macs quit unexpectedly if
VSOpenTVProviderSettingsURLStringis referenced. (113562872)
Video Toolbox
Resolved Issues
Fixed: On Apple Silicon, AVC (H.264) content at level 5.2 or lower can be handled by the hardware decoder. Content that otherwise conforms to level 5.2 but is high frame rate (e.g. 4k at 100 or 120 fps) and labelled level 6, 6.1 or 6.2 is also handled by hardware. However, if width or height is greater than 4096 columns or rows and content uses 4:2:0 chroma subsampling and 8 bit depth, the hardware decoder driver will reject it and a software decoder will be automatically selected to ensure artifact-free decoding. Now, if content is 10 bit, 4:2:2 or 4:4:4, the hardware decoder will be used. (127003443)
Virtualization
Resolved Issues
Fixed: Users will not be able to sign-in to iCloud and related applications. (128924562)
Fixed: Rosetta: Intel binaries fail to run in a Virtual Machine on Apple Silicon Macs. (131773319)
Known Issues
Installing the latest beta of macOS in a virtual machine on a host Mac running macOS Sonoma might fail. (109234128)
Workaround: Install the latest beta of Xcode prior to installing the latest beta of macOS.
Users will not be able to use Mail App on macOS VMs. (127248244)
VoiceOver
Resolved Issues
Fixed: Users might not be able to complete some stages of Setup Assistant. (127445421)
Wallet
Resolved Issues
Fixed: Disbursement requests on Mac cannot be handed off to an Apple Watch. (123278621)
Fixed: Disbursement requests on Mac might appear as regular payments requests when handed off to iPhone. (124172945)
WidgetKit
Resolved Issues
Fixed: WidgetKit Simulator is not available. (126989860)
WorkoutKit
Resolved Issues
Fixed: Resolved an issue where iPhone and iPad apps on Apple Silicon Macs quit unexpectedly if WorkoutKit is linked. (108256454)