-
Notifications
You must be signed in to change notification settings - Fork 571
AVFAudio iOS xcode27.0 b1
Alex Soto edited this page Jun 9, 2026
·
1 revision
#AVFAudio.framework
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConnectionPoint.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConnectionPoint.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConnectionPoint.h 2026-04-18 20:48:54
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConnectionPoint.h 2026-05-23 02:44:29
@@ -19,7 +19,7 @@
Instances of this class are immutable.
*/
-API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0))
@interface AVAudioConnectionPoint : NSObject {
@private
AVAudioNode *_node;
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConverter.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConverter.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConverter.h 2026-04-18 21:41:01
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConverter.h 2026-05-22 08:25:33
@@ -151,14 +151,13 @@
convertToBuffer:error:withInputFromBlock: will return as much output as could be converted
with the input already supplied.
*/
-typedef AVAudioBuffer * __nullable (^ NS_SWIFT_SENDABLE AVAudioConverterInputBlock)(AVAudioPacketCount inNumberOfPackets, AVAudioConverterInputStatus* outStatus);
+typedef AVAudioBuffer * __nullable (^ NS_SWIFT_NONSENDABLE AVAudioConverterInputBlock)(AVAudioPacketCount inNumberOfPackets, AVAudioConverterInputStatus* outStatus);
/*!
@class AVAudioConverter
@abstract
Converts streams of audio between various formats.
*/
-NS_SWIFT_SENDABLE
API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0))
@interface AVAudioConverter : NSObject {
@private
@@ -301,7 +300,7 @@
It attempts to fill the buffer to its capacity. On return, the buffer's length indicates the number of
sample frames successfully converted.
*/
-- (AVAudioConverterOutputStatus)convertToBuffer:(AVAudioBuffer *)outputBuffer error:(NSError **)outError withInputFromBlock:(AVAudioConverterInputBlock)inputBlock;
+- (AVAudioConverterOutputStatus)convertToBuffer:(AVAudioBuffer *)outputBuffer error:(NSError **)outError withInputFromBlock:(NS_NOESCAPE AVAudioConverterInputBlock)inputBlock;
@end
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEngine.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEngine.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEngine.h 2026-04-18 19:16:24
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEngine.h 2026-05-22 05:24:21
@@ -135,9 +135,21 @@
In such a case, the client could implement their own synchronization between their realtime
and non-realtime threads and retry calling `AVAudioEngineManualRenderingBlock`.
*/
-typedef AVAudioEngineManualRenderingStatus (^AVAudioEngineManualRenderingBlock)(AVAudioFrameCount numberOfFrames, AudioBufferList *outBuffer, OSStatus * __nullable outError) API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
+typedef AVAudioEngineManualRenderingStatus (^ NS_SWIFT_NONSENDABLE AVAudioEngineManualRenderingBlock)(AVAudioFrameCount numberOfFrames, AudioBufferList *outBuffer, OSStatus * __nullable outError) API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
/*!
+ @typedef AVMIDIEventListBlock
+ @abstract A block used by an audio unit to send or receive MIDIEventList data.
+ @param eventSampleTime
+ The time in samples at which the MIDI events are to occur.
+ @param cable
+ The virtual cable number associated with this MIDI data.
+ @param eventList
+ One full MIDI, partial MIDI SysEx, or a full SysEx UMP message.
+*/
+typedef OSStatus (^ NS_SWIFT_NONSENDABLE AVMIDIEventListBlock)(SInt64 eventSampleTime, UInt8 cable, const struct MIDIEventList* eventList) CA_REALTIME_API API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), watchos(27.0));
+
+/*!
@class AVAudioEngine
An AVAudioEngine contains a group of connected AVAudioNodes ("nodes"), each of which performs
@@ -157,7 +169,7 @@
audio device and rendering in response to requests from the client, normally at or
faster than realtime rate.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
@interface AVAudioEngine : NSObject {
@private
void *_impl;
@@ -227,8 +239,37 @@
Note that any pre-existing connection(s) involving the source's output bus or the
destination's input bus will be broken.
*/
-- (void)connect:(AVAudioNode *)node1 to:(AVAudioNode *)node2 fromBus:(AVAudioNodeBus)bus1 toBus:(AVAudioNodeBus)bus2 format:(AVAudioFormat * __nullable)format;
+- (void)connect:(AVAudioNode *)node1 to:(AVAudioNode *)node2 fromBus:(AVAudioNodeBus)bus1 toBus:(AVAudioNodeBus)bus2 format:(AVAudioFormat * __nullable)format API_DEPRECATED_WITH_REPLACEMENT("connect:to:fromBus:toBus:format:error:", ios(8.0, 27.0), watchos(2.0, 27.0), macos(10.10, 27.0), tvos(9.0, 27.0));
+/*! @method connect:to:fromBus:toBus:format:error
+ @abstract
+ Establish a connection between two nodes.
+ @param node1
+ The source node
+ @param node2
+ The destination node
+ @param bus1
+ The output bus on the source node
+ @param bus2
+ The input bus on the destination node
+ @param format
+ If non-nil, the format of the source node's output bus is set to this
+ format. In all cases, the format of the destination node's input bus is set to
+ match that of the source node's output bus.
+ @param error
+ on exit, if an error occurs, a description of the error
+ @return
+ YES for success
+
+ Nodes have input and output buses (AVAudioNodeBus). Use this method to establish
+ one-to-one connections betweeen nodes. Connections made using this method are always
+ one-to-one, never one-to-many or many-to-one.
+
+ Note that any pre-existing connection(s) involving the source's output bus or the
+ destination's input bus will be broken.
+*/
+- (BOOL)connect:(AVAudioNode *)node1 to:(AVAudioNode *)node2 fromBus:(AVAudioNodeBus)bus1 toBus:(AVAudioNodeBus)bus2 format:(AVAudioFormat * __nullable)format error:(NSError**)error NS_SWIFT_NAME(connectNode(_:to:fromBus:toBus:format:)) API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0));
+
/*! @method connect:to:format:
@abstract
Establish a connection between two nodes
@@ -237,8 +278,22 @@
and bus 0 on the destination node, except in the case of a destination which is a mixer,
in which case the destination is the mixer's nextAvailableInputBus.
*/
-- (void)connect:(AVAudioNode *)node1 to:(AVAudioNode *)node2 format:(AVAudioFormat * __nullable)format;
+- (void)connect:(AVAudioNode *)node1 to:(AVAudioNode *)node2 format:(AVAudioFormat * __nullable)format API_DEPRECATED_WITH_REPLACEMENT("connect:to:format:error:", ios(8.0, 27.0), watchos(2.0, 27.0), macos(10.10, 27.0), tvos(9.0, 27.0));
+/*! @method connect:to:format:error:
+ @abstract
+ Establish a connection between two nodes
+ @param error
+ on exit, if an error occurs, a description of the error
+ @return
+ YES for success
+
+ This calls connect:to:fromBus:toBus:format: using bus 0 on the source node,
+ and bus 0 on the destination node, except in the case of a destination which is a mixer,
+ in which case the destination is the mixer's nextAvailableInputBus.
+*/
+- (BOOL)connect:(AVAudioNode *)node1 to:(AVAudioNode *)node2 format:(AVAudioFormat * __nullable)format error:(NSError**)error NS_SWIFT_NAME(connectNode(_:to:format:)) API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0));
+
/*! @method connect:toConnectionPoints:fromBus:format:
@abstract
Establish connections between a source node and multiple destination nodes.
@@ -274,8 +329,49 @@
- any AVAudioUnitTimeEffect
- any sample rate conversion
*/
-- (void)connect:(AVAudioNode *)sourceNode toConnectionPoints:(NSArray<AVAudioConnectionPoint *> *)destNodes fromBus:(AVAudioNodeBus)sourceBus format:(AVAudioFormat * __nullable)format API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0));
+- (void)connect:(AVAudioNode *)sourceNode toConnectionPoints:(NSArray<AVAudioConnectionPoint *> *)destNodes fromBus:(AVAudioNodeBus)sourceBus format:(AVAudioFormat * __nullable)format API_DEPRECATED_WITH_REPLACEMENT("connect:toConnectionPoints:fromBus:format:error:", ios(9.0, 27.0), watchos(2.0, 27.0), macos(10.11, 27.0), tvos(9.0, 27.0));
+/*! @method connect:toConnectionPoints:fromBus:format:error:
+ @abstract
+ Establish connections between a source node and multiple destination nodes.
+ @param sourceNode
+ The source node
+ @param destNodes
+ An array of AVAudioConnectionPoint objects specifying destination
+ nodes and busses
+ @param sourceBus
+ The output bus on source node
+ @param format
+ If non-nil, the format of the source node's output bus is set to this
+ format. In all cases, the format of the destination nodes' input bus is set to
+ match that of the source node's output bus
+ @param error
+ on exit, if an error occurs, a description of the error
+ @return
+ YES for success
+
+ Use this method to establish connections from a source node to multiple destination nodes.
+ Connections made using this method are either one-to-one (when a single destination
+ connection is specified) or one-to-many (when multiple connections are specified), but
+ never many-to-one.
+
+ To incrementally add a new connection to a source node, use this method with an array
+ of AVAudioConnectionPoint objects comprising of pre-existing connections (obtained from
+ `outputConnectionPointsForNode:outputBus:`) and the new connection.
+
+ Note that any pre-existing connection involving the destination's input bus will be
+ broken. And, any pre-existing connection on source node which is not a part of the
+ specified destination connection array will also be broken.
+
+ Also note that when the output of a node is split into multiple paths, all the paths
+ must render at the same rate until they reach a common mixer.
+ In other words, starting from the split node until the common mixer node where all split
+ paths terminate, you cannot have:
+ - any AVAudioUnitTimeEffect
+ - any sample rate conversion
+*/
+- (BOOL)connect:(AVAudioNode *)sourceNode toConnectionPoints:(NSArray<AVAudioConnectionPoint *> *)destNodes fromBus:(AVAudioNodeBus)sourceBus format:(AVAudioFormat * __nullable)format error:(NSError**)error NS_SWIFT_NAME(connectNode(_:to:fromBus:format:)) API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0));
+
/*! @method disconnectNodeInput:bus:
@abstract
Remove a connection between two nodes.
@@ -424,7 +520,7 @@
@abstract
The MusicSequence previously attached to the engine (if any).
*/
-@property (nonatomic, nullable) MusicSequence musicSequence;
+@property (nonatomic, nullable) MusicSequence musicSequence NS_REFINED_FOR_SWIFT;
#endif
/*! @property outputNode
@@ -748,8 +844,41 @@
Any client installed block on the source node's audio unit `AUMIDIOutputEventListBlock`
will be overwritten when making the MIDI connection.
*/
-- (void)connectMIDI:(AVAudioNode *)sourceNode to:(AVAudioNode *)destinationNode format:(AVAudioFormat * __nullable)format eventListBlock:(AUMIDIEventListBlock __nullable)tapBlock API_AVAILABLE(macos(13.0), ios(16.0), tvos(16.0), watchos(9.0));
+- (void)connectMIDI:(AVAudioNode *)sourceNode to:(AVAudioNode *)destinationNode format:(AVAudioFormat * __nullable)format eventListBlock:(AUMIDIEventListBlock __nullable)tapBlock __attribute__((swift_attr("@_disfavoredOverload"))) API_DEPRECATED_WITH_REPLACEMENT("connectMIDI:to:format:eventListProvider:", macos(13.0, 27.0), ios(16.0, 27.0), watchos(9.0, 27.0), tvos(16.0, 27.0));
+/*! @method connectMIDI:to:format:eventListProvider:
+ @abstract
+ Establish a MIDI only connection between two nodes.
+ @param sourceNode
+ The source node.
+ @param destinationNode
+ The destination node.
+ @param format
+ If non-nil, the format of the source node's output bus is set to this format.
+ In all cases, the format of the source nodes' output bus has to match with the
+ destination nodes' output bus format.
+ Although the output bus of the source is not in use, the format needs to be set
+ in order to be able to use the sample rate for MIDI event timing calculations.
+ @param tapBlock
+ This block is called from the source node's `AUMIDIOutputEventListBlock`
+ on the realtime thread. The host can tap the MIDI data of the source node through
+ this block.
+
+ Use this method to establish a MIDI only connection between a source node and a
+ destination node that has MIDI input capability.
+
+ The source node can only be a AVAudioUnit node of type `kAudioUnitType_MIDIProcessor`.
+ The destination node types can be `kAudioUnitType_MusicDevice`,
+ `kAudioUnitType_MusicEffect` or `kAudioUnitType_MIDIProcessor`.
+
+ Note that any pre-existing MIDI connection involving the destination will be broken.
+
+ Any client installed block on the source node's audio unit `AUMIDIOutputEventListBlock`
+ will be overwritten when making the MIDI connection.
+ */
+
+- (void)connectMIDI:(AVAudioNode *)sourceNode to:(AVAudioNode *)destinationNode format:(AVAudioFormat * __nullable)format eventListProvider:(AVMIDIEventListBlock __nullable)tapBlock API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), watchos(27.0));
+
/*! @method connectMIDI:toNodes:format:block:
@abstract
Establish a MIDI only connection between a source node and multiple destination nodes.
@@ -820,7 +949,43 @@
Any client installed block on the source node's audio unit `AUMIDIOutputEventListBlock`
will be overwritten when making the MIDI connection.
*/
-- (void)connectMIDI:(AVAudioNode *)sourceNode toNodes:(NSArray<AVAudioNode *> *)destinationNodes format:(AVAudioFormat * __nullable)format eventListBlock:(AUMIDIEventListBlock __nullable)tapBlock API_AVAILABLE(macos(13.0), ios(16.0), tvos(16.0), watchos(9.0));
+- (void)connectMIDI:(AVAudioNode *)sourceNode toNodes:(NSArray<AVAudioNode *> *)destinationNodes format:(AVAudioFormat * __nullable)format eventListBlock:(AUMIDIEventListBlock __nullable)tapBlock __attribute__((swift_attr("@_disfavoredOverload"))) API_DEPRECATED_WITH_REPLACEMENT("connectMIDI:toNodes:format:eventListProvider:", macos(13.0, 27.0), ios(16.0, 27.0), watchos(9.0, 27.0), tvos(16.0, 27.0));
+
+/*! @method connectMIDI:toNodes:format:eventListProvider:
+ @abstract
+ Establish a MIDI only connection between a source node and multiple destination nodes.
+ @param sourceNode
+ The source node.
+ @param destinationNodes
+ An array of AVAudioNodes specifying destination nodes.
+ @param format
+ If non-nil, the format of the source node's output bus is set to this format.
+ In all cases, the format of the source nodes' output bus has to match with the
+ destination nodes' output bus format.
+ Although the output bus of the source is not in use, the format needs to be set
+ in order to be able to use the sample rate for MIDI event timing calculations.
+ @param tapBlock
+ This block is called from the source node's `AUMIDIOutputEventListBlock`
+ on the realtime thread. The host can tap the MIDI data of the source node through
+ this block.
+
+ Use this method to establish a MIDI only connection between a source node and
+ multiple destination nodes.
+
+ The source node can only be a AVAudioUnit node of type `kAudioUnitType_MIDIProcessor`.
+ The destination node types can be `kAudioUnitType_MusicDevice`,
+ `kAudioUnitType_MusicEffect` or `kAudioUnitType_MIDIProcessor`.
+
+ MIDI connections made using this method are either one-to-one (when a single
+ destination connection is specified) or one-to-many (when multiple connections are
+ specified), but never many-to-one.
+
+ Note that any pre-existing connection involving the destination will be broken.
+
+ Any client installed block on the source node's audio unit `AUMIDIOutputEventListBlock`
+ will be overwritten when making the MIDI connection.
+ */
+- (void)connectMIDI:(AVAudioNode *)sourceNode toNodes:(NSArray<AVAudioNode *> *)destinationNodes format:(AVAudioFormat * __nullable)format eventListProvider:(AVMIDIEventListBlock __nullable)tapBlock API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), watchos(27.0));
/*! @method disconnectMIDI:from:
@abstract
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEnvironmentNode.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEnvironmentNode.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEnvironmentNode.h 2026-04-18 22:05:10
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEnvironmentNode.h 2026-05-23 02:50:53
@@ -50,7 +50,7 @@
A standalone instance of AVAudioEnvironmentDistanceAttenuationParameters cannot be created.
Only an instance vended out by a source object (e.g. AVAudioEnvironmentNode) can be used.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
@interface AVAudioEnvironmentDistanceAttenuationParameters : NSObject {
@private
void *_impl;
@@ -113,7 +113,7 @@
Only an instance vended out by a source object (e.g. AVAudioEnvironmentNode) can be used.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
@interface AVAudioEnvironmentReverbParameters : NSObject {
@private
void *_impl;
@@ -205,7 +205,7 @@
with a desired AudioChannelLayout.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
@interface AVAudioEnvironmentNode : AVAudioNode <AVAudioMixing>
- (instancetype)init NS_DESIGNATED_INITIALIZER;
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFile.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFile.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFile.h 2026-04-18 21:41:01
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFile.h 2026-05-22 08:25:33
@@ -25,7 +25,7 @@
Reads and writes are always sequential, but random access is possible by setting the
framePosition property.
*/
-NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
@interface AVAudioFile : NSObject
- (instancetype)init API_DEPRECATED("Deprecated - use initForReading or initForWriting", macos(10.10, 26.0), ios(8.0, 26.0), watchos(2.0, 26.0), tvos(9.0, 26.0), macCatalyst(10.10, 26.0));
@@ -133,6 +133,10 @@
YES for success.
@discussion
Like `readIntoBuffer:error:`, but can be used to read fewer frames than buffer.frameCapacity.
+
+ Starting in macOS 27.0, iOS 27.0, watchOS 27.0, and tvOS 27.0, attempting to read beyond the
+ end of the file will return NO and set outError to an NSError with domain NSOSStatusErrorDomain
+ and code kAudioFileEndOfFileError.
*/
- (BOOL)readIntoBuffer:(AVAudioPCMBuffer *)buffer frameCount:(AVAudioFrameCount)frames error:(NSError **)outError;
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFormat.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFormat.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFormat.h 2026-04-18 22:05:10
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFormat.h 2026-05-22 05:36:49
@@ -7,7 +7,7 @@
#import <AVFAudio/AVAudioChannelLayout.h>
-#if __has_include(<CoreMedia/CMFormatDescription.h>) && !0
+#if __has_include(<CoreMedia/CMFormatDescription.h>) && !0 && !0
#define AVAUDIOFORMAT_HAVE_CMFORMATDESCRIPTION 1
#import <CoreMedia/CMFormatDescription.h>
#endif
@@ -45,7 +45,7 @@
Instances of this class are immutable.
*/
-NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
@interface AVAudioFormat : NSObject <NSSecureCoding> {
@private
AudioStreamBasicDescription _asbd;
@@ -148,7 +148,18 @@
@discussion
If formatDescription is invalid, this method fails (returns nil).
*/
-- (instancetype)initWithCMAudioFormatDescription:(CMAudioFormatDescriptionRef)formatDescription API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0));
+- (instancetype)initWithCMAudioFormatDescription:(CMAudioFormatDescriptionRef)formatDescription API_DEPRECATED_WITH_REPLACEMENT("initWithFormatDescription:", macos(10.11, 27.0), ios(9.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0));
+
+/*!
+ @method initWithFormatDescription:
+ @abstract initialize from a CMAudioFormatDescriptionRef.
+ @param formatDescription
+ the CMAudioFormatDescriptionRef.
+ @discussion
+ If formatDescription is invalid, this method fails (returns nil).
+ */
+- (nullable instancetype)initWithFormatDescription:(CMAudioFormatDescriptionRef)formatDescription API_AVAILABLE(macos(27), ios(27), watchos(27), tvos(27));
+
#endif
/*! @method isEqual:
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioIONode.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioIONode.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioIONode.h 2026-04-18 19:21:10
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioIONode.h 2026-05-22 05:43:57
@@ -35,11 +35,20 @@
Note that when the engine is configured to operate in
`AVAudioEngineManualRenderingModeRealtime`, this block will be called from a realtime
- context. Care should be taken not to make any blocking call (e.g. calling libdispatch,
+ context and using AVAudioIONodeInputBlockRealtimeSafe is preferred.
+ Care should be taken not to make any blocking call (e.g. calling libdispatch,
blocking on a mutex, allocating memory etc.) which may cause an overload at the lower layers.
*/
-typedef const AudioBufferList * __nullable (^AVAudioIONodeInputBlock)(AVAudioFrameCount inNumberOfFrames) API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
+typedef const AudioBufferList * __nullable (^ NS_SWIFT_NONSENDABLE AVAudioIONodeInputBlock)(AVAudioFrameCount inNumberOfFrames) API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
+/*! @typedef AVAudioIONodeInputBlockRealtimeSafe
+ @abstract
+ Identical to AVAudioIONodeInputBlock, with the addition of a realtime-safety guarantee.
+ When the engine is configured to operate in `AVAudioEngineManualRenderingModeRealtime`,
+ use of this block is preferred.
+*/
+typedef const AudioBufferList * __nullable (^AVAudioIONodeInputBlockRealtimeSafe)(AVAudioFrameCount inNumberOfFrames) CA_REALTIME_API API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) __SWIFT_UNAVAILABLE_MSG("Swift is not supported for use with audio realtime threads");
+
/*!
@enum AVAudioVoiceProcessingSpeechActivityEvent
@abstract Types of speech activity events.
@@ -100,7 +109,7 @@
In the manual rendering mode, the AVAudioInputNode and AVAudioOutputNode perform the input
and output in the engine, in response to client's request.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
@interface AVAudioIONode : AVAudioNode
/*! @property presentationLatency
@@ -120,7 +129,7 @@
@discussion
This is only necessary for certain advanced usages.
*/
-@property (nonatomic, readonly, nullable) AudioUnit audioUnit;
+@property (nonatomic, readonly, nullable) AudioUnit audioUnit NS_REFINED_FOR_SWIFT;
#endif
/*! @property voiceProcessingEnabled
@@ -179,7 +188,7 @@
In the manual rendering mode, the format of the output scope is initially the same as that
of the input, but you may set it to a different format, in which case the node will convert.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(4.0), tvos(11.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(4.0), tvos(11.0))
@interface AVAudioInputNode : AVAudioIONode <AVAudioMixing>
- (instancetype)init NS_UNAVAILABLE; // fetch instance via -[AVAudioEngine inputNode].
@@ -201,6 +210,13 @@
*/
- (BOOL)setManualRenderingInputPCMFormat:(AVAudioFormat *)format inputBlock:(AVAudioIONodeInputBlock)block API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
+/*! @method setRealtimeSafeManualRenderingInputPCMFormat:inputBlock:
+ @abstract
+ Identical to setManualRenderingInputPCMFormat:inputBlock:, but requires a realtime-safe
+ input block.
+*/
+- (BOOL)setRealtimeSafeManualRenderingInputPCMFormat:(AVAudioFormat *)format inputBlock:(AVAudioIONodeInputBlockRealtimeSafe)block API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) __SWIFT_UNAVAILABLE_MSG("Swift is not supported for use with audio realtime threads");
+
/*! @property voiceProcessingBypassed
@abstract
Bypass all processing for microphone uplink done by the voice processing unit.
@@ -238,7 +254,7 @@
Continuous presence of or lack of speech activity during mute will not cause redundant notification.
In order to use this API, it's expected to implement the mute via the voiceProcessingInputMuted.
*/
-- (BOOL)setMutedSpeechActivityEventListener:(nullable void (^)(AVAudioVoiceProcessingSpeechActivityEvent event))listenerBlock API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0)) API_UNAVAILABLE(watchos);
+- (BOOL)setMutedSpeechActivityEventListener:(nullable void (^ NS_SWIFT_SENDABLE)(AVAudioVoiceProcessingSpeechActivityEvent event))listenerBlock API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0)) API_UNAVAILABLE(watchos);
/*! @property voiceProcessingOtherAudioDuckingConfiguration
@abstract
@@ -270,7 +286,7 @@
The format of the input scope is initially the same as that of the
output, but you may set it to a different format, in which case the node will convert.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
@interface AVAudioOutputNode : AVAudioIONode
- (instancetype)init NS_UNAVAILABLE; // fetch instance via -[AVAudioEngine outputNode].
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixerNode.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixerNode.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixerNode.h 2026-04-18 20:48:53
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixerNode.h 2026-05-23 02:44:28
@@ -19,7 +19,7 @@
conversions. It also accepts any channel count and will correctly upmix or downmix
to the output channel count.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
@interface AVAudioMixerNode : AVAudioNode <AVAudioMixing>
- (instancetype)init NS_DESIGNATED_INITIALIZER;
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixing.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixing.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixing.h 2026-04-18 21:43:23
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixing.h 2026-05-22 05:24:21
@@ -42,7 +42,7 @@
For example, an AVAudioPlayerNode that is being used in a gaming scenario can set up its
3D mixing settings and then move from one environment to another.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
@protocol AVAudioMixing <AVAudioStereoMixing, AVAudio3DMixing>
/*! @abstract Returns the AVAudioMixingDestination object corresponding to specified mixer node and
@@ -85,7 +85,7 @@
/*! @protocol AVAudioStereoMixing
@abstract Protocol that defines stereo mixing properties
*/
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
@protocol AVAudioStereoMixing <NSObject>
/*! @property pan
@@ -223,6 +223,7 @@
/*! @protocol AVAudio3DMixing
@abstract Protocol that defines 3D mixing properties
*/
+NS_SWIFT_SENDABLE
@protocol AVAudio3DMixing <NSObject>
/*! @property renderingAlgorithm
@@ -319,7 +320,7 @@
Only an instance vended by a source node (e.g. AVAudioPlayerNode) can be used
(see `AVAudioMixing`).
*/
-API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0))
@interface AVAudioMixingDestination : NSObject <AVAudioMixing> {
@private
void *_impl;
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioNode.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioNode.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioNode.h 2026-04-18 21:43:24
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioNode.h 2026-05-22 05:24:22
@@ -29,7 +29,7 @@
@discussion
CAUTION: This callback may be invoked on a thread other than the main thread.
*/
-typedef void (^AVAudioNodeTapBlock)(AVAudioPCMBuffer *buffer, AVAudioTime *when);
+typedef void (^ NS_SWIFT_NONSENDABLE AVAudioNodeTapBlock)(AVAudioPCMBuffer *buffer, AVAudioTime *when);
/*!
@class AVAudioNode
@@ -48,7 +48,7 @@
Nodes do not currently provide useful functionality until attached to an engine.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
@interface AVAudioNode : NSObject {
@protected
void *_impl;
@@ -114,13 +114,57 @@
// start engine
</pre>
*/
-- (void)installTapOnBus:(AVAudioNodeBus)bus bufferSize:(AVAudioFrameCount)bufferSize format:(AVAudioFormat * __nullable)format block:(AVAudioNodeTapBlock)tapBlock;
+- (void)installTapOnBus:(AVAudioNodeBus)bus bufferSize:(AVAudioFrameCount)bufferSize format:(AVAudioFormat * __nullable)format block:(AVAudioNodeTapBlock)tapBlock API_DEPRECATED_WITH_REPLACEMENT("installTapOnBus:bufferSize:format:error:block", ios(8.0, 27.0), watchos(2.0, 27.0), macos(10.10, 27.0), tvos(9.0, 27.0));
+/*! @method installTapOnBus:bufferSize:forma:errort:block:
+ @abstract Create a "tap" to record/monitor/observe the output of the node.
+ @param bus
+ the node output bus to which to attach the tap
+ @param bufferSize
+ the requested size of the incoming buffers in sample frames. Supported range is [100, 400] ms.
+ @param format
+ If non-nil, attempts to apply this as the format of the specified output bus. This should
+ only be done when attaching to an output bus which is not connected to another node; an
+ error will result otherwise.
+ The tap and connection formats (if non-nil) on the specified bus should be identical.
+ Otherwise, the latter operation will override any previously set format.
+ @param outError
+ on exit, if an error occurs, a description of the error.
+ @param tapBlock
+ a block to be called with audio buffers.
+ @return
+ YES for success.
+
+ @discussion
+ Only one tap may be installed on any bus. Taps may be safely installed and removed while
+ the engine is running.
+
+ Note that if you have a tap installed on AVAudioOutputNode, there could be a mismatch
+ between the tap buffer format and AVAudioOutputNode's output format, depending on the
+ underlying physical device. Hence, instead of tapping the AVAudioOutputNode, it is
+ advised to tap the node connected to it.
+
+ E.g. to capture audio from input node:
+<pre>
+AVAudioEngine *engine = [[AVAudioEngine alloc] init];
+AVAudioInputNode *input = [engine inputNode];
+AVAudioFormat *format = [input outputFormatForBus: 0];
+NSError *error = nil;
+BOOL success = [input installTapOnBus: 0 bufferSize: 8192 format: format error:&error block: ^(AVAudioPCMBuffer *buf, AVAudioTime *when) {
+// ‘buf' contains audio captured from input node at time 'when'
+}];
+....
+// start engine
+</pre>
+*/
+- (BOOL)installTapOnBus:(AVAudioNodeBus)bus bufferSize:(AVAudioFrameCount)bufferSize format:(AVAudioFormat * __nullable)format error:(NSError **)outError block:(AVAudioNodeTapBlock)tapBlock NS_REFINED_FOR_SWIFT API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0));
+
/*! @method removeTapOnBus:
@abstract Destroy a tap.
@param bus
the node output bus whose tap is to be destroyed
*/
+
- (void)removeTapOnBus:(AVAudioNodeBus)bus;
/*! @property engine
@@ -158,7 +202,7 @@
directly on the audio unit. These include changing initialization state, stream formats,
channel layouts or connections to other audio units.
*/
-@property (nonatomic, readonly) AUAudioUnit *AUAudioUnit API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
+@property (nonatomic, readonly) AUAudioUnit *AUAudioUnit API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)) NS_REFINED_FOR_SWIFT;
#endif // AVAUDIONODE_HAVE_AUAUDIOUNIT
/*! @property latency
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayer.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayer.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayer.h 2026-04-18 19:21:10
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayer.h 2026-05-22 08:25:34
@@ -123,7 +123,7 @@
@end
/* A protocol for delegates of AVAudioPlayer */
-__WATCHOS_AVAILABLE(3_0)
+NS_SWIFT_UI_ACTOR
@protocol AVAudioPlayerDelegate <NSObject>
@optional
/* audioPlayerDidFinishPlaying:successfully: is called when a sound has finished playing. This method is NOT called if the player is stopped due to an interruption. */
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayerNode.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayerNode.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayerNode.h 2026-04-18 23:16:03
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayerNode.h 2026-05-22 05:36:49
@@ -75,7 +75,7 @@
some synchronisation between the calling threads internally. If you want to call player node API within this
completion handler block, calls should be synchronised to the same thread/queue.
*/
-typedef void (^AVAudioPlayerNodeCompletionHandler)(AVAudioPlayerNodeCompletionCallbackType callbackType) API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
+typedef void (^ NS_SWIFT_SENDING AVAudioPlayerNodeCompletionHandler)(AVAudioPlayerNodeCompletionCallbackType callbackType) API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
/*!
@class AVAudioPlayerNode
@@ -152,7 +152,7 @@
`outputPresentationLatency`) can be used to track how much data the player has rendered and
how much more data is left to render.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
@interface AVAudioPlayerNode : AVAudioNode <AVAudioMixing>
- (instancetype)init NS_DESIGNATED_INITIALIZER;
@@ -309,8 +309,19 @@
@discussion
equivalent to playAtTime:nil
*/
-- (void)play;
+- (void)play API_DEPRECATED_WITH_REPLACEMENT("playAndReturnError:", ios(8.0, 27.0), watchos(2.0, 27.0), macos(10.10, 27.0), tvos(9.0, 27.0));
+/*! @method playAndReturnError:
+ @abstract Start or resume playback immediately.
+ @param outError
+ on exit, if an error occurs, a description of the error.
+ @return
+ YES for success
+ @discussion
+ equivalent to playAtTime:nil error:&error
+*/
+- (BOOL)playAndReturnError:(NSError **)outError NS_SWIFT_NAME(playAudio()) API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0));
+
/*! @method playAtTime:
@abstract Start or resume playback at a specific time.
@param when
@@ -337,7 +348,39 @@
}
</pre>
*/
-- (void)playAtTime:(AVAudioTime * __nullable)when;
+- (void)playAtTime:(AVAudioTime * __nullable)when API_DEPRECATED_WITH_REPLACEMENT("playAtTime:error:", ios(8.0, 27.0), watchos(2.0, 27.0), macos(10.10, 27.0), tvos(9.0, 27.0));
+
+/*! @method playAtTime:error:
+ @abstract Start or resume playback at a specific time.
+ @param when
+ the node time at which to start or resume playback. nil signifies "now".
+ @param outError
+ on exit, if an error occurs, a description of the error.
+ @return
+ YES for success
+ @discussion
+ This node is initially paused. Requests to play buffers or file segments are enqueued, and
+ any necessary decoding begins immediately. Playback does not begin, however, until the player
+ has started playing, via this method.
+
+ Note that providing an AVAudioTime which is past (before lastRenderTime) will cause the
+ player to begin playback immediately.
+
+ E.g. To start a player X seconds in future:
+<pre>
+// start engine and player
+NSError *nsErr = nil;
+[_engine startAndReturnError:&nsErr];
+if (!nsErr) {
+ const float kStartDelayTime = 0.5; // sec
+ AVAudioFormat *outputFormat = [_player outputFormatForBus:0];
+ AVAudioFramePosition startSampleTime = _player.lastRenderTime.sampleTime + kStartDelayTime * outputFormat.sampleRate;
+ AVAudioTime *startTime = [AVAudioTime timeWithSampleTime:startSampleTime atRate:outputFormat.sampleRate];
+ [_player playAtTime:startTime];
+}
+</pre>
+*/
+- (BOOL)playAtTime:(AVAudioTime * __nullable)when error:(NSError **)outError NS_SWIFT_NAME(playAudio(at:)) API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0));
/*! @method pause
@abstract Pause playback.
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioRecorder.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioRecorder.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioRecorder.h 2026-04-18 21:41:00
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioRecorder.h 2026-05-22 08:18:58
@@ -19,7 +19,6 @@
@class AVAudioRecorder
@abstract An object that records audio data to a file.
*/
-NS_SWIFT_SENDABLE
API_AVAILABLE(macos(10.7), ios(3.0), watchos(4.0), tvos(17.0))
@interface AVAudioRecorder : NSObject {
@private
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSession.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSession.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSession.h 2026-04-18 19:21:10
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSession.h 2026-05-22 05:35:05
@@ -20,6 +20,9 @@
// Forward declarations
@class NSError, NSString, NSNumber;
@class AVAudioChannelLayout;
+@class AVAudioSessionInterruptionContext;
+@class AVAudioSessionDeactivationContext;
+@class AVAudioSessionResumptionContext;
// =================================================================================================
#pragma mark-- iOS/tvOS/watchOS AVAudioSession interface --
@@ -197,19 +200,19 @@
After an audio session goes active, `isEchoCancelledInputEnabled` property can be queried to check if the option was honored.
Note that the enabled state may change after route changes, e.g. if user plugs in a headset, that route might not support echo cancellation.
*/
-- (BOOL)setPrefersEchoCancelledInput:(BOOL)value error:(NSError **)error API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(tvos, watchos, macos, visionos);
-@property (readonly, nonatomic) BOOL prefersEchoCancelledInput API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(tvos, watchos, macos, visionos);
+- (BOOL)setPrefersEchoCancelledInput:(BOOL)value error:(NSError **)error API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(macos) API_UNAVAILABLE(tvos, watchos, visionos);
+@property (readonly, nonatomic) BOOL prefersEchoCancelledInput API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(macos) API_UNAVAILABLE(tvos, watchos, visionos);
/// Returns YES if echo cancelled input is successfully enabled on an active session.
/// Please see `prefersEchoCancelledInput` above for more details.
-@property (readonly, nonatomic) BOOL isEchoCancelledInputEnabled API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(tvos, watchos, macos, visionos);
+@property (readonly, nonatomic) BOOL isEchoCancelledInputEnabled API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(macos) API_UNAVAILABLE(tvos, watchos, visionos);
/// This property will return YES if the device supports echo cancellation with the following category and mode combinations:
/// - ``AVAudioSessionCategoryPlayAndRecord`` with ``AVAudioSessionModeDefault``
/// - ``AVAudioSessionCategoryMultiRoute`` with ``AVAudioSessionModeDualRoute``
///
/// Query whether built-in mic / built-in speaker route supports echo cancellation for the session's given category and mode.
-@property(readonly, nonatomic) BOOL isEchoCancelledInputAvailable API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(watchos, tvos) API_UNAVAILABLE(macos);
+@property(readonly, nonatomic) BOOL isEchoCancelledInputAvailable API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(watchos, tvos, macos) ;
/// Sets a Boolean value to inform the system to mute the session's output audio. The default value is false (unmuted).
///
@@ -272,8 +275,19 @@
AVAudioSessionRouteSharingPolicyLongFormAudio should be prepared for this method to fail if no
eligible audio route can be activated or if the user cancels the route picker view.
*/
-- (void)activateWithOptions:(AVAudioSessionActivationOptions)options completionHandler:(void (^)(BOOL activated, NSError * _Nullable error))handler API_AVAILABLE(watchos(5.0)) API_UNAVAILABLE(ios, tvos) API_UNAVAILABLE(macos, macCatalyst);
+- (void)activateWithOptions:(AVAudioSessionActivationOptions)options completionHandler:(void (^)(BOOL activated, NSError * _Nullable error))handler API_AVAILABLE(ios(27.0), watchos(5.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos);
+/// Deactivates the audio session asynchronously.
+///
+/// This method returns immediately without blocking the calling thread. The system calls the completion handler with the result.
+///
+/// - Parameters:
+/// - options: Deactivation options.
+/// - handler: A completion handler called with a success flag and an error if deactivation failed.
+- (void)deactivateWithOptions:(AVAudioSessionDeactivationOptions)options
+ completionHandler:(void (^)(BOOL deactivated, NSError *_Nullable error))handler
+ API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos);
+
@end // AVAudioSession(Activation)
/*!
@@ -549,6 +563,59 @@
@end // AVAudioSession (NowPlayingCandidacy)
#endif // TARGET_OS_VISION
+
+// =================================================================================================
+#pragma mark-- Async Activation Types --
+
+/// An object that provides context about an audio session interruption.
+API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos)
+NS_SWIFT_NAME(AVAudioSession.InterruptionContext)
+NS_SWIFT_SENDABLE
+@interface AVAudioSessionInterruptionContext : NSObject
+
+/// The reason for the interruption.
+@property (readonly, nonatomic) AVAudioSessionInterruptionReason reason;
+
+/// Unavailable - contexts are created by the system.
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+/// An object that describes why and how the audio session deactivated.
+API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos)
+NS_SWIFT_NAME(AVAudioSession.DeactivationContext)
+NS_SWIFT_SENDABLE
+@interface AVAudioSessionDeactivationContext : NSObject
+
+/// The source of the audio session deactivation.
+@property (readonly, nonatomic) AVAudioSessionDeactivationSource source;
+
+/// Context about the interruption that caused deactivation.
+///
+/// This property is only present when the session was interrupted by another application.
+@property (readonly, nonatomic, nullable) AVAudioSessionInterruptionContext *interruptionContext;
+
+/// Unavailable - contexts are created by the system.
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+/// An object that provides context when resumption becomes available.
+API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos)
+NS_SWIFT_NAME(AVAudioSession.ResumptionContext)
+NS_SWIFT_SENDABLE
+@interface AVAudioSessionResumptionContext : NSObject
+
+/// The system's recommendation on whether to resume playback.
+@property (readonly, nonatomic) AVAudioSessionResumptionRecommendation recommendation;
+
+/// Unavailable - contexts are created by the system.
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
NS_ASSUME_NONNULL_END
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionRoute.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionRoute.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionRoute.h 2026-04-18 21:56:21
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionRoute.h 2026-05-22 08:25:33
@@ -146,6 +146,7 @@
///
/// Please see ``AVAudioSessionCategoryOptions/AVAudioSessionCategoryOptionBluetoothHighQualityRecording`` for details.
@property (readonly, strong, nonatomic, nonnull) AVAudioSessionCapability* highQualityRecording;
+
/// Describes whether this port supports far-field input capture.
@property (readonly, strong, nonatomic, nonnull) AVAudioSessionCapability* farFieldCapture;
@end
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionTypes.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionTypes.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionTypes.h 2026-04-18 20:48:53
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionTypes.h 2026-05-23 02:44:28
@@ -84,6 +84,9 @@
/// Input or output connected via Thunderbolt
OS_EXPORT AVAudioSessionPort const AVAudioSessionPortThunderbolt API_AVAILABLE(ios(14.0), watchos(7.0), tvos(14.0)) API_UNAVAILABLE(macos);
+/// Output to a media device vended through a system-wide extension that the user has installed
+OS_EXPORT AVAudioSessionPort const AVAudioSessionPortMediaDeviceExtension API_AVAILABLE(ios(27.0)) API_UNAVAILABLE(watchos, tvos, macos, visionos);
+
#pragma mark -- audio session categories --
/// A category defines a broad set of behaviors for a session.
@@ -197,19 +200,18 @@
/// - if the session is output muted, system may prevent interrupting other active audio apps.
OS_EXPORT AVAudioSessionMode const AVAudioSessionModeShortFormVideo API_AVAILABLE(ios(26.0)) API_UNAVAILABLE(watchos, tvos, visionos, macos);
-/// Appropriate for applications that require simultaneous use of built-in microphone/speaker
-/// with a secondary audio device that supports both input and output capabilities.
+/// A mode that provides simultaneous use of the built-in microphone/speaker and a secondary audio device that supports input and output.
///
-/// Only valid with ``AVAudioSessionCategoryMultiRoute``.
+/// This mode can only be used with the ``AVAudioSessionCategoryMultiRoute`` category. It additionally requires you to set the ``AVAudioSesssion/CategoryOptions/allowBluetoothHFP`` option.
///
-/// This mode requires ``AVAudioSessionCategoryOptionAllowBluetoothHFP`` to be set
+/// Enabling this mode results in the following behavior:
+/// - The primary audio route is always the built-in microphone/speaker.
+/// - The supported secondary route types are ``AVAudioSessionPortHeadsetMic``, ``AVAudioSessionPortHeadphones``, ``AVAudioSessionPortBluetoothLE``, and ``AVAudioSessionPortBluetoothHFP``.
+/// - Only audio routes that support input and output are available for use.
+/// - The hardware volume controls adjusts the volume for both primary and secondary routes.
+/// - The system may engage appropriate signal processing for output routes.
///
-/// When this mode is set:
-/// - The audio route will always include built-in mic/speaker as the primary route
-/// - Supported secondary route types: ``AVAudioSessionPortHeadsetMic``, ``AVAudioSessionPortHeadphones``, ``AVAudioSessionPortBluetoothLE``, ``AVAudioSessionPortBluetoothHFP``
-/// - Only routes with both input/output capabilities will be supported
-/// - Hardware volume controls will adjust volume for both primary and secondary routes
-/// - System may engage appropriate signal processing for output routes
+/// > Important: This API may not be used to enable recordings of others without their awareness.
OS_EXPORT AVAudioSessionMode const AVAudioSessionModeDualRoute API_AVAILABLE(ios(26.2)) API_UNAVAILABLE(watchos, tvos, visionos, macos);
#pragma mark-- Names for NSNotifications --
@@ -224,7 +226,7 @@
In the case of a begin interruption notification, the reason for the interruption can be found
within the info dictionary under the key AVAudioSessionInterruptionReasonKey.
*/
-OS_EXPORT NSNotificationName const AVAudioSessionInterruptionNotification API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);
+OS_EXPORT NSNotificationName const AVAudioSessionInterruptionNotification API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_DEPRECATED("Use AVAudioSessionDidBecomeInactiveNotification and AVAudioSessionResumptionRecommendationNotification instead", ios(6.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0), visionos(1.0, 27.0)) API_UNAVAILABLE(macos);
/*!
@brief Notification sent to registered listeners when an audio route change has occurred.
@@ -303,6 +305,21 @@
/// Notification sent to registered listeners when the application's output is muted and user hints to unmute.
OS_EXPORT NSNotificationName const AVAudioSessionUserIntentToUnmuteOutputNotification API_AVAILABLE(ios(26.0)) API_UNAVAILABLE(watchos, tvos, visionos, macos) NS_SWIFT_NAME(AVAudioSession.userIntentToUnmuteOutputNotification);
+/// Notification sent when the audio session becomes active.
+///
+/// This notification has no userInfo payload.
+OS_EXPORT NSNotificationName const AVAudioSessionDidBecomeActiveNotification API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos) NS_SWIFT_NAME(AVAudioSession.didBecomeActiveNotification);
+
+/// Notification sent when the audio session becomes inactive.
+///
+/// The userInfo dictionary contains an ``AVAudioSessionDeactivationContext`` object accessible via ``AVAudioSessionDeactivationContextKey``.
+OS_EXPORT NSNotificationName const AVAudioSessionDidBecomeInactiveNotification API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos) NS_SWIFT_NAME(AVAudioSession.didBecomeInactiveNotification);
+
+/// Notification sent when the system provides a resumption recommendation.
+///
+/// The userInfo dictionary contains an ``AVAudioSessionResumptionContext`` object accessible via ``AVAudioSessionResumptionContextKey``.
+OS_EXPORT NSNotificationName const AVAudioSessionResumptionRecommendationNotification API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos) NS_SWIFT_NAME(AVAudioSession.resumptionRecommendationNotification);
+
#pragma mark-- Keys for NSNotification userInfo dictionaries --
/// keys for AVAudioSessionSpatialPlaybackCapabilitiesChangedNotification
@@ -311,13 +328,13 @@
/// keys for AVAudioSessionInterruptionNotification
/// Value is an NSNumber representing an AVAudioSessionInterruptionType
-OS_EXPORT NSString *const AVAudioSessionInterruptionTypeKey API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);
+OS_EXPORT NSString *const AVAudioSessionInterruptionTypeKey API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_DEPRECATED("Use AVAudioSessionDidBecomeInactiveNotification and AVAudioSessionResumptionRecommendationNotification instead", ios(6.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0), visionos(1.0, 27.0)) API_UNAVAILABLE(macos);
/// Only present for end interruption events. Value is of type AVAudioSessionInterruptionOptions.
-OS_EXPORT NSString *const AVAudioSessionInterruptionOptionKey API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);
+OS_EXPORT NSString *const AVAudioSessionInterruptionOptionKey API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_DEPRECATED("Use AVAudioSessionDidBecomeInactiveNotification and AVAudioSessionResumptionRecommendationNotification instead", ios(6.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0), visionos(1.0, 27.0)) API_UNAVAILABLE(macos);
/// Only present in begin interruption events. Value is of type AVAudioSessionInterruptionReason.
-OS_EXPORT NSString *const AVAudioSessionInterruptionReasonKey API_AVAILABLE(ios(14.5), watchos(7.3)) API_UNAVAILABLE(tvos, macos);
+OS_EXPORT NSString *const AVAudioSessionInterruptionReasonKey API_AVAILABLE(ios(14.5), watchos(7.3)) API_DEPRECATED("Use AVAudioSessionDeactivationContext.interruptionDetails.reason instead", ios(14.5, 27.0), watchos(7.3, 27.0), tvos(14.5, 27.0), visionos(1.0, 27.0)) API_UNAVAILABLE(tvos, macos);
/*!
Only present in begin interruption events, where the interruption is a direct result of the
@@ -355,6 +372,16 @@
/// Value is an NSNumber whose boolean value indicates if microphone injection is available.
OS_EXPORT NSString *const AVAudioSessionMicrophoneInjectionIsAvailableKey API_AVAILABLE(ios(18.2), visionos(2.2)) API_UNAVAILABLE(tvos, watchos, macos);
+/// Keys for ``AVAudioSessionDidBecomeInactiveNotification``
+/// Value is an ``AVAudioSessionDeactivationContext`` object describing the deactivation.
+OS_EXPORT NSString *const AVAudioSessionDeactivationContextKey API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos)
+NS_SWIFT_NAME(AVAudioSession.deactivationContextKey);
+
+/// Keys for ``AVAudioSessionResumptionRecommendationNotification``
+/// Value is an ``AVAudioSessionResumptionContext`` describing the resumption recommendation.
+OS_EXPORT NSString *const AVAudioSessionResumptionContextKey API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos)
+NS_SWIFT_NAME(AVAudioSession.resumptionContextKey);
+
/*!
@brief Notification sent to registered listeners when there are changes in ``availableInputs``.
@@ -368,13 +395,19 @@
/*!
@enum AVAudioSessionActivationOptions
@brief For use with activateWithOptions:completionHandler:
-
- Reserved for future use. Added in watchOS 5.0.
*/
typedef NS_OPTIONS(NSUInteger, AVAudioSessionActivationOptions) {
AVAudioSessionActivationOptionNone = 0
};
+/// Options for deactivating an AVAudioSession
+typedef NS_OPTIONS(NSUInteger, AVAudioSessionDeactivationOptions) {
+ AVAudioSessionDeactivationOptionNone = 0,
+
+ /// Notify an interrupted app that the interruption has ended and it may resume playback.
+ AVAudioSessionDeactivationOptionNotifyOthersOnDeactivation API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos) = 1 << 0,
+};
+
/// For use with overrideOutputAudioPort:error:
typedef NS_ENUM(NSUInteger, AVAudioSessionPortOverride) {
/// No override. Return audio routing to the default state for the current audio category.
@@ -566,7 +599,7 @@
/// This option should be used if a session prefers to use FarFieldInput when available.
/// This option is only valid with categories that support input -
- /// ``AVAudioSessionCategoryPlayAndRecord`` and ``AVAudioSessionCategoryRecord``.
+ /// ``AVAudioSessionCategoryPlayAndRecord``, ``AVAudioSessionCategoryRecord``, and ``AVAudioSessionMultiRoute`` with ``AVAudioSessionModeDualRoute``.
///
/// - This option requires ``AVAudioSessionCategoryOptionAllowBluetoothHFP`` to be set.
/// Otherwise error will be returned.
@@ -607,14 +640,14 @@
typedef NS_ENUM(NSUInteger, AVAudioSessionInterruptionType) {
AVAudioSessionInterruptionTypeBegan = 1, ///< the system has interrupted your audio session
AVAudioSessionInterruptionTypeEnded = 0, ///< the interruption has ended
-};
+} API_DEPRECATED("Use AVAudioSessionDidBecomeInactiveNotification and AVAudioSessionResumptionRecommendationNotification instead", ios(6.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0), visionos(1.0, 27.0));
/// Values for AVAudioSessionInterruptionOptionKey in AVAudioSessionInterruptionNotification's
/// userInfo dictionary.
typedef NS_OPTIONS(NSUInteger, AVAudioSessionInterruptionOptions) {
/// Indicates that you should resume playback now that the interruption has ended.
AVAudioSessionInterruptionOptionShouldResume = 1
-};
+} API_DEPRECATED("Use AVAudioSessionResumptionRecommendationNotification instead", ios(6.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0), visionos(1.0, 27.0));
/*!
@enum AVAudioSessionInterruptionReason
@@ -651,6 +684,20 @@
AVAudioSessionInterruptionReasonDeviceUnauthenticated API_UNAVAILABLE(visionos) = 5,
#endif // TARGET_OS_VISION
} NS_SWIFT_NAME(AVAudioSession.InterruptionReason);
+
+/// The source of the audio session deactivation.
+typedef NS_ENUM(NSInteger, AVAudioSessionDeactivationSource) {
+ AVAudioSessionDeactivationSourceApp = 1, // App requested deactivation.
+ AVAudioSessionDeactivationSourceSystem = 2, // The system deactivated the session.
+} NS_SWIFT_NAME(AVAudioSession.DeactivationSource)
+API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos);
+
+/// The system's recommendation on whether to resume playback.
+typedef NS_ENUM(NSInteger, AVAudioSessionResumptionRecommendation) {
+ AVAudioSessionResumptionRecommendationShouldNotResume = 0, // The system recommends not resuming.
+ AVAudioSessionResumptionRecommendationShouldResume = 1, // The system recommends resuming.
+} NS_SWIFT_NAME(AVAudioSession.ResumptionRecommendation)
+API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos);
/// options for use when calling setActive:withOptions:error:
typedef NS_OPTIONS(NSUInteger, AVAudioSessionSetActiveOptions)
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSinkNode.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSinkNode.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSinkNode.h 2026-04-18 20:48:53
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSinkNode.h 2026-05-23 02:50:53
@@ -30,8 +30,15 @@
An OSStatus result code. If an error is returned, the input data should be assumed to be
invalid.
*/
-typedef OSStatus (^AVAudioSinkNodeReceiverBlock)(const AudioTimeStamp *timestamp, AVAudioFrameCount frameCount, const AudioBufferList *inputData) API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0)) ;
+typedef OSStatus (^ NS_SWIFT_NONSENDABLE AVAudioSinkNodeReceiverBlock)(const AudioTimeStamp *timestamp, AVAudioFrameCount frameCount, const AudioBufferList *inputData) API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0)) ;
+/*! @typedef AVAudioSinkNodeReceiverBlockRealtimeSafe
+ @abstract
+ Identical to AVAudioSinkNodeReceiverBlock, with the addition of a realtime-safety
+ guarantee.
+*/
+typedef OSStatus (^AVAudioSinkNodeReceiverBlockRealtimeSafe)(const AudioTimeStamp *timestamp, AVAudioFrameCount frameCount, const AudioBufferList *inputData) CA_REALTIME_API API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) __SWIFT_UNAVAILABLE_MSG("Swift is not supported for use with audio realtime threads");
+
/*! @class AVAudioSinkNode
@abstract AVAudioSinkNode wraps a client provided block to receive input audio on the audio IO thread.
@discussion
@@ -49,7 +56,7 @@
AVAudioSinkNode does not have an output bus and therefore it does not support tapping.
*/
-API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0))
@interface AVAudioSinkNode : AVAudioNode
- (instancetype)init NS_UNAVAILABLE;
@@ -59,6 +66,8 @@
@param block
The block that receives audio data from the input.
@discussion
+ The preferred initializer is initWithRealtimeSafeReceiverBlock: and should be used instead.
+
The receiver block is called when the input data is available.
The block will be called on the realtime thread and it is the client's responsibility to
@@ -70,6 +79,12 @@
The audio format for the data received by the block will be set to the node's input format.
*/
- (instancetype)initWithReceiverBlock:(AVAudioSinkNodeReceiverBlock)block NS_DESIGNATED_INITIALIZER;
+
+/*! @method initWithRealtimeSafeReceiverBlock:
+ @abstract
+ Identical to initWithReceiverBlock:, but requires a realtime-safe block and is the preferred initializer.
+*/
+- (instancetype)initWithRealtimeSafeReceiverBlock:(AVAudioSinkNodeReceiverBlockRealtimeSafe)block NS_DESIGNATED_INITIALIZER API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) __SWIFT_UNAVAILABLE_MSG("Swift is not supported for use with audio realtime threads");
@end
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSourceNode.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSourceNode.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSourceNode.h 2026-04-18 19:21:10
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSourceNode.h 2026-05-22 05:36:49
@@ -38,18 +38,25 @@
An OSStatus result code. If an error is returned, the audio data should be assumed to be
invalid.
*/
-typedef OSStatus (^AVAudioSourceNodeRenderBlock)(BOOL *isSilence, const AudioTimeStamp *timestamp, AVAudioFrameCount frameCount, AudioBufferList *outputData) API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0)) ;
+typedef OSStatus (^ NS_SWIFT_NONSENDABLE AVAudioSourceNodeRenderBlock)(BOOL *isSilence, const AudioTimeStamp *timestamp, AVAudioFrameCount frameCount, AudioBufferList *outputData) API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0)) ;
+/*! @typedef AVAudioSourceNodeRenderBlockRealtimeSafe
+ @abstract
+ Identical to AVAudioSourceNodeRenderBlock, with the addition of a realtime-safety
+ guarantee.
+*/
+typedef OSStatus (^AVAudioSourceNodeRenderBlockRealtimeSafe)(BOOL *isSilence, const AudioTimeStamp *timestamp, AVAudioFrameCount frameCount, AudioBufferList *outputData) CA_REALTIME_API API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) __SWIFT_UNAVAILABLE_MSG("Swift is not supported for use with audio realtime threads");
+
/*!
@class AVAudioSourceNode
@abstract AVAudioSourceNode wraps a client provided block to supply audio.
@discussion
With AVAudioSourceNode the client can supply audio data for rendering through an
- AVAudioSourceNodeRenderBlock block.
+ AVAudioSourceNodeRenderBlock or AVAudioSourceNodeRenderBlockRealtimeSafe block.
This is similar to setting the input callback on an Audio Unit with the
kAudioUnitProperty_SetRenderCallback property.
*/
-API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0))
@interface AVAudioSourceNode : AVAudioNode <AVAudioMixing>
- (instancetype)init NS_UNAVAILABLE;
@@ -61,6 +68,8 @@
@discussion
The block can be called on realtime or non-realtime threads depending on the engine’s
operating mode and it is the client's responsibility to handle it in a thread-safe manner.
+ When the the engine is configured for realtime use (rendering to a device, or using
+ `AVAudioEngineManualRenderingModeRealtime`) initWithRealtimeSafeRenderBlock: is preferred.
The audio format for the output bus will be set from the connection format when connecting
to another node.
@@ -70,6 +79,14 @@
*/
- (instancetype)initWithRenderBlock:(AVAudioSourceNodeRenderBlock)block NS_DESIGNATED_INITIALIZER;
+/*! @method initWithRealtimeSafeRenderBlock:
+ @abstract
+ Identical to initWithRenderBlock:, but requires a realtime-safe block.
+ When the the engine is configured for realtime use (rendering to a device, or using
+ `AVAudioEngineManualRenderingModeRealtime`) this initializer is preferred.
+*/
+- (instancetype)initWithRealtimeSafeRenderBlock:(AVAudioSourceNodeRenderBlockRealtimeSafe)block NS_DESIGNATED_INITIALIZER API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) __SWIFT_UNAVAILABLE_MSG("Swift is not supported for use with audio realtime threads");
+
/*! @method initWithFormat:renderBlock:
@abstract Create a node with a render block.
@param format
@@ -79,6 +96,8 @@
@discussion
The block can be called on realtime or non-realtime threads depending on the engine’s
operating mode and it is the client's responsibility to handle it in a thread-safe manner.
+ When the the engine is configured for realtime use (rendering to a device, or using
+ `AVAudioEngineManualRenderingModeRealtime`) initWithFormat:realtimeSafeRenderBlock: is preferred.
The audio format for the output bus will be set from the connection format when connecting
to another node.
@@ -87,6 +106,14 @@
Linear PCM conversions are supported (sample rate, bit depth, interleaving).
*/
- (instancetype)initWithFormat:(AVAudioFormat*)format renderBlock:(AVAudioSourceNodeRenderBlock)block NS_DESIGNATED_INITIALIZER;
+
+/*! @method initWithFormat:realtimeSafeRenderBlock:
+ @abstract
+ Identical to initWithFormat:renderBlock:, but requires a realtime-safe block.
+ When the the engine is configured for realtime use (rendering to a device, or using
+ `AVAudioEngineManualRenderingModeRealtime`) this initializer is preferred.
+*/
+- (instancetype)initWithFormat:(AVAudioFormat*)format realtimeSafeRenderBlock:(AVAudioSourceNodeRenderBlockRealtimeSafe)block NS_DESIGNATED_INITIALIZER API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) __SWIFT_UNAVAILABLE_MSG("Swift is not supported for use with audio realtime threads");
@end
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioTypes.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioTypes.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioTypes.h 2026-04-18 22:05:09
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioTypes.h 2026-05-22 08:28:48
@@ -42,7 +42,7 @@
the callback arrives on a non-main thread and it is the client's responsibility to handle it
in a thread-safe manner.
*/
-typedef void (^AVAudioNodeCompletionHandler)(void);
+typedef void (^ NS_SWIFT_SENDING AVAudioNodeCompletionHandler)(void);
/*! @typedef AVAudioNodeBus
@abstract The index of a bus on an AVAudioNode.
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnit.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnit.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnit.h 2026-04-18 21:43:24
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnit.h 2026-05-22 08:25:34
@@ -24,7 +24,7 @@
An AVAudioUnit is an AVAudioNode implemented by an audio unit. Depending on the type of
the audio unit, audio is processed either in real-time or non real-time.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
@interface AVAudioUnit : AVAudioNode
#if AVAUDIOUNIT_HAVE_AUDIOUNIT
@@ -47,7 +47,7 @@
AVAudioUnitGenerator, AVAudioUnitMIDIInstrument, or AVAudioUnitTimeEffect), selected
according to the component's type.
*/
-+ (void)instantiateWithComponentDescription:(AudioComponentDescription)audioComponentDescription options:(AudioComponentInstantiationOptions)options completionHandler:(void (^)(__kindof AVAudioUnit * __nullable audioUnit, NSError * __nullable error))completionHandler API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0));
++ (void)instantiateWithComponentDescription:(AudioComponentDescription)audioComponentDescription options:(AudioComponentInstantiationOptions)options completionHandler:(void (^ NS_SWIFT_SENDING)(__kindof AVAudioUnit * __nullable audioUnit, NSError * __nullable error))completionHandler API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0));
/*! @method loadAudioUnitPresetAtURL:error:
@abstract Load an audio unit preset.
@@ -75,7 +75,7 @@
directly on the audio unit. These include changing initialization state, stream formats,
channel layouts or connections to other audio units.
*/
-@property (nonatomic, readonly) AudioUnit audioUnit;
+@property (nonatomic, readonly) AudioUnit audioUnit NS_REFINED_FOR_SWIFT;
#ifdef __OBJC2__
/*! @property AUAudioUnit
@@ -89,7 +89,7 @@
engine should be performed directly on the audio unit. These include changing initialization
state, stream formats, channel layouts or connections to other audio units.
*/
-@property (nonatomic, readonly) AUAudioUnit *AUAudioUnit API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0));
+@property (nonatomic, readonly) AUAudioUnit *AUAudioUnit API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0)) NS_REFINED_FOR_SWIFT;
#endif // __OBJC2__
/*! @property name
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitComponent.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitComponent.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitComponent.h 2026-04-18 20:48:54
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitComponent.h 2026-05-22 08:18:59
@@ -174,7 +174,7 @@
#pragma mark AVAudioUnitComponentManager
/* The notification object is an AVAudioUnitComponent object */
-extern NSString * const AVAudioUnitComponentTagsDidChangeNotification API_AVAILABLE(macos(10.10), ios(9.0), tvos(9.0)) API_UNAVAILABLE(watchos);
+extern NSString * const AVAudioUnitComponentTagsDidChangeNotification API_AVAILABLE(macos(10.10), ios(9.0), tvos(9.0)) API_DEPRECATED("User tags are only supported on macOS", ios(9.0, 27.0), tvos(9.0, 27.0)) API_UNAVAILABLE(watchos) API_UNAVAILABLE(watchos);
/*!
@class AVAudioUnitComponentManager
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDelay.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDelay.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDelay.h 2026-04-18 20:48:53
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDelay.h 2026-05-23 02:44:28
@@ -18,7 +18,7 @@
a tape delay.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
@interface AVAudioUnitDelay : AVAudioUnitEffect
/*! @property delayTime
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDistortion.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDistortion.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDistortion.h 2026-04-18 20:48:54
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDistortion.h 2026-05-23 02:44:29
@@ -38,7 +38,7 @@
@abstract An AVAudioUnitEffect that implements a multi-stage distortion effect.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
@interface AVAudioUnitDistortion : AVAudioUnitEffect
/*! @method loadFactoryPreset:
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEQ.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEQ.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEQ.h 2026-04-18 21:43:23
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEQ.h 2026-05-23 02:44:29
@@ -81,7 +81,7 @@
A standalone instance of AVAudioUnitEQFilterParameters cannot be created. Only an instance
vended out by a source object (e.g. AVAudioUnitEQ) can be used.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
@interface AVAudioUnitEQFilterParameters : NSObject {
@private
void *_impl;
@@ -135,7 +135,7 @@
@abstract An AVAudioUnitEffect that implements a Multi-Band Equalizer.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
@interface AVAudioUnitEQ : AVAudioUnitEffect
/*! @method initWithNumberOfBands:
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEffect.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEffect.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEffect.h 2026-04-18 20:48:53
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEffect.h 2026-05-23 02:44:29
@@ -21,7 +21,7 @@
example of an effect unit.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
@interface AVAudioUnitEffect : AVAudioUnit
#if AVAUDIOUNIT_HAVE_AUDIOUNIT
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitGenerator.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitGenerator.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitGenerator.h 2026-04-18 20:48:54
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitGenerator.h 2026-05-23 02:44:30
@@ -18,7 +18,7 @@
A generator will have no audio input, but will just produce audio output.
A tone generator is an example of this.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
@interface AVAudioUnitGenerator : AVAudioUnit <AVAudioMixing>
#if AVAUDIOUNIT_HAVE_AUDIOUNIT
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitMIDIInstrument.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitMIDIInstrument.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitMIDIInstrument.h 2026-04-18 19:21:10
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitMIDIInstrument.h 2026-05-22 05:43:57
@@ -20,7 +20,7 @@
NS_ASSUME_NONNULL_BEGIN
/// Base class for MIDI instruments.
-API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
@interface AVAudioUnitMIDIInstrument : AVAudioUnit AVAudioUnitMIDIInstrument_MixingConformance
#if AVAUDIOUNIT_HAVE_AUDIOUNIT
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitReverb.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitReverb.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitReverb.h 2026-04-18 20:48:54
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitReverb.h 2026-05-23 02:44:29
@@ -22,7 +22,8 @@
AVAudioUnitReverbPresetLargeRoom2 = 9,
AVAudioUnitReverbPresetMediumHall2 = 10,
AVAudioUnitReverbPresetMediumHall3 = 11,
- AVAudioUnitReverbPresetLargeHall2 = 12
+ AVAudioUnitReverbPresetLargeHall2 = 12,
+ AVAudioUnitReverbPresetOutdoorGeneral API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos) = 24
} NS_ENUM_AVAILABLE(10_10, 8_0);
/*! @class AVAudioUnitReverb
@@ -33,7 +34,7 @@
the original signal using the wetDryMix parameter.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
@interface AVAudioUnitReverb : AVAudioUnitEffect
/*! @method loadFactoryPreset:
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitSampler.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitSampler.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitSampler.h 2026-04-18 20:48:54
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitSampler.h 2026-05-23 02:44:30
@@ -19,7 +19,7 @@
The output is a single stereo bus.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
@interface AVAudioUnitSampler : AVAudioUnitMIDIInstrument
/*! @method loadSoundBankInstrumentAtURL:program:bankMSB:bankLSB:error:
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimeEffect.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimeEffect.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimeEffect.h 2026-04-18 20:48:54
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimeEffect.h 2026-05-23 02:44:30
@@ -17,7 +17,7 @@
unit is an example of a time effect unit.
*/
-API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
@interface AVAudioUnitTimeEffect : AVAudioUnit
#if AVAUDIOUNIT_HAVE_AUDIOUNIT
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimePitch.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimePitch.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimePitch.h 2026-04-18 20:48:53
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimePitch.h 2026-05-23 02:44:29
@@ -15,7 +15,7 @@
In this time effect, the playback rate and pitch parameters function independently of each other
*/
-API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
@interface AVAudioUnitTimePitch : AVAudioUnitTimeEffect
/*! @property rate
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitVarispeed.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitVarispeed.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitVarispeed.h 2026-04-18 20:48:53
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitVarispeed.h 2026-05-23 02:44:28
@@ -12,7 +12,7 @@
/*! @class AVAudioUnitVarispeed
@abstract an AVAudioUnitTimeEffect that can be used to control the playback rate
*/
-API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
@interface AVAudioUnitVarispeed : AVAudioUnitTimeEffect
/*! @property rate
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVMIDIPlayer.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVMIDIPlayer.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVMIDIPlayer.h 2026-04-18 20:48:53
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVMIDIPlayer.h 2026-05-23 02:44:29
@@ -14,7 +14,7 @@
/*! @typedef AVMIDIPlayerCompletionHandler
@abstract Generic callback block.
*/
-typedef void (^AVMIDIPlayerCompletionHandler)(void);
+typedef void (^ NS_SWIFT_SENDING AVMIDIPlayerCompletionHandler)(void);
/*! @class AVMIDIPlayer
@abstract A player for music file formats (MIDI, iMelody).