tvOS 27 Beta 4 Release Notes
Update your apps to use new features, and test your apps against API changes.
Overview
The tvOS 27 SDK provides support to develop tvOS apps for Apple TV devices running tvOS 27 beta 4. The SDK comes bundled with Xcode 27, available from the Mac App Store. For information on the compatibility requirements for Xcode 27, see Xcode 27 Release Notes.
Apple TV
Resolved Issues
Fixed: When launching the Apple TV app, the sidebar focus highlight might briefly appear flat on the right side. (177389941)
AVKit Video Playback
Resolved Issues
Fixed: When a video is muted or unmuted during playback, subtitles may not be automatically enabled or disabled as expected. The subtitles-on-mute logic has not yet been updated to account for the new system behavior. (177086166)
Background Assets
New Features
You can reduce your app’s storage usage with localized asset packs. The system delivers the appropriately localized asset packs based on the user’s preferred languages. (163944365)
Foundation
Resolved Issues
Fixed:
+[NSURL URLWithString:]no longer double-encodes the%of valid percent-escape sequences when encoding other invalid characters. (161588649) (FB20439045)
Game Center
Resolved Issues
Fixed: When you trigger the Access Point, its completion handler is never invoked. (172683368)
HomeKit
New Features
When Apple Intelligence in the Home app is enabled, your HomeKit Secure Video recordings are processed on-device and through Private Cloud Compute for video descriptions and search. (178858470)
Apple Intelligence for Home requires an iCloud+ subscription starting at 2TB. (181282161)
Metal
Resolved Issues
Fixed: When you use a sampler to read from a texture with clamp-to-edge addressing mode, the result might be clamped to zero. (172520325)
Fixed: On devices in the Apple 10 GPU family, using a sampler to read from a texture with clamp-to-edge addressing mode might produce results that are clamped to zero. (177318505)
Network Security
New Features
Starting in 27.0 operating systems, select system processes now enforce stricter network security (TLS) requirements. These new requirements might cause connections to fail if the server does not meet them. The affected processes are those involved in MDM, DDM, Automated Device Enrollment, configuration profile installation, app installation, and software updates. Servers must support TLS 1.2 at minimum, using cipher suites and certificates that meet App Transport Security (ATS) requirements.
For additional details on affected processes, requirements, and how to audit and diagnose failures in managed environments, please reference Prepare your network environment for stricter security requirements. For additional details on ATS and the new requirements, please reference Preventing Insecure Network Connections and NSRequiresNIAPTLSPackageVersion. (176055825)
On Demand Resources
Deprecations
On Demand Resources and the
NSBundleResourceRequestAPI are deprecated. Use Background Assets instead. (170066290)
RealityKit
Resolved Issues
Fixed:
ComputeGraphComponentsstored in a Reality file do not render when loaded. (177674901)Fixed: When
OpacityComponentis applied to an entity with opaque materials,RealityRendererrenders the opaque materials with transparency, revealing interior surfaces. Only the frontmost surface should appear with partial transparency. (177976245)
Known Issues
Some MaterialX 1.39 nodes are not supported. (172875414)
ShaderGraph
Resolved Issues
Fixed: The
realitykit_hair_surfaceshadernode does not supportDiffuseLightProbeGroupComponent. Materials built with this node might not respond to diffuse light probe group lighting. (177976666)
Siri
Resolved Issues
Fixed: Siri might not resolve some entity types when your app has provided only an
EntityStringQueryfor the entity type. (177464215)
StoreKit
New Features
StoreKit now includes the
Transaction.OwnershipType.assignedandTransaction.RevocationType.assignmentRevokedenum values to support volume purchases.Transactionquery methods now additionally return transactions assigned to the Managed Apple Account. (156749517)New
Product.ProductTypeAPIs represent subscription Bundles and subscription Suites. New APIs inProduct.SubscriptionInfo.BundledSubscriptionlet you fetch merchandising data about subscriptions contained in a Bundle. Transaction and RenewalInfo contain new fields that provide information about purchases and customer status regarding Bundles and Suites. (160501742)partnerNameandpartnerIdproperties for Advanced Commerce API are available in Transaction.AdvancedCommerceInfo and RenewalInfo.AdvancedCommerceInfo. (167808780)
Known Issues
Purchases of non-subscription In-App Purchases made using the SKTestSession.buyProduct() method might fail with an invalid product error. The billingPlanType(_:) PurchaseOption isn’t respected for subscription purchases. (181842500)
StoreKit Testing in Xcode
Resolved Issues
Fixed: The unified app receipt is not updated after forcing a subscription expiration with
SKTestSession. (102093015) (FB11767567)Fixed: The
SKTestSessiondisableDialogssetting is not always respected for all system dialogs. (154390284) (FB18403150)Fixed: Subscription upgrades performed with the Xcode Transaction Manager are not reported in
Transaction.updates. (160698598) (FB20269723)Fixed: The renewal behavior preference is not respected when using the
purchaseDate(_:renewalBehavior:)purchase option to make purchases usingSKTestSession. (162014134) (FB20537538)Fixed: Re-purchasing a previously refunded non-consumable fails with an already owned error when using StoreKit Testing in Xcode. (174560379) (FB22475017)
Fixed: Using
pricingTerms.commitmentInfo.pricein StoreKit Testing in Xcode returns an incorrect price for monthly subscriptions with a 12-month commitment. (177942756)Fixed: Transactions for upgraded subscriptions are immediately marked as expired when using StoreKit Testing in Xcode. (178441109)
Swift Charts
Resolved Issues
Fixed: When your project has a minimum deployment target lower than 27.0, using conditionals inside a
Chartclosure produces the warning “Conformance of_ConditionalContent<TrueContent, FalseContent>toChartContentis only available in ‘’ 27.0 or newer,” and the app might crash at runtime when that content is loaded. (174168981)
SwiftUI
New Features
AsyncImagenow automatically caches downloaded images using HTTP caching protocols, allowing servers to control caching behavior via standard headers. You can customize caching for specific images using the newAsyncImageinitializers that acceptURLRequestwith customcachePolicysettings. Additionally, you can set a customURLSessionusing the newView.asyncImageURLSession(_:)API to control how all childAsyncImageviews perform data tasks. (78212597)A
@Statedeclared with an expression as its initial value used to evaluate the expression each time the view struct re-instantiates. In the case of@State private var model = Model(), this meansModel.init()gets called many times throughout the view’s lifetime. Xcode 27 introduces a new@Stateimplementation that avoids this repeated evaluation. This new behavior back-deploys to iOS 17 aligned OSes. The new@Stateis implemented with a Swift macro. It is largely source compatible with the property wrapper version, with a few exceptions.If you provide an initial value at
@Statedeclaration, and also try to assign a value to it in an initializer, the initializer value is discarded. This behavior has not changed because of the macro, but some such cases no longer compile:struct StickerPageView: View { @State private var page = StickerPage() let title: String init(title: String) { // `title` won't have any effect // this also won't compile with @State macro self.page = StickerPage(title: title) self.title = title } }When assigning initial value via an initializer, do not provide an initial value at the @State declaration.
struct StickerPageView: View { @State private var page: StickerPage // no initial value expression let title: String init(title: String) { self.page = StickerPage(title: title) // works! self.title = title } }When all stored members of a struct are private, the compiler synthesizes a private init that can be used in an extension of the same type:
struct StickerPageView: View { @State private var page: StickerPage private let title: String ... } extension StickerPageView { init(title: String, _ page: StickerPage) { self.init(page: page, title: title) // using the synthesized init } }The state macro disables this synthesized initializer. So the code above no longer compiles. To mitigate, assign value to members explicitly:
extension StickerPageView { init(title: String, _ page: StickerPage) { self.title = title self.page = page } }In rare situations, the automatic inference of generic arguments of
@Stateis less flexible with the macro implementation. Write the type with more specificity.Composing
@Statewith other property wrappers or macros is not supported. (105893279)The
TabsPickerStylestyle is now available for pickers that represent tab-based navigation and content selection. This style is similar to the.segmentedstyle, but VoiceOver reads it as “tabs,” and on macOS it has a distinct visual appearance that distinguishes it from pickers that represent value selection — for example, a text alignment picker in an inspector. (173211711)You can now use the
TextInputBorderShapetype to customize the border shape of text input controls likeTextFieldwith thetextInputBorderShape(_:)view modifier. The.squareBorderand.roundedBordertext field styles are soft deprecated — use the new.borderedtext field style instead. (173362083)In apps built with the 27.0 SDKs, a
LabeledContentview used inside aMenumaps its value to the platform menu item’s subtitle. (175594929)The @Entry macro now warns of potential issues if you store default class instances or closures in the environment. The SwiftUI Specialist skill in Xcode provides guidance for resolving these issues. (175902616)
You can now access
concentricCornerRadiiandconcentricCornerRadii(in:)onGeometryProxy. These APIs return the corner radii that are concentric with the view’s container shape as aRectangleCornerRadii?. You can use these values to drive custom drawing or layout that responds to the container’s corners without rendering aConcentricRectangledirectly. (177185166)@ContentBuildertype checking performance is further improved for valid code compared to Beta 1. (177526032)The new data item or error object based
alertandconfirmationDialogmodifiers can now be used by projects targeting iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, and visionOS 1.0. (179388848)
Resolved Issues
Fixed: When you apply both
.fileExporter(_:...)and.fileMover(_:...)modifiers to a view, some dialogs might not present correctly. (154080867)Fixed: In apps built with the 27.0 SDKs,
containerRelativeFrame(_:alignment:)incorrectly accounts for safe-area insets on aScrollView’s non-scrollable axis, causing the calculated scrollable content size to be too small. For example, a view usingcontainerRelativeFrame(.vertical)inside a horizontalScrollViewextends into vertical safe-area regions, such as the navigation bar and home indicator, because only the scrollable axis insets are applied. (165913417)Fixed: Certain control-related view modifiers unexpectedly affect sheet and popover content. In apps built with the 27.0 SDKs, the
controlSize,buttonSizing,buttonRepeatBehavior,menuIndicatorVisibility, andButtonBorderShapeenvironment values are now reset to their default values in sheets and popovers. (167448274)Fixed:
Menulabels cannot contain controls, views with gestures, or view representables with gesture recognizers. (169091260)Fixed: Buttons on tvOS no longer automatically use the accent color from an app’s asset catalog as a label tint color when building against the tvOS 27 SDK. (171830912)
Fixed: A Button containing both an icon and a title placed inside a
ListSectionheader or footer has incorrect spacing between its icon and title. (175681345)Fixed:
@Statevariable named using a raw identifier fails to compile. (179149051) (FB23015259)
System
New Features
System now provides Swift APIs for the C
stat,lstat,fstat, andfstatatsystem calls. This includes a newStattype with initializers fromFilePath,FileDescriptor, or a C string;FilePath.stat()andFileDescriptor.stat()instance methods; and supporting types (FileType,FileMode,FileFlags,UserID,GroupID,DeviceID, andInode). See SYS-0006 for more details. (160612181)
Resolved Issues
Fixed: Custom
FilePathorFileDescriptorextensions that make unqualified calls tostat()orstat(_)(without theDarwin.qualification) might conflict with the new Swiftstat()instance methods introduced in SYS-0006, causing build errors. See SYS-0008 for more details. (177911316)
TextKit
New Features
NSTextTableand its related objects and types are available to UIKit clients starting with OS 27 releases. (159870239)
UIKit
New Features
When linked on iOS 27, tvOS 27, macCatalyst 27, or visionOS 27 SDKs, you can use
UIScene.extendStateRestorationandUIScene.completeStateRestorationto extend state restoration forUIScene.ActivationState.backgroundtoUIScene.ActivationState.foregroundlifecycle transitions. (161843040)
Deprecations
Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch. For migration guidance, see Transitioning to the UIKit scene-based life cycle. (141837548)
USDKit
Resolved Issues
Fixed: Some types of USD attributes cannot be read or modified. (170653056)
Fixed: Array, vector, matrix, and quaternion types cannot be authored using USDKit. (178071414)
VideoToolbox
New Features
VTLowLatencySuperResolutionScalerConfigurationnow supports a 1.5x scale factor. Call+supportedScaleFactorsForFrameWidth:frameHeight:to discover the scale factors available for your source dimensions. (177635243)VTLowLatencyFrameInterpolationConfigurationnow supports arbitrary source dimensions up to 1080p. (179040806)