Update your apps to use new features, and test your apps against API changes.
The macOS 10.15 SDK provides support for developing apps for Macs running macOS Catalina 10.15. The SDK comes bundled with Xcode 11 beta available from Beta Software Downloads. For information on the compatibility requirements for Xcode 11, see Xcode 11 Beta 6 Release Notes.
Installing third party kernel extensions now requires that you restart your Mac before they’re permitted to load. (50340461)
During installation of macOS 10.15 you might be prompted to enter your administrator password multiple times to allow installation to proceed. (51206649)
Using Quick Look to preview an HTML document no longer causes the app you’re using to quit unexpectedly. (53330705)
macOS frameworks are now thinned for the x86-64 architecture. Apps that execute i386 code now fail with the
EBADARCHerror code. The remaining stub frameworks are nonfunctional and exist only for compatibility purposes. (51236070)
You no longer receive an error when downloading or updating apps. (49755328)
Support for signing in with an account from a different country is currently unavailable. (51240948)
To enhance security, AppleEvents and AppleScripts that target an app on a remote system must authenticate as the same user on the remote system. An AppleEvent that targets an app running as a different user receives a
To allow remote AppleEvents to target apps in any user session, run the following command in Terminal on the server:
Then disable and reenable Remote Apple Events in System Preferences > Sharing. (5353592)
You can now enable voice processing mode on
You can use new
AVAudiotypes to wrap a user-defined block for sending or receiving data in real-time.
A new method is available for an
AVAudiobased app to retrieve a list of all nodes attached to an
A new rendering mode in
AVAudioselects the best spatial audio rendering algorithm automatically based on the output device.
AVAudioproperty allows system sounds and haptics to play while the session is actively using audio input.
A new property,
AVAudioinforms apps which style of voice prompt they should play based on other audio activity in the system.
Session .Prompt Style
AVAudioenumeration is extended to allow apps to specify route sharing policies so their audio and video is routed to the same location as AirPlay.
Session .Route Sharing Policy
Audio Unit Extensions now support user presets that are available across all host apps.
The OpenAL framework is deprecated and remains present for compatibility purposes. Transition to
AVAudiofor spatial audio functionality.
AUGraphis deprecated in favor of
Inter-App audio is deprecated. Use Audio Units for this functionality.
Carbon component-based Audio Units are deprecated and support will be removed in a future release.
Legacy Core Audio HAL audio hardware plug-ins are no longer supported. Use Audio Server plug-ins for audio drivers.
AVPlayerclass includes two new properties,
eligible, which you can use to determine whether an HDR display is available and can play on the current device. (35938145)
For HDRPlayback Did Change Notification
AVFoundation now supports encoding video with alpha channels using HEVC. Videos encoded in this manner are broadly supported in AVFoundation APIs and by Safari within web pages. Technical details of the format can be found in the Interoperability Profile specification. (8045917)
The previously deprecated 32-bit QuickTime framework is no longer available in macOS 10.15.
The symbols for QTKit, which relied on the QuickTime framework, are still present but the classes are non-functional.
Apps using Picture Taker must specify the
NSCamerakey to access the FaceTime camera. (47916725)
Added new APIs for instantiating and modifying the built-in Core Image filters.
CIKernelinstances now support arguments with arbitrarily structured data.
CIKernelinstances now support returning a group of two by two pixels.
The integer values of
CIFormatsymbols, such as
ARGB8, have changed to a new set of values which are consistent across platforms. The former values remain supported for backward compatibility; however, you should avoid dependancies on specific numerical values.
Using APIs related to muting by paths and path prefixes no longer causes the kernel to panic. (53517643)
Messages to clients are no longer truncated. (53517680)
kauthAPI will be removed in a future release. (50419013)
The Cloud Files section in About This Mac > Storage > Manage might inaccurately represent the current state of files on your Mac. (50362095)
Even when Optimize Storage is switched off, iCloud Drive might fail to automatically download all files. (50667204)
Workaround: Download files individually.
When creating a new Pages, Numbers, or Keynote document in a shared folder, you might see the message “Couldn’t connect to iCloud”. (50827963)
Workaround: Close and reopen the document.
Attempting to open iWork documents in Finder will unexpectedly create a
.cpgzfile if the corresponding iWork app isn’t installed. (40693892)
Workaround: Install the corresponding app from the App Store before opening the document.
Launch Daemons and Agents
Launch daemons and launch agents introduce new user privacy protections. Specifying privacy-sensitive files and folders in a launchd property list might not work as expected and prevent the service from running. Having
Programpointing to an executable in a privacy sensitive location is currently allowed, but may be restricted in a future release. (49702405)
To comply with the new privacy protections, resources for a launchd service must be stored in locations that aren’t privacy sensitive. If necessary, the app can set up resources during its execution rather than using launchd property list keys, making it possible to grant the app access using System Preferences > Security & Privacy > Privacy.
The following launchd property list keys are affected:
Certain languages might exhibit clipped or misaligned layout. (51068688, 50983852)
Certain languages might display unlocalized text. (47765173, 51196633)
MPMediamight not display the contents of your library. (51785735)
AppKit and Mac Catalyst apps are currently view-only clients of PencilKit. (51146823)
Event handling in extension contexts may produce unexpected results, including failure to deliver trackpad pinch and zoom gestures. (50145462)
When sending Mail attachments via MessageUI, each attachment might appear as two icons when viewed by the recipient. (50369995)
Controls drawn with accent color incorrectly maintain their active color when the window is inactive. There is no need to work around this in your app. (50563638)
When your Mac Catalyst app is launched directly into the background, it experiences all the state transitions of a regular app launch — such as
did Finish Launching With Options:)
application— followed by state transitions to return to background state from there —
Did Become Active(_:)
Will Resign Active(_:)
application. This will soon be updated to match iOS, where your app will receive only
Did Enter Background(_:)
application, and only if it wasn’t already running. (50742219)
Did Finish Launching(_:)
For Mac Catalyst apps to save to Photos Library, explicitly linking the Photos framework is required. (50781430)
Opening a CloudKit share URL might not launch a Mac Catalyst app that’s present on the system. Additionally, the system might not take the user to the appropriate App Store page to download an app which isn’t present on the system. (50877241)
Action and share extensions might exhibit visual anomalies. (51005363)
All assets at 3x scale factor are currently ignored when compiling the asset catalog for Mac Catalyst apps. Because the search begins with the universal asset, assets for a specific memory or graphics class won’t be found. For example, if you provide an image and only give a 6GB and Metal 5v1 asset, it won’t be found at runtime. It’s recommended that you provide all images as vectors to allow generation of the correct scale factors, or at minimum provide 2x versions of the assets. If you’re classifying resources based on memory and graphics families then you should provide "Any Memory" and "Any Graphics”. (51033745)
CXActioninstances might return an error. (51074735)
When creating a Mac Catalyst app from your iPad app, Xcode automatically generates a unique Mac bundle identifier. If you have an existing Mac bundle identifier you’d prefer to use, you can do so by using manual signing in Xcode. (51076014)
Follow these steps to configure your project, AppID, and provisioning profile:
Sign in to Apple Developer, then select Certificates, Identifiers, and Profiles.
In the Identifiers section, select your iOS app identifier to edit.
Check the Mac Catalyst capability to enable it, then click the Configure button.
Choose Use an existing macOS AppID and select the identifier you'd like to use from the popup menu. Click the Save button to finish editing your AppID.
In the Profiles section, click the + button to create a new profile, select ‘macOS App Development’, and click Continue.
Select your iOS AppID from the popup, click Continue, and complete the rest of the profile creation flow. When finished, click the Download button.
In Xcode, select your project to view the Project Editor and select your app’s target. Then select the Build Settings tab.
Set the Derive Mac Catalyst Product Bundle Identifier setting to No.
Expand the Product Bundle Identifier build setting to view its configurations. Next to the Debug configuration, click the + button to add a conditional value.
For the build setting condition, select Any macOS from the popup menu. Edit the value of the conditional build setting to match the macOS bundle identifier you want to use. Repeat this step for all configurations in your project.
In the Signing & Capabilities tab, uncheck Automatically manage signing.
For your macOS app, select Import Profile from the Provisioning Profile popup and then select the profile you downloaded earlier.
In order to show a share sheet from a toolbar item using the
UIActivity, create the
init(iteminitializer and pass it a
UIBarconfigured as a
UIBar. There is no need to set the
Button Item .System Item .action
If your Mac contains both macOS Mojave 10.14 and macOS 10.15 volumes, you might experience issues searching in Mail. (46611310)
Workaround: While running macOS Mojave 10.14, open Terminal and execute the following command:
Reboot into macOS 10.15, open Terminal and execute the following command:
Reboot into macOS Mojave 10.14, open Terminal and execute the following command:
Depending on the size of your Mail database, it might take many hours to reindex all content.
Navigating using the back button works as expected. (51248128)
You can scroll content on shelves. (51248128)
Artwork changes now appear immediately; playlists have been added. (51201715)
.Cache Policy .reload Revalidating Cache Data
NSURLRequestAPIs are now available. (49660334)
.Cache Policy .reload Ignoring Local And Remote Cache Data
urldelegate callback might not function as expected. (54309264)
Session(_: task Is Waiting For Connectivity:)
NWEthernetAPI doesn’t currently support VLAN interfaces.
NEPacketwill see both tagged and untagged frames arriving on physical interfaces. Depending on the Ethernet driver, VLAN tags might be processed by hardware and thus stripped off the Ethernet frames thus
NEPacketwon’t see the VLAN tag. (51275655)
Support for FTP and File URL schemes for Proxy Automatic Configuration (PAC) is removed. HTTP and HTTPS are the only supported URL schemes for PAC. This affects all PAC configurations including but not limited to configurations set using Settings, System Preferences, profiles, URLSession APIs such as
Execute Proxy Auto Configuration URL(_: _: _: _:)
The Network Kernel Extension API is now deprecated. (49284108)
To enable NetBIOS, you can create or edit the
/etc/nsmbfile. If your system doesn't already have an
/etc/nsmbfile, use the following Terminal commands while logged in as an Administrator:
To disable NetBIOS, you can safely delete the
To improve the Photos upgrade experience, Photos is testing database upgrades using a clone of the Photo Library. This clone doesn’t include the content of each photo, but does include faces metadata and a thumbnail image of each person in your library. It also contains metadata such as the asset name and the geographic location of the photo. It is created at
~/Pictures/mac, and you can manually remove this backup at any time. The clone will be removed automatically before the final release of macOS 10.15. (51033690)
OS 10 .15 Pre-Upgrade Backup
Deleting podcasts using About This Mac > Storage > Manage doesn’t update what’s shown in the Podcasts app until it’s relaunched. (50354510)
Setting “Automatically Download Episodes” to “Never” now takes effect. (50960777)
Starting in macOS 10.15, the Quartz Composer framework is deprecated and remains present for compatibility purposes. Transition to frameworks such as Core Image, SceneKit, or Metal. (50911608)
Screen Time > Content & Privacy > Content > Web Content > Allowed Websites Only isn’t currently enforced in macOS 10.15 beta. (50462899)
Scripting Language Runtimes
Scripting language runtimes such as Python, Ruby, and Perl are included in macOS for compatibility with legacy software. Future versions of macOS won’t include scripting language runtimes by default, and might require you to install additional packages. If your software depends on scripting languages, it’s recommended that you bundle the runtime within the app. (49764202)
Use of Python 2.7 isn’t recommended as this version is included in macOS for compatibility with legacy software. Future versions of macOS won’t include Python 2.7. Instead, it’s recommended that you run
python3from within Terminal. (51097165)
Mail messages now display previews. (35678035)
NSManagednow conforms to ObservableObject. The new
Fetchproperty wrapper can drive views from the results of a fetch request, and
managedis now included in the environment. (50280673)
Gesture modifiers are renamed for consistency. For example,
tapis renamed onTapGesture(count:perform:), and
longis renamed onLongPressGesture(minimumDuration:maximumDistance:pressing:perform:). (50395282)
Press Action(minimum Duration: maximum Distance: _: pressing:)
Textnow has a default line limit of
nilso that it wraps by default. (51147116)
Bindableis replaced by the ObservableObject protocol from the Combine framework. (50800624)
You can manually conform to
Observableby defining an objectWillChange publisher that emits before the object changes. However, by default,
Observableautomatically synthesizes objectWillChange and emits before any
Environmentstructure has four new properties for reading accessibility values from the environment:
Differentiate Without Color
color(_:)text modifier is renamed foregroundColor(_:) for consistency with the more general
foregroundview modifier. (50391847)
Bindableprotocol’s requirement is now
did, and should now be sent before the object changes rather than after it changes. This change allows for improved coalescing of change notifications. (51580731)
Rangeprotocol is extended to include a
remove(atmethod and the
Mutableprotocol is extended to include a
move(frommethod. Each new method takes
Offsets: to Offset:)
Indexinstances that you use with the onMove(perform:) and onDelete(perform:) modifiers on
Added improved presentation modifiers:
Presented: on Dismiss: content:)
Sheet(is Presented: content:)
alert(is— along with
isin the environment — replace the previous
Updated the APIs for creating animations. The
basicanimations are now named after the curve type — such as
ease. The interpolation-based
spring(mass:animation is now
stiffness: damping: initial Velocity:)
Spring(mass: stiffness: damping: initial Velocity:)
Spring(stiffness: damping Fraction: blend Duration: timestep: idle Threshold:)
damping Fraction: blend Duration:)
interactive, depending on whether or not the animation is driven interactively. (50280375)
Spring(response: damping Fraction: blend Duration:)
You can style a
Navigationusing two new style properties:
Navigation View Style
Double. By default, navigation views on iPhone and Apple TV visually reflect a navigation stack, while on iPad and Mac, a split-view styled navigation view displays. (51636729)
Column Navigation View Style
When using the
Doublestyle, you can provide two views when creating a navigation view — the first is the master and the second is the detail. For example:
Column Navigation View Style
Using Xcode 11 beta 4 with macOS Catalina beta 5 prevents previews from working. Update to Xcode 11 beta 5 to use previews. (52082331)
Commandstructure is replaced by passing selectors directly. (53187891)
isenvironment value is deprecated and replaced with the more general
SwiftUI APIs deprecated in previous betas are now removed. (52587863)
The retroactive conformance of
Intto the Identifiable protocol is removed. Change any code that relies on this conformance to pass \.self to the id parameter of the relevant initializer. Constant ranges of Int continue to be accepted:
However, you shouldn’t pass a range that changes at runtime. If you use a variable that changes at runtime to define the range, the list displays views according to the initial range and ignores any subsequent updates to the range.
Several extensions to the
Bindingstructure are removed. (51624798)
If you have code such as the following:
Define the following subscript on the Set structure:
If you have code such as the following:
Define the following collection type:
Then, update your code to:
relativemodifiers are deprecated. Use other modifiers like
Width: ideal Width: max Width: min Height: ideal Height: max Height: alignment:)
Command line tool support for Subversion — including
git-svn, and related commands — is no longer provided by Xcode. If you need Subversion or related command line tools, install the Command Line Tools package by running
xcode-select --install. (50266910)