Untitled diff
40 removals
Words removed | 348 |
Total words | 3406 |
Words removed (%) | 10.22 |
410 lines
33 additions
Words added | 319 |
Total words | 3377 |
Words added (%) | 9.45 |
401 lines
Article
Article
iOS & iPadOS 13 Beta 6 Release Notes
iOS & iPadOS 13 Beta 7 Release Notes
Update your apps to use new features, and test your apps against API changes.
Update your apps to use new features, and test your apps against API changes.
Overview
Overview
The iOS & iPadOS 13 SDK provides support for developing apps for iPhone, iPad, and iPod touch devices running iOS & iPadOS 13. 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 5 Release Notes.
The iOS & iPadOS 13 SDK provides support for developing apps for iPhone, iPad, and iPod touch devices running iOS & iPadOS 13. 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 5 Release Notes. Xcode 11 Beta
Warning
Warning
If your watch is running watchOS 6 beta, you must update it to watchOS 6 beta 2 or later before updating to iOS 13 beta 6, otherwise your watch will no longer be able to connect to your phone. (52854192)
If your watch is running watchOS 6 beta, you must update it to watchOS 6 beta 2 or later before updating to iOS 13 beta 7, otherwise your watch will no longer be able to connect to your phone. (52854192)
General
General
Known Issues
Known Issues
Snapshots for apps that use Metal might have an unexpected appearance in the App Switcher. (53121694)
Snapshots for apps that use Metal might have an unexpected appearance in the App Switcher. (53121694)
Resolved Issues
Automatically detected links such as flight numbers open when tapped. (53416463)
Deprecations
Deprecations
The UIApplicationExitsOnSuspend key is no longer supported in iOS & iPadOS 13. Update your apps to handle modern multitasking. (43958234)
The UIApplicationExitsOnSuspend key is no longer supported in iOS & iPadOS 13. Update your apps to handle modern multitasking. (43958234)
Audio
Audio
New Features
New Features
Voice Processing mode can now be enabled on AVAudioEngine. (50906329)
Voice Processing mode can now be enabled on AVAudioEngine. (50906329)
New AVAudioNode types can be used to wrap a user-defined block for sending or receiving data in real time.
New AVAudioNode types can be used to wrap a user-defined block for sending or receiving data in real time.
A new method is available for an AVAudioEngine-based app to retrieve a list of all nodes attached to an AVAudioEngine instance.
A new method is available for an AVAudioEngine-based app to retrieve a list of all nodes attached to an AVAudioEngine instance.
A new rendering mode in AVAudioEnvironmentNode selects the best spatial audio rendering algorithm automatically based on the output device.
A new rendering mode in AVAudioEnvironmentNode selects the best spatial audio rendering algorithm automatically based on the output device.
A new AVAudioSession property allows system sounds and haptics to play while the session actively uses audio input.
A new AVAudioSession property allows system sounds and haptics to play while the session actively uses audio input.
A new enumeration, AVAudioSession.PromptStyle, informs apps which style of voice prompt they should play based on other audio activity in the system.
A new enumeration, AVAudioSession.PromptStyle, informs apps which style of voice prompt they should play based on other audio activity in the system.
AVAudioSession.RouteSharingPolicy now permits apps to specify route-sharing policies so their audio and video routes to the same location as AirPlay.
AVAudioSession.RouteSharingPolicy now permits apps to specify route-sharing policies so their audio and video routes to the same location as AirPlay.
Audio Unit Extensions now support user presets that are available across all host applications.
Audio Unit Extensions now support user presets that are available across all host applications.
Deprecations
Deprecations
The OpenAL framework is deprecated and remains present for compatibility purposes. Transition to AVAudioEngine for spatial audio functionality.
The OpenAL framework is deprecated and remains present for compatibility purposes. Transition to AVAudioEngine for spatial audio functionality.
AUGraph is deprecated in favor of AVAudioEngine.
AUGraph is deprecated in favor of AVAudioEngine.
Inter-App audio is deprecated. Use Audio Units for this functionality moving forward.
Inter-App audio is deprecated. Use Audio Units for this functionality moving forward.
Carbon component-based Audio Units are deprecated and support will be removed in a future release.
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 moving forward.
Legacy Core Audio HAL audio hardware plug-ins are no longer supported. Use audio server plug-ins for audio drivers moving forward.
Audio Sharing
Audio Sharing
New Features
New Features
Audio sharing is compatible with AirPods (1st generation or later) and PowerBeats Pro. iPhone 8 or later, iPad Pro 12.9-inch (2nd generation or later), iPad Pro 11-inch, iPad Pro 10.5-inch, iPad (5th generation or later), iPad Air (3rd generation), iPad mini (5th generation), or iPod touch (7th generation or later) is required. (51331268)
Audio sharing is compatible with AirPods (1st generation or later) and PowerBeats Pro. iPhone 8 or later, iPad Pro 12.9-inch (2nd generation or later), iPad Pro 11-inch, iPad Pro 10.5-inch, iPad (5th generation or later), iPad Air (3rd generation), iPad mini (5th generation), or iPod touch (7th generation or later) is required. (51331268)
AVFoundation
AVFoundation
New Features
New Features
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)
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)
Core Haptics
Core Haptics
Known Issues
Known Issues
By default, haptics are disabled when microphone recording begins. You can override this by setting the AVAudioSession property allowHapticsAndSystemSoundsDuringRecording to true before activating its audio session. (25811898)
By default, haptics are disabled when microphone recording begins. You can override this by setting the AVAudioSession property allowHapticsAndSystemSoundsDuringRecording to true before activating its audio session. (25811898)
Events — such as audioContinuous, hapticContinuous, and audioCustom — can’t be resumed during the event; no output occurs for that event, only for subsequent events. This applies to playback at a specific time offset, seeking, and resuming. (29274583)
Events — such as audioContinuous, hapticContinuous, and audioCustom — can’t be resumed during the event; no output occurs for that event, only for subsequent events. This applies to playback at a specific time offset, seeking, and resuming. (29274583)
CHHapticDynamicParameter instances with nonzero relative times that are sent as part of a sendParameters(_:atTime:) call on a CHHapticAdvancedPatternPlayer with the atTime parameter set to 0.0 are incorrectly applied at the beginning of the CHHapticPattern, instead of the expected nonzero relative time. This doesn’t occur on a CHHapticPatternPlayer. (46316890)
CHHapticDynamicParameter instances with nonzero relative times that are sent as part of a sendParameters(_:atTime:) call on a CHHapticAdvancedPatternPlayer with the atTime parameter set to 0.0 are incorrectly applied at the beginning of the CHHapticPattern, instead of the expected nonzero relative time. This doesn’t occur on a CHHapticPatternPlayer. (46316890)
Both vibrations generated through AudioServicesPlaySystemSound(_:) and vibration patterns generated through the user-created tap-to-vibrate UI are attenuated when compared to prior versions of iOS. (47448156)
Both vibrations generated through AudioServicesPlaySystemSound(_:) and vibration patterns generated through the user-created tap-to-vibrate UI are attenuated when compared to prior versions of iOS. (47448156)
Parameter Curves are not supported with a CHHapticAdvancedPatternPlayer, only a CHHapticPatternPlayer. No error is generated when a CHHapticPattern containing a Parameter Curve is passed to a CHHapticAdvancedPatternPlayer. (47891515)
Parameter Curves are not supported with a CHHapticAdvancedPatternPlayer, only a CHHapticPatternPlayer. No error is generated when a CHHapticPattern containing a Parameter Curve is passed to a CHHapticAdvancedPatternPlayer. (47891515)
Brief audio distortion occurs when starting a Playback category app such as Music in the background. For example, brief distortion occurs if you start the app from Control Center while Core Haptics audio playback using a playAndRecord audio session is already underway. (48121467)
Brief audio distortion occurs when starting a Playback category app such as Music in the background. For example, brief distortion occurs if you start the app from Control Center while Core Haptics audio playback using a playAndRecord audio session is already underway. (48121467)
Following any decompression to uncompressed floating-point samples, the total limit on all audioCustom resources per process is eight megabytes. (48659023)
Following any decompression to uncompressed floating-point samples, the total limit on all audioCustom resources per process is eight megabytes. (48659023)
Multiple overlapping Parameter Curves for the same CHHapticDynamicParameter.ID might result in playback artifacts. (50026384)
Multiple overlapping Parameter Curves for the same CHHapticDynamicParameter.ID might result in playback artifacts. (50026384)
The maximum duration for a hapticContinuous haptic event is 30 seconds. Events exceeding this limit can be constructed and accepted by CHHapticPatternPlayer, but haptic playback will fade out after 30 seconds. (51322525)
The maximum duration for a hapticContinuous haptic event is 30 seconds. Events exceeding this limit can be constructed and accepted by CHHapticPatternPlayer, but haptic playback will fade out after 30 seconds. (51322525)
Core Image
Core Image
New Features
New Features
The init(imageURL:options:) and init(imageData:options:) initializers no longer support RAW version 5 and earlier. Version 6 and later remain supported. (50911303)
The init(imageURL:options:) and init(imageData:options:) initializers no longer support RAW version 5 and earlier. Version 6 and later remain supported. (50911303)
Added new APIs for instantiating and modifying the built-in Core Image filters.
Added new APIs for instantiating and modifying the built-in Core Image filters.
The CICoreMLModel filter is enhanced to support models with an input or output of type MLFeatureType.multiArray.
The CICoreMLModel filter is enhanced to support models with an input or output of type MLFeatureType.multiArray.
Metal CIKernel instances support arguments with arbitrarily structured data.
Metal CIKernel instances support arguments with arbitrarily structured data.
Metal CIKernel instances support returning a group of 2 × 2 pixels.
Metal CIKernel instances support returning a group of 2 × 2 pixels.
The integer values of CIFormat symbols, such as ARGB8, have changed to a new set of values that are consistent across platforms. The former values remain supported for backward compatibility; however, you should avoid dependancies on specific numerical values.
The integer values of CIFormat symbols, such as ARGB8, have changed to a new set of values that are consistent across platforms. The former values remain supported for backward compatibility; however, you should avoid dependancies on specific numerical values.
Find My
Find My
Known Issues
Known Issues
When performing an action in Find My that generates an email, you might see references to the Find My Friends and Find My iPhone apps. (51123613)
When performing an action in Find My that generates an email, you might see references to the Find My Friends and Find My iPhone apps. (51123613)
The “Notify when found” feature is currently unavailable.
Apple Pay cards might remain suspended after a device exits Lost Mode.
While iOS & iPadOS 13 remains in beta, offline-finding capability is limited.
While iOS & iPadOS 13 remains in beta, offline-finding capability is limited.
HomeKit
Resolved Issues
Resolved Issues
After viewing IP camera streams in the Home app, your device will sleep without exiting the app. (52981554)
The “Notify when found” feature is now available.
Apple Pay cards no longer remain suspended after a device exits Lost Mode.
iCloud
iCloud
Known Issues
Known Issues
After updating to iOS 13 beta 6, iCloud Drive might synchronize for an extended period of time. If you notice any missing files, they can be found in a Recovered Files folder under On My iPhone/iPad within the Files app. (53772753)
After updating to iOS 13 beta 6 or later, iCloud Drive might synchronize for an extended period of time. If you notice any missing files, they can be found in a Recovered Files folder under On My iPhone/iPad within the Files app. (53772753)
The iCloud Drive section in Settings > General > iPhone Storage might inaccurately represent the current state of files on your device. (50362095)
The iCloud Drive section in Settings > General > iPhone Storage might inaccurately represent the current state of files on your device. (50362095)
When creating a new Pages, Numbers, or Keynote document in a shared folder, you might see the message: “Couldn’t connect to iCloud.” (50827963)
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.
Workaround: Close and reopen the document.
Localization
Localization
Known Issues
Known Issues
Devices set to use certain languages might exhibit clipped or misaligned layout. (51068688)
Devices set to use certain languages might exhibit clipped or misaligned layout. (51068688)
Devices set to use certain languages might display unlocalized text. (47765173, 51197936, 51270878)
Devices set to use certain languages might display unlocalized text. (47765173, 51197936, 51270878)
Mail
Mail
New Features
New Features
Ignore Blocked Senders can now be enabled in Settings > Mail. The blocked contacts list is shared with Messages, FaceTime, and Phone. (50775961)
Ignore Blocked Senders can now be enabled in Settings > Mail. The blocked contacts list is shared with Messages, FaceTime, and Phone. (50775961)
Known Issues
The buttons located below the search field used to narrow your search results might not work as expected. (53808836)
Messages
Resolved Issues
Resolved Issues
When using Messages in iCloud, you no longer see prompts to repair your account and your messages sync with other devices. (53406906)
The buttons located below the search field used to narrow your search results work as expected. (53808836)
Networking
Networking
New Features
New Features
To enhance security, URLSession no longer sniffs the MIME type when the server sends Content-Type: application/octet-stream. (7820658)
NSURLRequest.CachePolicy.reloadRevalidatingCacheData and NSURLRequest.CachePolicy.reloadIgnoringLocalAndRemoteCacheData APIs are now available. (49660334)
Starting with iOS 13 beta 4, the copy attribute of the httpBodyStream property of NSMutableURLRequest is enforced. If the body data is mutated after the property setter has been called, data sent in the HTTP request won't include that mutation. Invoking the property getter no longer returns a NSMutableData reference, even when the setter was invoked with data of that type. As of iOS 13 beta 5, apps built using the iOS 12 SDK or previous SDKs use the legacy behavior. (53427882)
The CNCopyCurrentNetworkInfo API has changed to address privacy. Please refer to the updated API documentation and headers for more details. (52707167)
The CNCopyCurrentNetworkInfo API has changed to address privacy. Please refer to the updated API documentation and headers for more details. (52707167)
All URLSessionTask instances with a GET HTTP method that contain a body now produce the error NSURLErrorDataLengthExceedsMaximum. (46025234)
All URLSessionTask instances with a GET HTTP method that contain a body now produce the error NSURLErrorDataLengthExceedsMaximum. (46025234)
Known Issues
Known Issues
Starting with iOS 13 beta 4, the copy attribute of the httpBody property of NSMutableURLRequest is enforced. If the body data is mutated after the property setter has been called, data sent in the HTTP request won't include that mutation. Invoking the property getter no longer returns a NSMutableData reference, even when the setter was invoked with data of that type. As of iOS 13 beta 5, apps built using the iOS 12 SDK or previous SDKs use the legacy behavior. (53427882)
The urlSession(_:taskIsWaitingForConnectivity:) delegate callback might not function as expected. (54309264)
Deprecations
Deprecations
Removed support for FTP and File URL schemes for Proxy Automatic Configuration (PAC). 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, and URLSession APIs such as connectionProxyDictionary and CFNetworkExecuteProxyAutoConfigurationURL(_:_:_:_:). (28578280)
Removed support for FTP and File URL schemes for Proxy Automatic Configuration (PAC). 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, and URLSession APIs such as connectionProxyDictionary and CFNetworkExecuteProxyAutoConfigurationURL(_:_:_:_:). (28578280)
The URLSession and NSURLConnection APIs no longer support SPDY. Servers should use HTTP 2 or HTTP 1.1. (43391641)
The URLSession and NSURLConnection APIs no longer support SPDY. Servers should use HTTP 2 or HTTP 1.1. (43391641)
Notes
Notes
Known Issues
Known Issues
Using search in Notes might produce unexpected results. (48238242)
Using search in Notes might produce unexpected results. (48238242)
Screen Time
Screen Time
Known Issues
Known Issues
If you enable Share Across Devices, Screen Time settings don’t sync with iCloud until your iOS device is restarted. Any edits you make to your Screen Time settings on that device before restarting are lost. (50194586)
If you enable Share Across Devices, Screen Time settings don’t sync with iCloud until your iOS device is restarted. Any edits you make to your Screen Time settings on that device before restarting are lost. (50194586)
Settings
Settings
Known Issues
Resolved Issues
Do Not Disturb settings might not synchronize between your phone and watch until both are updated to iOS 13 beta 4 and watchOS 6 beta 4. (52830669)
Do Not Disturb settings now synchronize between your phone and watch. (52830669)
You might be unable to purchase cellular data plans on iPad. (51735832, 51737229)
You can purchase cellular data plans on iPad. (51735832, 51737229)
Sign In with Apple
Sign In with Apple
Known Issues
Resolved Issues
Real User status is currently unavailable. Sign In with Apple provides a status for new accounts but the status might return unexpected results. (51765525)
Real User status is available. Sign In with Apple provides a status for new accounts and the status returns the expected results. (51765525)
Siri
Siri
Known Issues
Known Issues
Shortcuts automations are temporarily unavailable. (53182885)
Shortcuts automations are temporarily unavailable. (53182885)
AirPods might disconnect unexpectedly when Announce Messages with Siri is enabled unless music is playing while receiving a new message. (50322025)
When you edit an app's intent definition file and install the app, changes aren’t immediately reflected in Shortcuts. (46645833)
When you edit an app's intent definition file and install the app, changes aren’t immediately reflected in Shortcuts. (46645833)
Workaround: Quit and relaunch Shortcuts after installing a new version of the app, or build and run the intents extension in Xcode, targeting the Shortcuts app.
Workaround: Quit and relaunch Shortcuts after installing a new version of the app, or build and run the intents extension in Xcode, targeting the Shortcuts app.
The supportsOnDeviceRecognition property always returns false the first time it’s accessed. After a few seconds, accessing it again returns the correct value. (47822242)
The supportsOnDeviceRecognition property always returns false the first time it’s accessed. After a few seconds, accessing it again returns the correct value. (47822242)
Shortcuts opened on iOS & iPadOS 13 beta are automatically upgraded and can no longer be opened on iOS 12. If a device with iOS 12 and a device with iOS 13 share an iCloud account, shortcuts might become unusable on the device running iOS 12. (50873839)
Shortcuts opened on iOS & iPadOS 13 beta are automatically upgraded and can no longer be opened on iOS 12. If a device with iOS 12 and a device with iOS 13 share an iCloud account, shortcuts might become unusable on the device running iOS 12. (50873839)
Workaround: Disable iCloud Sync between devices running iOS & iPadOS 13 beta and devices running iOS 12.
Workaround: Disable iCloud Sync between devices running iOS & iPadOS 13 beta and devices running iOS 12.
While using non-English languages, asking Siri to perform actions related to Reminders or Messages might cause the corresponding application to quit unexpectedly. (50952938)
Currently, the only supported response for INSearchForMediaIntent is INSearchForMediaIntentResponseCode.continueInApp. (51010311)
Currently, the only supported response for INSearchForMediaIntent is INSearchForMediaIntentResponseCode.continueInApp. (51010311)
When Announce Messages with Siri is enabled, music playback might be interrupted when a message is read. (51243455)
Resolved Issues
While using non-English languages, asking Siri to perform actions related to Reminders or Messages no longer causes the corresponding application to quit unexpectedly. (50952938)
SwiftUI
SwiftUI
New Features
New Features
You can now create a Color from a UIColor or NSColor. (49833933)
You can now create a Color from a UIColor or NSColor. (49833933)
NSManagedObject now conforms to ObservableObject. The new @FetchRequest property wrapper can drive views from the results of a fetch request, and managedObjectContext is now included in the environment. (50280673)
NSManagedObject now conforms to ObservableObject. The new @FetchRequest property wrapper can drive views from the results of a fetch request, and managedObjectContext is now included in the environment. (50280673)
Gesture modifiers are renamed for consistency. For example, tapAction(count:_:) is renamed onTapGesture(count:perform:), and longPressAction(minimumDuration:maximumDistance:_:pressing:) is renamed onLongPressGesture(minimumDuration:maximumDistance:pressing:perform:). (50395282)
Gesture modifiers are renamed for consistency. For example, tapAction(count:_:) is renamed onTapGesture(count:perform:), and longPressAction(minimumDuration:maximumDistance:_:pressing:) is renamed onLongPressGesture(minimumDuration:maximumDistance:pressing:perform:). (50395282)
Text now has a default line limit of nil so that it wraps by default. (51147116)
Text now has a default line limit of nil so that it wraps by default. (51147116)
ContentSizeCategory and several other enumerations are now CaseIterable. (51168712)
ContentSizeCategory and several other enumerations are now CaseIterable. (51168712)
SegmentedControl is now a style of Picker. (51769046)
SegmentedControl is now a style of Picker. (51769046)
BindableObject is replaced by the ObservableObject protocol from the Combine framework. (50800624)
BindableObject is replaced by the ObservableObject protocol from the Combine framework. (50800624)
You can manually conform to ObservableObject by defining an objectWillChange publisher that emits before the object changes. However, by default, ObservableObject automatically synthesizes objectWillChange and emits before any @Published properties change.
You can manually conform to ObservableObject by defining an objectWillChange publisher that emits before the object changes. However, by default, ObservableObject automatically synthesizes objectWillChange and emits before any @Published properties change.
// RoomStore.swift
// RoomStore.swift
import Foundation
import Foundation
class RoomStore: ObservableObject {
class RoomStore: ObservableObject {
@Published var rooms: [Room] = []
@Published var rooms: [Room] = []
}
}
struct Room: Identifiable {
struct Room: Identifiable {
var id: UUID
var id: UUID
var name: String
var name: String
var capacity: Int
var capacity: Int
var hasVideo: Bool
var hasVideo: Bool
}
}
// ContentView.swift
// ContentView.swift
import SwiftUI
import SwiftUI
struct ContentView: View {
struct ContentView: View {
@ObservedObject var store: RoomStore
@ObservedObject var store: RoomStore
var body: some View {
var body: some View {
NavigationView {
NavigationView {
List(store.rooms) { room in
List(store.rooms) { room in
RoomCell(room: room)
RoomCell(room: room)
}
}
.navigationBarTitle("Rooms")
.navigationBarTitle("Rooms")
}
}
}
}
}
}
@ObjectBinding is replaced by @ObservedObject.
@ObjectBinding is replaced by @ObservedObject.
The Identifiable protocol is now part of the Swift standard library. As a result, your model files no longer need to import the SwiftUI framework. (SE-0261)
The Identifiable protocol is now part of the Swift standard library. As a result, your model files no longer need to import the SwiftUI framework. (SE-0261)
The EnvironmentValues structure has four new properties for reading accessibility values from the environment: accessibilityDifferentiateWithoutColor, accessibilityReduceTransparency, accessibilityReduceMotion, and accessibilityInvertColors. (51712481)
The EnvironmentValues structure has four new properties for reading accessibility values from the environment: accessibilityDifferentiateWithoutColor, accessibilityReduceTransparency, accessibilityReduceMotion, and accessibilityInvertColors. (51712481)
The color(_:) modifier for Text is renamed foregroundColor(_:) for consistency with the more general foregroundColor(_:) view modifier. (50391847)
The color(_:) modifier for Text is renamed foregroundColor(_:) for consistency with the more general 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 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 RangeReplaceableCollection protocol is extended to include a remove(atOffsets:) method and the MutableCollection protocol is extended to include a move(fromOffsets:toOffset:) method. Each new method takes IndexSet instances that you use with the onMove(perform:) and onDelete(perform:) modifiers on ForEach views. (51991601)
The RangeReplaceableCollection protocol is extended to include a remove(atOffsets:) method and the MutableCollection protocol is extended to include a move(fromOffsets:toOffset:) method. Each new method takes IndexSet instances that you use with the onMove(perform:) and onDelete(perform:) modifiers on ForEach views. (51991601)
Added improved presentation modifiers: sheet(isPresented:onDismiss:content:), actionSheet(isPresented:content:), and alert(isPresented:content:) — along with isPresented in the environment — replace the existing presentation(_:), Sheet, Modal, and PresentationLink types. (52075730)
Added improved presentation modifiers: sheet(isPresented:onDismiss:content:), actionSheet(isPresented:content:), and 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 linear and easeInOut. The interpolation-based spring(mass:stiffness:damping:initialVelocity:) animation is now interpolatingSpring(mass:stiffness:damping:initialVelocity:), and fluidSpring(stiffness:dampingFraction:blendDuration:timestep:idleThreshold:) is now spring(response:dampingFraction:blendDuration:) or interactiveSpring(response:dampingFraction:blendDuration:), depending on whether or not the animation is driven interactively. (50280375)
Updated the APIs for creating animations. The basic animations are now named after the curve type — such as linear and easeInOut. The interpolation-based spring(mass:stiffness:damping:initialVelocity:) animation is now interpolatingSpring(mass:stiffness:damping:initialVelocity:), and fluidSpring(stiffness:dampingFraction:blendDuration:timestep:idleThreshold:) is now spring(response:dampingFraction:blendDuration:) or interactiveSpring(response:dampingFraction:blendDuration:), depending on whether or not the animation is driven interactively. (50280375)
Added an initializer for creating a Font from a CTFont. (51849885)
Added an initializer for creating a Font from a CTFont. (51849885)
You can style a NavigationView using two new style properties: StackNavigationViewStyle and DoubleColumnNavigationViewStyle. 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)
You can style a NavigationView using two new style properties: StackNavigationViewStyle and DoubleColumnNavigationViewStyle. 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)
When using the DoubleColumnNavigationViewStyle style, you can provide two views when creating a navigation view — the first is the master and the second is the detail. For example:
When using the DoubleColumnNavigationViewStyle style, you can provide two views when creating a navigation view — the first is the master and the second is the detail. For example:
NavigationView {
NavigationView {
MyMasterView()
MyMasterView()
MyDetailView()
MyDetailView()
}
}
.navigationViewStyle(DoubleColumnNavigationViewStyle())
.navigationViewStyle(DoubleColumnNavigationViewStyle())
Known Issues
Known Issues
Using the Path structure may cause your app to crash if you’re using the SDKs included in Xcode 11 beta 5. As a result, you may be unable to successfully follow the steps in the Drawing Paths and Shapes tutorial. (53523206)
Using a ForEach view with a complex expression in its closure can may result in compiler errors.
Workaround: Extract those expressions into their own View types. (53325810)
Image instances don’t use resizing information configured in asset catalogs. Configure the size of an image using the resizable(capInsets:resizingMode:) modifier instead. (49114577)
Image instances don’t use resizing information configured in asset catalogs. Configure the size of an image using the resizable(capInsets:resizingMode:) modifier instead. (49114577)
Resolved Issues
Resolved Issues
Context menus no longer display incorrectly or crash your app unexpectedly. (53461370)
Using the Path structure no longer causes your app to crash if you’re using the SDKs included in Xcode 11 beta 6 and later. (53523206)
Using a ForEach view with a complex expression in its closure no longer results in compiler errors. (53325810)
Deprecations
Deprecations
SwiftUI APIs deprecated in previous versions of iOS 13 beta have been removed. (53310683)
SwiftUI APIs deprecated in previous versions of iOS 13 beta have been removed. (53310683)
NavigationDestinationLink and DynamicNavigationDestinationLink are deprecated; their functionality is now included in NavigationLink. (50630794)
NavigationDestinationLink and DynamicNavigationDestinationLink are deprecated; their functionality is now included in NavigationLink. (50630794)
The Length type is replaced by CGFloat. (50654095)
The Length type is replaced by CGFloat. (50654095)
TabbedView is now named TabView. (51012120)
TabbedView is now named TabView. (51012120)
HAlignment and VAlignment are now deprecated, use the more flexible HorizontalAlignment or VerticalAlignment types instead and use TextAlignment for text. (51190531)
HAlignment and VAlignment are now deprecated, use the more flexible HorizontalAlignment or VerticalAlignment types instead and use TextAlignment for text. (51190531)
The SelectionManager protocol is removed, use Optional and Set instances directly for selection. (51557694)
The SelectionManager protocol is removed, use Optional and Set instances directly for selection. (51557694)
The isPresented environment value is deprecated and replaced with the more general presentationMode value. (51641238)
The isPresented environment value is deprecated and replaced with the more general presentationMode value. (51641238)
The StaticMember protocol is deprecated. Use protocol-conforming types directly instead. For example, use an instance of WheelPickerStyle directly rather than the wheel static member.(52911961)
The StaticMember protocol is deprecated. Use protocol-conforming types directly instead. For example, use an instance of WheelPickerStyle directly rather than the wheel static member.(52911961)
Complex overloads for the background(_:alignment:) and border(_:width:) modifiers are deprecated. Use shapes in a background(_:alignment:) or overlay(_:alignment:) to draw these instead. (53067530)
Complex overloads for the background(_:alignment:) and border(_:width:) modifiers are deprecated. Use shapes in a background(_:alignment:) or overlay(_:alignment:) to draw these instead. (53067530)
SwiftUI APIs deprecated in previous betas are now removed. (52587863)
SwiftUI APIs deprecated in previous betas are now removed. (52587863)
The identified(by:) method on the Collection protocol is deprecated in favor of dedicated init(_:id:selection:rowContent:) and init(_:id:content:) initializers. (52976883, 52029393)
The identified(by:) method on the 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 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:
The retroactive conformance of Int to 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:
List(0..<5) {
List(0..<5) {
Text("Rooms")
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.
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 Binding structure are removed. (51624798)
Several extensions to the Binding structure are removed. (51624798)
If you have code such as the following:
If you have code such as the following:
struct LandmarkList: View {
struct LandmarkList: View {
var landmark: [Landmark]
var landmark: [Landmark]
@Binding var favorites: Set<Landmark>
@Binding var favorites: Set<Landmark>
var body: some View {
var body: some View {
List(landmarks) { landmark in
List(landmarks) { landmark in
Toggle(landmark.name, isOn: self.$favorites.contains(landmarkID))
Toggle(landmark.name, isOn: self.$favorites.contains(landmarkID))
}
}
}
}
}
}
Define the following subscript on the Set structure:
Define the following subscript on the Set structure:
extension Set {
extension Set {
subscript(member: Element) -> Bool {
subscript(member: Element) -> Bool {
get { contains(member) }
get { contains(member) }
set {
set {
if newValue {
if newValue {
insert(member)
insert(member)
} else {
} else {
remove(member)
remove(member)
}
}
}
}
}
}
}
}
Then, change self.$favorites.contains(landmarkID) to self.$favorites[landmarkID].
Then, change self.$favorites.contains(landmarkID) to self.$favorites[landmarkID].
The Binding structure’s conditional conformance to the Collection protocol is removed. (51624798)
The Binding structure’s conditional conformance to the Collection protocol is removed. (51624798)
If you have code such as the following:
If you have code such as the following:
struct LandmarkList: View {
struct LandmarkList: View {
@Binding var landmark: [Landmark]
@Binding var landmark: [Landmark]
var body: some View {
var body: some View {
List(landmarks) { landmark in
List(landmarks) { landmark in
Toggle(landmark.value.name, isOn: landmark[\.isFavorite])
Toggle(landmark.value.name, isOn: landmark[\.isFavorite])
}
}
}
}
}
}
Define the following collection type:
Define the following collection type:
struct IndexedCollection<Base: RandomAccessCollection>: RandomAccessCollection {
struct IndexedCollection<Base: RandomAccessCollection>: RandomAccessCollection {
typealias Index = Base.Index
typealias Index = Base.Index
typealias Element = (index: Index, element: Base.Element)
typealias Element = (index: Index, element: Base.Element)
let base: Base
let base: Base
var startIndex: Index { base.startIndex }
var startIndex: Index { base.startIndex }
var endIndex: Index { base.startIndex }
var endIndex: Index { base.startIndex }
func index(after i: Index) -> Index {
func index(after i: Index) -> Index {
base.index(after: i)
base.index(after: i)
}
}
func index(before i: Index) -> Index {
func index(before i: Index) -> Index {
base.index(before: i)
base.index(before: i)
}
}
func index(_ i: Index, offsetBy distance: Int) -> Index {
func index(_ i: Index, offsetBy distance: Int) -> Index {
base.index(i, offsetBy: distance)
base.index(i, offsetBy: distance)
}
}
subscript(position: Index) -> Element {
subscript(position: Index) -> Element {
(index: position, element: base[position])
(index: position, element: base[position])
}
}
}
}
extension RandomAccessCollection {
extension RandomAccessCollection {
func indexed() -> IndexedCollection<Self> {
func indexed() -> IndexedCollection<Self> {
IndexedCollection(base: self)
IndexedCollection(base: self)
}
}
}
}
Then, update your code to:
Then, update your code to:
struct LandmarkList: View {
struct LandmarkList: View {
@Binding var landmarks: [Landmark]
@Binding var landmarks: [Landmark]
var body: some View {
var body: some View {
List(landmarks.indexed(), id: \.1.id) { (index, landmark) in
List(landmarks.indexed(), id: \.1.id) { (index, landmark) in
Toggle(landmark.name, isOn: self.$landmarks[index].isFavorite)
Toggle(landmark.name, isOn: self.$landmarks[index].isFavorite)
}
}
}
}
}
}
The relativeWidth(_:), relativeHeight(_:), and relativeSize(width:height:) modifiers are deprecated. Use other modifiers like frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:alignment:) instead. (51494692)
The relativeWidth(_:), relativeHeight(_:), and relativeSize(width:height:) modifiers are deprecated. Use other modifiers like frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:alignment:) instead. (51494692)
Third-Party Apps
Third-Party Apps
Known Issues
Known Issues
You might be unable to stream to a Chromecast device. (51334673)
You might be unable to stream to a Chromecast device. (51334673)
UIKit
UIKit
New Features
New Features
The UITableViewCell class no longer changes the backgroundColor or isOpaque properties of the contentView and any of its subviews when cells become highlighted or selected. If you are setting an opaque backgroundColor on any subviews of the cell inside (and including) the contentView, the appearance when the cell becomes highlighted or selected might be affected. The simplest way to resolve any issues with your subviews is to ensure their backgroundColor is set to nil or clear, and their opaque property is false. However, if needed you can override the setHighlighted(_:animated:) and setSelected(_:animated:) methods to manually change these properties on your subviews when moving to or from the highlighted and selected states. (13955336)
The UITableViewCell class no longer changes the backgroundColor or isOpaque properties of the contentView and any of its subviews when cells become highlighted or selected. If you are setting an opaque backgroundColor on any subviews of the cell inside (and including) the contentView, the appearance when the cell becomes highlighted or selected might be affected. The simplest way to resolve any issues with your subviews is to ensure their backgroundColor is set to nil or clear, and their opaque property is false. However, if needed you can override the setHighlighted(_:animated:) and setSelected(_:animated:) methods to manually change these properties on your subviews when moving to or from the highlighted and selected states. (13955336)
Since iOS 8, using UISearchController with UINavigationController has required setting the definesPresentationContext property of the top view controller to true. Failure to do so leads to subtle bugs that can be hard to detect and debug. Starting in iOS & iPadOS 13 beta, if a view controller’s navigationItem has a non-nil searchController, when the view controller is shown in a navigation controller, UINavigationController automatically sets that view controller’s definesPresentationContext property to true. If you are targeting earlier versions of iOS, set this property before your search controller becomes active. (31338934)
Since iOS 8, using UISearchController with UINavigationController has required setting the definesPresentationContext property of the top view controller to true. Failure to do so leads to subtle bugs that can be hard to detect and debug. Starting in iOS & iPadOS 13 beta, if a view controller’s navigationItem has a non-nil searchController, when the view controller is shown in a navigation controller, UINavigationController automatically sets that view controller’s definesPresentationContext property to true. If you are targeting earlier versions of iOS, set this property before your search controller becomes active. (31338934)
The UIRefreshControl class no longer directly modifies the contentInset of its scroll view. Instead, its adjustments to the content inset will be incorporated into the scroll view’s adjustedContentInset. The only exception is when the scroll view’s contentInsetAdjustmentBehavior is set to UIScrollView.ContentInsetAdjustmentBehavior.never, in which case the UIRefreshControl instance will modify the contentInset directly as it did in previous releases. (35866834)
The UIRefreshControl class no longer directly modifies the contentInset of its scroll view. Instead, its adjustments to the content inset will be incorporated into the scroll view’s adjustedContentInset. The only exception is when the scroll view’s contentInsetAdjustmentBehavior is set to UIScrollView.ContentInsetAdjustmentBehavior.never, in which case the UIRefreshControl instance will modify the contentInset directly as it did in previous releases. (35866834)
If you implement self-sizing cells in a UITableView by overriding sizeThatFits(_:) without using Auto Layout, the height you return is interpreted as the desired height for the contentView of the cell, and UITableViewCell automatically adds any additional height needed to allow room for the cell separator. If you implement manual self-sizing this way, the cell’s contentView width is guaranteed to be accurate for you to use in manual layout calculations when sizeThatFits(_:) is called on the UITableViewCell. (39742612)
If you implement self-sizing cells in a UITableView by overriding sizeThatFits(_:) without using Auto Layout, the height you return is interpreted as the desired height for the contentView of the cell, and UITableViewCell automatically adds any additional height needed to allow room for the cell separator. If you implement manual self-sizing this way, the cell’s contentView width is guaranteed to be accurate for you to use in manual layout calculations when sizeThatFits(_:) is called on the UITableViewCell. (39742612)
Trait environments, such as views and view controllers, now have their traitCollection property populated with traits during initialization. These initial traits represent a prediction of the ultimate traits that the trait environment will receive when it gets added to the hierarchy. Because the traits that are populated during initialization are just a prediction, they might differ from the traits that are received once actually in the hierarchy. Therefore, when possible you should wait to perform work that uses the traitCollection until the view, or view controller’s view, has moved into the hierarchy — meaning window returns a non-nil value — so that you don’t have to throw away any work done using the predicted traits if the actual traits are different. The best time to use the traitCollection is during layout, such as inside layoutSubviews(), viewWillLayoutSubviews(), or viewDidLayoutSubviews().
Trait environments, such as views and view controllers, now have their traitCollection property populated with traits during initialization. These initial traits represent a prediction of the ultimate traits that the trait environment will receive when it gets added to the hierarchy. Because the traits that are populated during initialization are just a prediction, they might differ from the traits that are received once actually in the hierarchy. Therefore, when possible you should wait to perform work that uses the traitCollection until the view, or view controller’s view, has moved into the hierarchy — meaning window returns a non-nil value — so that you don’t have to throw away any work done using the predicted traits if the actual traits are different. The best time to use the traitCollection is during layout, such as inside layoutSubviews(), viewWillLayoutSubviews(), or viewDidLayoutSubviews().
The traitCollectionDidChange(_:) method is only called when the value of a trait changes. Importantly, because the trait collection is now initialized to a prediction of the ultimate traits in the destination hierarchy, when the initial predicted traits match the ultimate traits in the hierarchy, traitCollectionDidChange(_:) will not be called when the trait environment is added to the hierarchy. Because traitCollectionDidChange(_:) is intended to be an invalidation callback to notify you that one or more traits changed, audit your existing implementations of this method, as well as the UIContentContainer method willTransition(to:with:), for places where you might have been relying
The traitCollectionDidChange(_:) method is only called when the value of a trait changes. Importantly, because the trait collection is now initialized to a prediction of the ultimate traits in the destination hierarchy, when the initial predicted traits match the ultimate traits in the hierarchy, traitCollectionDidChange(_:) will not be called when the trait environment is added to the hierarchy. Because traitCollectionDidChange(_:) is intended to be an invalidation callback to notify you that one or more traits changed, audit your existing implementations of this method, as well as the UIContentContainer method willTransition(to:with:), for places where you might have been relying on it to trigger initial setup. The best place to lazily perform work that uses the traitCollection is inside one of the layoutSubviews methods discussed above, but remember that these layout methods are called any time layout occurs so be sure to avoid repeating work when you don’t need to. (46818941)
You can now enable debug logging to easily see when traitCollectionDidChange(_:) or willTransition(to:with:) is called on your own classes. Turn on the logging by using the following launch argument: -UITraitCollectionChangeLo