macOS Sequoia 15.4 RC 2: What Developers Need to Know

macOS Sequoia 15.4 RC 2: What Developers Need to Know

macOS Sequoia 15.4 RC 2: What Developers Need to Know

Apple has released macOS Sequoia 15.4 RC 2, bringing updates for developers to leverage new features and test their applications against the latest API changes. This release, bundled with Xcode 16.3 available on the Mac App Store, includes a variety of new features, resolved issues, and a few known issues to be aware of. Let’s dive into the key highlights for developers.

New Features and Enhancements

  • FSKit: A significant addition is the availability of FSKit, which allows for the delivery of user space file systems as Application Extensions. These file systems now support integration with DiskArbitration. This opens up new possibilities for creating custom file system solutions on macOS.
  • SCSIControllerDriverKit: Several new APIs have been introduced in SCSIControllerDriverKit: UserMapBundledParallelTaskCommandAndResponseBuffers, BundledParallelTaskCompletion, UserProcessBundledParallelTasks, and UserCompleteBundledParallelTask. These APIs introduce the concept of bundled I/Os and shared memory for parallel task command and response buffers. This aims to reduce RPC copy overhead by utilizing shared memory and mitigate DriverKit latencies by enabling the exchange of multiple I/Os in a single API call. Developers experiencing lower I/O performance with DriverExtensions for workloads with high queue depths or small I/O sizes (like 4KB) should consider utilizing these new APIs. The IOUserSCSIParallelInterfaceController.iig file provides further explanation of these concepts.
  • Podcasts: The Podcasts app now features search suggestions as you type, making it easier for users to find the content they are looking for.
  • SD Card Reader: For Apple silicon Macs equipped with an internal SD card reader, there is now support for SDUC cards larger than 2TB.
  • StoreKit: Several updates and additions have been made to StoreKit:
    • New APIs now support Advanced Commerce API in-app purchases.
    • The new purchase option API introductoryOfferEligibility(compactJWS:) allows developers to set a preference for whether an introductory offer should be redeemed during a purchase. This requires server-side signing of a payload to either apply or block the offer.
    • New properties appTransactionID, originalPlatform, and period are available in AppTransaction, Transaction, Transaction.Offer, and Product.SubscriptionInfo.RenewalInfo. The Platform symbol used by originalPlatform has been moved to AppStore.Platform. The introductoryOfferEligibility(compactJWS:) API in PurchaseOption was previously named introductoryOfferEligibility(compactJWS:). watchOS has been removed as a separate option in the AppStore.Platform API and is now combined with iOS.
  • SwiftUI:
    • On macOS, .sheet, .alert, and .confirmationDialog modal presentations now conditionally allow app termination automatically (via menu item, ⌘Q, Software Update, etc.). This behavior can be configured using the new modifiers presentationPreventsAppTermination(_:) and dialogPreventsAppTermination(_:).
  • System Calls: The fileport_makeport(2) and fileport_makefd(2) are now documented APIs with manual pages.
  • URLSession: A new HTTP loading mode can be enabled by setting usesClassicLoadingMode to false on URLSessionConfiguration. This new mode is slated to become the default in a future release.

Resolved Issues

This release also addresses several issues across different areas:

  • Apple Intelligence: An issue where some Apple Intelligence features might be unavailable or show “Downloading support…” after restoring macOS 15.4 has been fixed.
  • Automatic Assessment Configuration: A fix addresses a potential interruption of assessment sessions under high-memory use conditions.
  • Game Controller: Game controllers should no longer stop responding when accessibility features like Voice Over are enabled.
  • Networking: A functionality issue on CI build machines caused by 169.254.169.254 on Ethernet due to Local Network Privacy restrictions has been resolved.
  • StoreKit:
    • A fix addresses an issue where the StoreKit helper application could quit with an NSCocoaErrorDomain error 4097 during a purchase.
    • Errors from the StoreKit 2 domain during a purchase should no longer occur with the StoreKit APIs.
  • SwiftUI:
    • The tint(_:) modifier now correctly overrides the tint color of buttons in confirmation dialogs and alerts.
    • An issue where applying defaultVisibility(.hidden) to customizable toolbar items did not hide the item by default on iOS for apps compiled against iOS 18.4 beta has been fixed.
    • Environment invalidation during NavigationStack or NavigationSplitView content updates has been corrected.
    • The @Sendable requirement for the .onPreferenceChange modifier’s closure argument has been addressed to prevent unnecessary concurrency diagnostics.
  • UIWritingToolsCoordinator: The -writingToolsCoordinator:requestsRangeInContextWithIdentifierForPoint:completion: method in NSWritingToolsCoordinatorDelegate is no longer incorrectly marked as optional and will be called as expected.
  • Virtual Machines: An issue preventing M4 Macs from launching virtual machines, resulting in a system restart, has been resolved.
  • Writing Tools: Selecting “Replace” after generating a list, key point, table, or summary in the pop-over should no longer result in an error message.

Known Issues and Workarounds

Developers should also be aware of the following known issues:

  • Apple Intelligence: After restoring macOS 15.4, some Apple Intelligence features might not be available, or a “Downloading support…” message might appear. Workaround: Restarting the device might resolve this issue.
  • Driver Extensions: After updating to macOS 15.4 beta, issues with loading installed drivers might occur. Workaround: Navigate to System Settings > General > Login Items & Extensions, disable the affected driver extensions, restart the Mac, and then re-enable them after restarting.
  • StoreKit: Calling isEligibleForIntroOffer(for:) will return false if no user account is signed in. Workaround: The user should sign in with their App Store account to request introductory offer eligibility.

Deprecations

  • libxml2: The custom allocation API for libxml2 is now deprecated. Developers using xmlMalloc(), xmlMallocAtomic(), xmlRealloc(), xmlFree(), xmlMemStrdup(), xmlMemSetup(), xmlMemGet(), xmlGcMemSetup(), or xmlGcMemGet() should switch to using the system allocator functions like malloc(), realloc(), free(), and strdup() instead. Setting the global variables xmlMalloc, xmlMallocAtomic, xmlRealloc, xmlFree, and xmlMemStrdup is also deprecated.
  • StoreKit: Transaction.currentEntitlement(for:) is deprecated. Developers should now use Transaction.currentEntitlements(for:) to get all transactions entitling a user to a product, as the deprecated API might not include transactions from family shared subscriptions.

This macOS Sequoia 15.4 RC 2 release offers a range of updates and improvements for developers. Be sure to test your applications thoroughly and leverage the new features to create even better experiences for your users. Keep the known issues and deprecations in mind as you continue your development work.