<!--
{
  "documentType" : "article",
  "framework" : "watchOS Release Notes",
  "identifier" : "/documentation/watchOS-Release-Notes/watchos-6-release-notes",
  "metadataVersion" : "0.1.0",
  "role" : "article",
  "title" : "watchOS 6 Release Notes"
}
-->

# watchOS 6 Release Notes

Update your apps to use new features, and test your apps against API changes.

## Discussion

The watchOS 6 SDK provides support for developing watchOS apps for Apple Watch devices running watchOS 6. The SDK comes bundled with Xcode 11 beta available from [Beta Software Downloads](https://developer.apple.com/download/). For information on the compatibility requirements for Xcode 11, see <doc://com.apple.documentation/documentation/Xcode-Release-Notes/xcode-11-release-notes>.

> Warning: You must update your watch to watchOS 6 beta 2 or later before updating to iOS 13 beta 7 or later, otherwise your watch will no longer be able to connect to your phone. (52854192)

### Networking

#### New Features

- To enhance security, <doc://com.apple.documentation/documentation/Foundation/URLSession> no longer sniffs the MIME type when the server sends `Content-Type: application/octet-stream`. (7820658)
- <doc://com.apple.documentation/documentation/Foundation/NSURLRequest/CachePolicy-swift.enum/reloadRevalidatingCacheData> and <doc://com.apple.documentation/documentation/Foundation/NSURLRequest/CachePolicy-swift.enum/reloadIgnoringLocalAndRemoteCacheData> APIs are now available. (49660334)
- <doc://com.apple.documentation/documentation/Foundation/URLSessionWebSocketTask> and <doc://com.apple.documentation/documentation/Foundation/URLSessionStreamTask> are now available for use in watchOS apps. (49779789)

#### Known Issues

- The <doc://com.apple.documentation/documentation/Foundation/URLSessionTaskDelegate/urlSession(_:taskIsWaitingForConnectivity:)> delegate callback might not function as expected. (54309264)

#### Deprecations

- The <doc://com.apple.documentation/documentation/Foundation/URLSession> and <doc://com.apple.documentation/documentation/Foundation/NSURLConnection> APIs no longer support SPDY. Servers should use HTTP 2 or HTTP 1.1. (43391641)

### Notifications

#### New Features

- To send a <doc://com.apple.documentation/documentation/UserNotifications> push to a watchOS device, a new `apns-push-type` key is now required as part of the APNs request header. Depending on the type of notification, this key can be set to `alert` or `background` and is supported across all Apple platforms. (47099534)

### Podcasts

#### Known Issues

- Asking Siri to play a podcast on Apple Watch might result in an error message. (50392036)

### SwiftUI

#### New Features

- You can now create a <doc://com.apple.documentation/documentation/SwiftUI/Color> from a <doc://com.apple.documentation/documentation/UIKit/UIColor> or <doc://com.apple.documentation/documentation/AppKit/NSColor>. (49833933)
- <doc://com.apple.documentation/documentation/CoreData/NSManagedObject> now conforms to <doc://com.apple.documentation/documentation/Combine/ObservableObject>. The new `@`<doc://com.apple.documentation/documentation/SwiftUI/FetchRequest> property wrapper can drive views from the results of a fetch request, and <doc://com.apple.documentation/documentation/SwiftUI/EnvironmentValues/managedObjectContext> is now included in the environment. (50280673)
- Gesture modifiers are renamed for consistency. For example, `tapAction(count:_:)` is renamed <doc://com.apple.documentation/documentation/SwiftUI/View/onTapGesture(count:perform:)>, and `longPressAction(minimumDuration:maximumDistance:_:pressing:)` is renamed <doc://com.apple.documentation/documentation/SwiftUI/View/onLongPressGesture(minimumDuration:maximumDistance:pressing:perform:)>. (50395282)
- <doc://com.apple.documentation/documentation/SwiftUI/Text> now has a default line limit of `nil` so that it wraps by default. (51147116)
- <doc://com.apple.documentation/documentation/SwiftUI/ContentSizeCategory> and several other enumerations are now <doc://com.apple.documentation/documentation/Swift/CaseIterable>. (51168712)
- `SegmentedControl` is now a style of <doc://com.apple.documentation/documentation/SwiftUI/Picker>. (51769046)
- `BindableObject` is replaced by the <doc://com.apple.documentation/documentation/Combine/ObservableObject> protocol from the Combine framework. (50800624) You can manually conform to <doc://com.apple.documentation/documentation/Combine/ObservableObject> by defining an <doc://com.apple.documentation/documentation/Combine/ObservableObject/objectWillChange-5gopl> publisher that emits before the object changes. However, by default, <doc://com.apple.documentation/documentation/Combine/ObservableObject> automatically synthesizes <doc://com.apple.documentation/documentation/Combine/ObservableObject/objectWillChange-5gopl> and emits before any `@`<doc://com.apple.documentation/documentation/Combine/Published> properties change.
  
  ```swift
  // RoomStore.swift
  
  import Foundation
  
  class RoomStore: ObservableObject {
      @Published var rooms: [Room] = []
  }
  
  struct Room: Identifiable {
      var id: UUID
      var name: String
      var capacity: Int
      var hasVideo: Bool
  }
  
  // ContentView.swift
  import SwiftUI
  
  struct ContentView: View {
      @ObservedObject var store: RoomStore
  
      var body: some View {
          NavigationView {
              List(store.rooms) { room in
                  RoomCell(room: room)
              }
              .navigationBarTitle("Rooms")
          }
      }
  }
  ```
  
  `@``ObjectBinding` is replaced by `@`<doc://com.apple.documentation/documentation/SwiftUI/ObservedObject>.
- The <doc://com.apple.documentation/documentation/SwiftUI/EnvironmentValues> structure has four new properties for reading accessibility values from the environment: <doc://com.apple.documentation/documentation/SwiftUI/EnvironmentValues/accessibilityDifferentiateWithoutColor>, <doc://com.apple.documentation/documentation/SwiftUI/EnvironmentValues/accessibilityReduceTransparency>, <doc://com.apple.documentation/documentation/SwiftUI/EnvironmentValues/accessibilityReduceMotion>, and <doc://com.apple.documentation/documentation/SwiftUI/EnvironmentValues/accessibilityInvertColors>. (51712481)
- The `color(_:)` modifier for <doc://com.apple.documentation/documentation/SwiftUI/Text> is renamed <doc://com.apple.documentation/documentation/SwiftUI/Text/foregroundColor(_:)> for consistency with the more general <doc://com.apple.documentation/documentation/SwiftUI/View/foregroundColor(_:)> view modifier. (50391847)
- The `BindableObject` protocol’s requirement is now `willChange` instead of `didChange`, and should now be sent before the object changes rather than after it changes. This change allows for improved coalescing of change notifications. (51580731)
- The <doc://com.apple.documentation/documentation/Swift/RangeReplaceableCollection> protocol is extended to include a <doc://com.apple.documentation/documentation/Swift/RangeReplaceableCollection/remove(atOffsets:)> method and the <doc://com.apple.documentation/documentation/Swift/MutableCollection> protocol is extended to include a <doc://com.apple.documentation/documentation/Swift/MutableCollection/move(fromOffsets:toOffset:)> method. Each new method takes <doc://com.apple.documentation/documentation/Foundation/IndexSet> instances that you use with the `onMove(perform:)` and `onDelete(perform:)` modifiers on <doc://com.apple.documentation/documentation/SwiftUI/ForEach> views. (51991601)
- Added improved presentation modifiers: <doc://com.apple.documentation/documentation/SwiftUI/View/sheet(isPresented:onDismiss:content:)>, <doc://com.apple.documentation/documentation/SwiftUI/View/actionSheet(isPresented:content:)>, and <doc://com.apple.documentation/documentation/SwiftUI/View/alert(isPresented:content:)> — along with `isPresented` in the environment — replace the existing `presentation(_:)`, `Sheet`, `Modal`, and `PresentationLink` types. (52075730)
- Updated the APIs for creating animations. The basic animations are now named after the curve type — such as <doc://com.apple.documentation/documentation/SwiftUI/Animation/linear> and <doc://com.apple.documentation/documentation/SwiftUI/Animation/easeInOut>. The interpolation-based `spring(mass:stiffness:damping:initialVelocity:)` animation is now <doc://com.apple.documentation/documentation/SwiftUI/Animation/interpolatingSpring(mass:stiffness:damping:initialVelocity:)>, and `fluidSpring(stiffness:dampingFraction:blendDuration:timestep:idleThreshold:)` is now <doc://com.apple.documentation/documentation/SwiftUI/Animation/spring(response:dampingFraction:blendDuration:)> or <doc://com.apple.documentation/documentation/SwiftUI/Animation/interactiveSpring(response:dampingFraction:blendDuration:)>, depending on whether or not the animation is driven interactively. (50280375)
- Added an initializer for creating a <doc://com.apple.documentation/documentation/SwiftUI/Font> from a <doc://com.apple.documentation/documentation/CoreText/CTFont>. (51849885)

#### Known Issues

- SwiftUI has an API that lets you change the value type of <doc://com.apple.documentation/documentation/SwiftUI/Binding> to <doc://com.apple.documentation/documentation/Swift/AnyHashable>:
  
  ```swift
  let someBinding: Binding<String> = ...
  let typeErasedBinding = Binding<AnyHashable>(someBinding)
  ```
  
  Attempting to use this API at compile time results in a linker error on watchOS 6. (53769896)
- A <doc://com.apple.documentation/documentation/SwiftUI/WKInterfaceObjectRepresentable> instance with no explicit width might expand to the bounds of its container.
  
  **Workaround:** Wrap the <doc://com.apple.documentation/documentation/SwiftUI/WKInterfaceObjectRepresentable> instance in a <doc://com.apple.documentation/documentation/SwiftUI/GeometryReader> to get an explicit width for the view. (53512858)
- <doc://com.apple.documentation/documentation/SwiftUI/Image> instances don’t use resizing information configured in asset catalogs. Configure the size of an image using the <doc://com.apple.documentation/documentation/SwiftUI/Image/resizable(capInsets:resizingMode:)> modifier instead. (49114577)

#### Deprecations

- SwiftUI APIs deprecated in previous betas are now removed. (52587863, 53310683)
- The `Length` type is replaced by <doc://com.apple.documentation/documentation/CoreFoundation/CGFloat-swift.struct>. (50654095)
- `TabbedView` is now named <doc://com.apple.documentation/documentation/SwiftUI/TabView>. (51012120)
- `HAlignment` and `VAlignment` are now deprecated, use the more flexible <doc://com.apple.documentation/documentation/SwiftUI/HorizontalAlignment> or <doc://com.apple.documentation/documentation/SwiftUI/VerticalAlignment> types instead and use <doc://com.apple.documentation/documentation/SwiftUI/TextAlignment> for text. (51190531)
- The `SelectionManager` protocol is removed, use <doc://com.apple.documentation/documentation/Swift/Optional> and <doc://com.apple.documentation/documentation/Swift/Set> instances directly for selection. (51557694)
- The `isPresented` environment value is deprecated and replaced with the more general <doc://com.apple.documentation/documentation/SwiftUI/EnvironmentValues/presentationMode> value. (51641238)
- The `StaticMember` protocol is deprecated. Use protocol-conforming types directly instead. For example, use an instance of <doc://com.apple.documentation/documentation/SwiftUI/WheelPickerStyle> directly rather than the `wheel` static member.(52911961)
- Complex overloads for the <doc://com.apple.documentation/documentation/SwiftUI/View/background(_:alignment:)> and <doc://com.apple.documentation/documentation/SwiftUI/View/border(_:width:)> modifiers are deprecated. Use shapes in a <doc://com.apple.documentation/documentation/SwiftUI/View/background(_:alignment:)> or <doc://com.apple.documentation/documentation/SwiftUI/View/overlay(_:alignment:)> to draw these instead. (53067530)
- The `identified(by:)` method on the <doc://com.apple.documentation/documentation/Swift/Collection> protocol is deprecated in favor of dedicated `init(_:id:selection:rowContent:)` and
  `init(_:id:content:)` initializers. (52976883, 52029393)
  
  The retroactive conformance of Int to the <doc://com.apple.documentation/documentation/Swift/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 <doc://com.apple.documentation/documentation/Swift/Int> continue to be accepted:
  
  ```swift
  List(0..<5) {
      Text("Rooms")
  }
  ```
  
  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 <doc://com.apple.documentation/documentation/SwiftUI/Binding> structure are removed. (51624798)
  
  If you have code such as the following:
  
  ```swift
  struct LandmarkList: View {
      var landmark: [Landmark]
      @Binding var favorites: Set<Landmark>
  
      var body: some View {
          List(landmarks) { landmark in
              Toggle(landmark.name, isOn: self.$favorites.contains(landmarkID))
          }
      }
  }
  ```
  
  Define the following subscript on the Set structure:
  
  ```swift
  extension Set {
      subscript(member: Element) -> Bool {
          get { contains(member) }
          set {
              if newValue {
                  insert(member)
              } else {
                  remove(member)
              }
          }
      }
  }
  ```
  
  Then, change `self.$favorites.contains(landmarkID)` to `self.$favorites[landmarkID]`.
- The <doc://com.apple.documentation/documentation/SwiftUI/Binding> structure’s conditional conformance to the Collection protocol is removed. (51624798)
  
  If you have code such as the following:
  
  ```swift
  struct LandmarkList: View {
      @Binding var landmark: [Landmark]
  
      var body: some View {
          List(landmarks) { landmark in
              Toggle(landmark.value.name, isOn: landmark[\.isFavorite])
          }
      }
  }
  ```
  
  Define the following collection type:
  
  ```swift
  struct IndexedCollection<Base: RandomAccessCollection>: RandomAccessCollection {
      typealias Index = Base.Index
      typealias Element = (index: Index, element: Base.Element)
  
      let base: Base
  
      var startIndex: Index { base.startIndex }
  
      var endIndex: Index { base.startIndex }
  
      func index(after i: Index) -> Index {
          base.index(after: i)
      }
  
      func index(before i: Index) -> Index {
          base.index(before: i)
      }
  
      func index(_ i: Index, offsetBy distance: Int) -> Index {
          base.index(i, offsetBy: distance)
      }
  
      subscript(position: Index) -> Element {
          (index: position, element: base[position])
      }
  }
  
  extension RandomAccessCollection {
      func indexed() -> IndexedCollection<Self> {
          IndexedCollection(base: self)
      }
  }
  ```
  
  Then, update your code to:
  
  ```swift
  struct LandmarkList: View {
      @Binding var landmarks: [Landmark]
  
      var body: some View {
          List(landmarks.indexed(), id: \.1.id) { (index, landmark) in
              Toggle(landmark.name, isOn: self.$landmarks[index].isFavorite)
          }
      }
  }
  ```
- The `relativeWidth(_:)`, `relativeHeight(_:)`, and `relativeSize(width:height:)` modifiers are deprecated. Use other modifiers like <doc://com.apple.documentation/documentation/SwiftUI/View/frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:alignment:)> instead. (51494692)

### Xcode

#### Known Issues

- If your watch debugging session continuously times out, you might need to quit and relaunch Xcode after connecting to the internet in order to download the appropriate DeviceSupport files. (50554987)
- The watchOS Mail app and related processes might quit unexpectedly when used within the Simulator. (53799899)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)