tvOS 18.4 Release Notes
Update your apps to use new features, and test your apps against API changes.
Overview
The tvOS 18.4 SDK provides support to develop tvOS apps for Apple TV devices running tvOS 18.4. The SDK comes bundled with Xcode 16.3, available from the Mac App Store. For information on the compatibility requirements for Xcode 16.3, see Xcode 16.3 Release Notes.
Background Assets
New Features
The Background Assets framework is now supported for visionOS apps on visionOS 2.4 or later and tvOS apps on tvOS 18.4 or later. (138008978)
libxml2
Deprecations
The custom allocation API for libxml2 is deprecated starting in macOS Sequoia 15.4, iOS 18.4, tvOS 18.4, visionOS 2.4, and tvOS 18.4. If this API is not used, no changes are required. If this API is currently used, make changes to call
malloc()instead ofxmlMalloc()orxmlMallocAtomic(); callrealloc()instead ofxmlRealloc(); callfree()instead ofxmlFree()and callstrdup()instead ofxmlMemStrdup(). Stop callingxmlMemSetup(),xmlMemGet(),xmlGcMemSetup()andxmlGcMemGet()to set custom allocation functions. Do not set global variablesxmlMalloc,xmlMallocAtomic,xmlRealloc,xmlFree, andxmlMemStrdup. Internally, libxml2 and libxslt will now use the system allocator instead of this API, so do not rely on these libraries using the custom allocation API. (138404994)
StoreKit
New Features
New StoreKit APIs support Advanced Commerce API in-app purchases. (118528943)
By using the new purchase option API
introductoryOfferEligibility(compactJWS:), you can now set a preference for whether an introductory offer should be redeemed during a purchase. This API requires you to sign a payload on your server in order to either apply the offer (even if the customer is not eligible) or block it. (136152740)New properties
appTransactionID,originalPlatform, andperiodare now available in AppTransaction, Transaction, Transaction.Offer, and Product.SubscriptionInfo.RenewalInfo. (136395697)The
Platformsymbol used by originalPlatform in AppTransaction has been moved toAppStore.Platform. (143632084)The introductory offer eligibility preference API in PurchaseOption has been renamed to
introductoryOfferEligibility(compactJWS:). (143905053)watchOSis removed as an option in the AppStore.Platform API.watchOSis now combined withiOS. (145578780)
Resolved Issues
Fixed: StoreKit helper application quits with NSCocoaErrorDomain error 4097 during a purchase. (140317005) (FB15907723)
Fixed: StoreKit APIs might return errors from the StoreKit 2 domain during a purchase. (144191684)
Known Issues
Calling
isEligibleForIntroOffer(for:)will return false if there is no user account signed in. (146119524)Workaround: The user should sign in with their App Store account to request introductory offer eligibility.
Deprecations
Transaction.currentEntitlement(for:) is now deprecated. This API returns the latest transaction that entitles the user to a product, which may not include transactions originated for family shared subscriptions. Use the
Transaction.currentEntitlements(for:)method to get all the transactions that entitle the user to a product. (138320205)
SwiftUI
Resolved Issues
Fixed: A color set by the
tint(_:)modifier does not override the tint color of buttons in that view’s confirmation dialogs and alerts. (138774306)Fixed: For apps compiled against iOS 18.4 beta, applying
defaultVisibility(.hidden)to customizable toolbar items does not hide the item by default on iOS. (139815290)Fixed: When NavigationStack or NavigationSplitView content updates, the environment is not invalidated unless properties in the environment have changed. (139855826)
Fixed:
.onPreferenceChangemodifier’s closure argument is required to be@Sendable. This might cause concurrency diagnostics that’s unnecessary if the closure needs to access main actor-isolated values. This particular closure shouldn’t have to be this restrictive. (145238570)
System Calls
New Features
fileport_makeport(2) and fileport_makefd(2) are now APIs with manual pages. (66571768) (FB8270900)
URLSession
New Features
To enable the new HTTP loading mode, set
usesClassicLoadingModeto false on URLSessionConfiguration. The new loading mode will become the default in a future release. (89390075)