Skip to content

Bump to Xcode 16.4 beta 1. #22693

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
May 7, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Make.config
Original file line number Diff line number Diff line change
@@ -201,9 +201,9 @@ MACCATALYST_NUGET_VERSION_NO_METADATA=$(MACCATALYST_NUGET_VERSION)$(NUGET_PREREL
MACCATALYST_NUGET_VERSION_FULL=$(MACCATALYST_NUGET_VERSION_NO_METADATA)$(NUGET_BUILD_METADATA)

# Xcode version should have both a major and a minor version (even if the minor version is 0)
XCODE_VERSION=16.3
XCODE_URL=https://dl.internalx.com/internal-files/xcodes/Xcode_16.3.xip
XCODE_DEVELOPER_ROOT=/Applications/Xcode_16.3.0.app/Contents/Developer
XCODE_VERSION=16.4
XCODE_URL=https://dl.internalx.com/internal-files/xcodes/Xcode_16.4_beta.xip
XCODE_DEVELOPER_ROOT=/Applications/Xcode_16.4.0-beta.app/Contents/Developer
XCODE_PRODUCT_BUILD_VERSION:=$(shell /usr/libexec/PlistBuddy -c 'Print :ProductBuildVersion' $(XCODE_DEVELOPER_ROOT)/../version.plist 2>/dev/null || echo " $(shell tput setaf 1 2>/dev/null)The required Xcode ($(XCODE_VERSION)) is not installed in $(basename $(basename $(XCODE_DEVELOPER_ROOT)))$(shell tput sgr0 2>/dev/null)" >&2)

# We define stable Xcode as the Xcode app being named like "Xcode_#.#[.#].app"
8 changes: 4 additions & 4 deletions Make.versions
Original file line number Diff line number Diff line change
@@ -21,10 +21,10 @@
# IMPORTANT: There must be *no* managed API differences unless the two first
# numbers (major.minor) changes.

IOS_NUGET_OS_VERSION=18.4
TVOS_NUGET_OS_VERSION=18.4
MACOS_NUGET_OS_VERSION=15.4
MACCATALYST_NUGET_OS_VERSION=18.4
IOS_NUGET_OS_VERSION=18.5
TVOS_NUGET_OS_VERSION=18.5
MACOS_NUGET_OS_VERSION=15.5
MACCATALYST_NUGET_OS_VERSION=18.5

# The following are the OS versions we first supported with the current .NET version.
# These versions must *not* change with minor .NET updates, only major .NET releases.
2 changes: 2 additions & 0 deletions builds/Versions-MacCatalyst.plist.in
Original file line number Diff line number Diff line change
@@ -23,6 +23,7 @@
<string>18.2</string>
<string>18.3</string>
<string>18.4</string>
<string>18.5</string>
</array>
</dict>
<key>SupportedTargetPlatformVersions</key>
@@ -56,6 +57,7 @@
<string>18.2</string>
<string>18.3</string>
<string>18.4</string>
<string>18.5</string>
</array>
</dict>
<key>MacCatalystVersionMap</key>
2 changes: 2 additions & 0 deletions builds/Versions-iOS.plist.in
Original file line number Diff line number Diff line change
@@ -40,6 +40,7 @@
<string>18.2</string>
<string>18.3</string>
<string>18.4</string>
<string>18.5</string>
</array>
</dict>
<key>SupportedTargetPlatformVersions</key>
@@ -92,6 +93,7 @@
<string>18.2</string>
<string>18.3</string>
<string>18.4</string>
<string>18.5</string>
</array>
</dict>
<key>RecommendedXcodeVersion</key>
2 changes: 2 additions & 0 deletions builds/Versions-macOS.plist.in
Original file line number Diff line number Diff line change
@@ -25,6 +25,7 @@
<string>15.2</string>
<string>15.3</string>
<string>15.4</string>
<string>15.5</string>
</array>
</dict>
<key>SupportedTargetPlatformVersions</key>
@@ -56,6 +57,7 @@
<string>15.2</string>
<string>15.3</string>
<string>15.4</string>
<string>15.5</string>
</array>
</dict>
<key>RecommendedXcodeVersion</key>
2 changes: 2 additions & 0 deletions builds/Versions-tvOS.plist.in
Original file line number Diff line number Diff line change
@@ -35,6 +35,7 @@
<string>18.2</string>
<string>18.3</string>
<string>18.4</string>
<string>18.5</string>
</array>
</dict>
<key>SupportedTargetPlatformVersions</key>
@@ -82,6 +83,7 @@
<string>18.2</string>
<string>18.3</string>
<string>18.4</string>
<string>18.5</string>
</array>
</dict>
<key>RecommendedXcodeVersion</key>
177 changes: 140 additions & 37 deletions tests/cecil-tests/Documentation.KnownFailures.txt

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions tests/common/TestRuntime.cs
Original file line number Diff line number Diff line change
@@ -301,6 +301,12 @@ public static void AssertIfSimulatorThenARM64 ()
#endif
}

public static void AssertOnlyARM64 ()
{
if (!IsARM64)
NUnit.Framework.Assert.Ignore ("This test only runs on ARM64 simulators.");
}

public static void AssertNotSimulator (string message = "This test does not work in the simulator.")
{
if (IsSimulator)
98 changes: 64 additions & 34 deletions tests/monotouch-test/Network/NWBrowserTest.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Threading;

using CoreFoundation;
@@ -71,6 +72,7 @@ public void TestStartNoQ ()
[Test]
public void TestStateChangesHandler ()
{
Func<string> dt = () => DateTime.Now.ToString ("yyyy-MM-dd HH:mm:ss.fffffff");
// In the test we are doing the following:
//
// 1. Start a browser. At this point, we have no listeners (unless someone is exposing it in the lab)
@@ -83,82 +85,110 @@ public void TestStateChangesHandler ()
// The test will block until the different events are set by the callbacks that are executed in a diff thread.
bool didRun = false;
bool receivedNotNullChange = false;
bool eventsDone = false;
bool listeningDone = false;
Exception ex = null;
NWError? errorState = null;
var changesEvent = new AutoResetEvent (false);
NWError? browserErrorState = null;
NWBrowserState state = NWBrowserState.Invalid;
var changesEvent = new ManualResetEventSlim (false, 0);
var browserReady = new AutoResetEvent (false);
var finalEvent = new AutoResetEvent (false);
TestRuntime.RunAsync (TimeSpan.FromSeconds (30), () => {
var log = new List<string> ();

lock (log)
log.Add ($"{dt ()} Starting async...");
var finishedBeforeTimeout = TestRuntime.RunAsync (TimeSpan.FromSeconds (30), () => {
// start the browser, before the listener
lock (log)
log.Add ($"{dt ()} Starting browser...");
browser.SetStateChangesHandler ((st, er) => {
// assert here with a `st` of `Fail`
errorState ??= er;
if (st == NWBrowserState.Ready)
browserReady.Set ();
lock (log)
log.Add ($"{dt ()} browser.SetStateChangedHandler ({st}, {er} => {er?.CFError})");

browserErrorState ??= er;
state = st;
browserReady.Set ();

if (er is not null) {
// we can get errors after reaching the NWBrowserState.Ready state,
// and in that case we may not get any other callbacks, so signal
// completion so that the test doesn't hang.
changesEvent.Set ();
}
});
#if NET
browser.IndividualChangesDelegate = (oldResult, newResult) => {
#else
browser.SetChangesHandler ((oldResult, newResult) => {
#endif
lock (log)
log.Add ($"{dt ()} browser.IndividualChangesDelegate ({oldResult}, {newResult})");
didRun = true;
try {
receivedNotNullChange = oldResult is not null || newResult is not null;
} catch (Exception e) {
ex = e;
} finally {
changesEvent.Set ();
eventsDone = true;
}
#if NET
};
#else
});
#endif
browser.Start ();
browserReady.WaitOne (30000);
Assert.That (browserReady.WaitOne (30000), Is.True, "Browser ready");

using (var advertiser = NWAdvertiseDescriptor.CreateBonjourService ("MonoTouchFixtures.Network", type))
#if NET
using (var tcpOptions = new NWProtocolTcpOptions ())
using (var tlsOptions = new NWProtocolTlsOptions ())
#else
using (var tcpOptions = NWProtocolOptions.CreateTcp ())
using (var tlsOptions = NWProtocolOptions.CreateTls ())
#endif
using (var paramenters = NWParameters.CreateTcp ()) {
paramenters.ProtocolStack.PrependApplicationProtocol (tlsOptions);
paramenters.ProtocolStack.PrependApplicationProtocol (tcpOptions);
paramenters.IncludePeerToPeer = true;
using (var listener = NWListener.Create ("1234", paramenters)) {
using (var listener = NWListener.Create ("0", paramenters)) {
listener.SetQueue (DispatchQueue.CurrentQueue);
listener.SetAdvertiseDescriptor (advertiser);
// we need the connection handler, else we will get an exception
listener.SetNewConnectionHandler ((c) => { });
listener.SetNewConnectionHandler ((c) => {
lock (log)
log.Add ($"{dt ()} listener.SetNewConnectionHandler ()");
});
listener.SetStateChangedHandler ((s, e) => {
lock (log)
log.Add ($"{dt ()} listener.SetStateChangedHandler ({s}, {e})");
if (e is not null) {
Console.WriteLine ($"Got error {e.ErrorCode} {e.ErrorDomain} '{e.CFError.FailureReason}' {e.ToString ()}");
}
});
listener.Start ();
changesEvent.WaitOne (30000);
Assert.IsTrue (changesEvent.Wait (30000), "changesEvent.Wait ()");
listener.Cancel ();
listeningDone = true;
finalEvent.Set ();
}
}

}, () => eventsDone);
}, () => changesEvent.IsSet);
lock (log)
log.Add ($"{dt ()} Async done...");

if (browserErrorState?.CFError?.Code == -65570/* kDNSServiceErr_PolicyDenied */ ) {
// https://developer.apple.com/forums/thread/663852
// "If you’re using Bonjour, you will get the kDNSServiceErr_PolicyDenied (-65570) error if your Bonjour operation failed because you don’t have local network access."
Assert.Ignore ("This test requires access to the local network, and this has not been granted.");
}

finalEvent.WaitOne (30000);
Assert.IsNull (errorState, "Error");
Assert.IsTrue (eventsDone, "eventDone");
Assert.IsTrue (listeningDone, "listeningDone");
Assert.IsNull (ex, "Exception");
Assert.IsTrue (didRun, "didRan");
Assert.IsTrue (receivedNotNullChange, "receivedNotNullChange");
Assert.IsNull (browserErrorState, "Ready Error");
Assert.That (state, Is.EqualTo (NWBrowserState.Ready), "NWBrowserState");

var l = $"\n\t{string.Join ("\n\t", log)}";
Assert.That (finishedBeforeTimeout, Is.True, $"RunAsync timeout{l}");
Assert.That (finalEvent.WaitOne (30000), Is.True, $"Final event{l}");
Assert.IsNull (browserErrorState?.CFError, $"Error.CFError{l}");
Assert.IsNull (browserErrorState, $"Error{l}");
Assert.IsTrue (listeningDone, $"listeningDone{l}");
Assert.IsNull (ex, $"Exception{l}");
Assert.IsTrue (didRun, $"didRan{l}");
Assert.IsTrue (receivedNotNullChange, $"receivedNotNullChange{l}");
lock (log)
log.Add ($"{dt ()} about to cancel...");
browser.Cancel ();
lock (log)
log.Add ($"{dt ()} cancelled...");
l = $"\n\t{string.Join ("\n\t", log)}";
Console.WriteLine (l);
}
}
}
Original file line number Diff line number Diff line change
@@ -27,12 +27,13 @@ public class VTFrameRateConversionConfigurationTest {
public void Properties ()
{
TestRuntime.AssertXcodeVersion (16, 3);
TestRuntime.AssertOnlyARM64 (); // "Fail to create effect configuration" is printed to the terminal

Assert.Multiple (() => {
using var obj = new VTFrameRateConversionConfiguration (320, 320, true, VTFrameRateConversionConfigurationQualityPrioritization.Normal, VTFrameRateConversionConfigurationRevision.Revision1);
using var obj = new VTFrameRateConversionConfiguration (320, 320, false, VTFrameRateConversionConfigurationQualityPrioritization.Normal, VTFrameRateConversionConfigurationRevision.Revision1);
Assert.That (obj.FrameWidth, Is.EqualTo ((nint) 320), "FrameWidth");
Assert.That (obj.FrameHeight, Is.EqualTo ((nint) 320), "FrameHeight");
Assert.That (obj.UsePrecomputedFlow, Is.EqualTo (true), "UsePrecomputedFlow");
Assert.That (obj.UsePrecomputedFlow, Is.EqualTo (false), "UsePrecomputedFlow");
Assert.That (obj.QualityPrioritization, Is.EqualTo (VTFrameRateConversionConfigurationQualityPrioritization.Normal), "QualityPrioritization");
Assert.That (obj.Revision, Is.EqualTo (VTFrameRateConversionConfigurationRevision.Revision1), "Revision");
Assert.That (obj.FrameSupportedPixelFormats, Is.Not.Null, "FrameSupportedPixelFormats");
Original file line number Diff line number Diff line change
@@ -26,12 +26,13 @@ public class VTMotionBlurConfigurationTEst {
public void Properties ()
{
TestRuntime.AssertXcodeVersion (16, 3);
TestRuntime.AssertOnlyARM64 (); // "Fail to create effect configuration" is printed to the terminal

Assert.Multiple (() => {
using var obj = new VTMotionBlurConfiguration (320, 320, true, VTMotionBlurConfigurationQualityPrioritization.Normal, VTMotionBlurConfigurationRevision.Revision1);
using var obj = new VTMotionBlurConfiguration (320, 320, false, VTMotionBlurConfigurationQualityPrioritization.Normal, VTMotionBlurConfigurationRevision.Revision1);
Assert.That (obj.FrameWidth, Is.EqualTo ((nint) 320), "FrameWidth");
Assert.That (obj.FrameHeight, Is.EqualTo ((nint) 320), "FrameHeight");
Assert.That (obj.UsePrecomputedFlow, Is.EqualTo (true), "UsePrecomputedFlow");
Assert.That (obj.UsePrecomputedFlow, Is.EqualTo (false), "UsePrecomputedFlow");
Assert.That (obj.QualityPrioritization, Is.EqualTo (VTMotionBlurConfigurationQualityPrioritization.Normal), "QualityPrioritization");
Assert.That (obj.Revision, Is.EqualTo (VTMotionBlurConfigurationRevision.Revision1), "Revision");
TestRuntime.NSLog ($"FrameSupportedPixelFormats: {obj.FrameSupportedPixelFormats}");
Original file line number Diff line number Diff line change
@@ -26,6 +26,7 @@ public class VTOpticalFlowConfigurationTest {
public void Properties ()
{
TestRuntime.AssertXcodeVersion (16, 3);
TestRuntime.AssertOnlyARM64 (); // "Fail to create effect configuration" is printed to the terminal

Assert.Multiple (() => {
using var obj = new VTOpticalFlowConfiguration (320, 320, VTOpticalFlowConfigurationQualityPrioritization.Normal, VTOpticalFlowConfigurationRevision.Revision1);
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicate(System.IntPtr,AVFoundation.AVMediaSelectionOption,Foundation.NSPredicateOperatorType)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForAudioSampleRate(System.Double,AVFoundation.AVMediaSelectionOption,Foundation.NSPredicateOperatorType)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForBinauralAudio(System.Boolean,AVFoundation.AVMediaSelectionOption)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForDownmixAudio(System.Boolean,AVFoundation.AVMediaSelectionOption)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForImmersiveAudio(System.Boolean,AVFoundation.AVMediaSelectionOption)' is missing an [NullAllowed] on parameter #1
!missing-selector! +AVAssetVariantQualifier::predicateForAudioSampleRate:operatorType: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForBinauralAudio: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForChannelCount:operatorType: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForDownmixAudio: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForImmersiveAudio: not bound
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
!deprecated-attribute-missing! sec_protocol_metadata_get_negotiated_protocol missing a [Deprecated] attribute
!deprecated-attribute-missing! sec_protocol_metadata_get_server_name missing a [Deprecated] attribute
!missing-pinvoke! sec_protocol_metadata_copy_negotiated_protocol is not bound
!missing-pinvoke! sec_protocol_metadata_copy_server_name is not bound
10 changes: 10 additions & 0 deletions tests/xtro-sharpie/api-annotations-dotnet/iOS-AVFoundation.todo
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicate(System.IntPtr,AVFoundation.AVMediaSelectionOption,Foundation.NSPredicateOperatorType)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForAudioSampleRate(System.Double,AVFoundation.AVMediaSelectionOption,Foundation.NSPredicateOperatorType)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForBinauralAudio(System.Boolean,AVFoundation.AVMediaSelectionOption)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForDownmixAudio(System.Boolean,AVFoundation.AVMediaSelectionOption)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForImmersiveAudio(System.Boolean,AVFoundation.AVMediaSelectionOption)' is missing an [NullAllowed] on parameter #1
!missing-selector! +AVAssetVariantQualifier::predicateForAudioSampleRate:operatorType: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForBinauralAudio: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForChannelCount:operatorType: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForDownmixAudio: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForImmersiveAudio: not bound
4 changes: 4 additions & 0 deletions tests/xtro-sharpie/api-annotations-dotnet/iOS-Security.todo
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
!deprecated-attribute-missing! sec_protocol_metadata_get_negotiated_protocol missing a [Deprecated] attribute
!deprecated-attribute-missing! sec_protocol_metadata_get_server_name missing a [Deprecated] attribute
!missing-pinvoke! sec_protocol_metadata_copy_negotiated_protocol is not bound
!missing-pinvoke! sec_protocol_metadata_copy_server_name is not bound
10 changes: 10 additions & 0 deletions tests/xtro-sharpie/api-annotations-dotnet/macOS-AVFoundation.todo
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicate(System.IntPtr,AVFoundation.AVMediaSelectionOption,Foundation.NSPredicateOperatorType)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForAudioSampleRate(System.Double,AVFoundation.AVMediaSelectionOption,Foundation.NSPredicateOperatorType)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForBinauralAudio(System.Boolean,AVFoundation.AVMediaSelectionOption)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForDownmixAudio(System.Boolean,AVFoundation.AVMediaSelectionOption)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForImmersiveAudio(System.Boolean,AVFoundation.AVMediaSelectionOption)' is missing an [NullAllowed] on parameter #1
!missing-selector! +AVAssetVariantQualifier::predicateForAudioSampleRate:operatorType: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForBinauralAudio: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForChannelCount:operatorType: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForDownmixAudio: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForImmersiveAudio: not bound
4 changes: 4 additions & 0 deletions tests/xtro-sharpie/api-annotations-dotnet/macOS-Security.todo
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
!deprecated-attribute-missing! sec_protocol_metadata_get_negotiated_protocol missing a [Deprecated] attribute
!deprecated-attribute-missing! sec_protocol_metadata_get_server_name missing a [Deprecated] attribute
!missing-pinvoke! sec_protocol_metadata_copy_negotiated_protocol is not bound
!missing-pinvoke! sec_protocol_metadata_copy_server_name is not bound
10 changes: 10 additions & 0 deletions tests/xtro-sharpie/api-annotations-dotnet/tvOS-AVFoundation.todo
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicate(System.IntPtr,AVFoundation.AVMediaSelectionOption,Foundation.NSPredicateOperatorType)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForAudioSampleRate(System.Double,AVFoundation.AVMediaSelectionOption,Foundation.NSPredicateOperatorType)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForBinauralAudio(System.Boolean,AVFoundation.AVMediaSelectionOption)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForDownmixAudio(System.Boolean,AVFoundation.AVMediaSelectionOption)' is missing an [NullAllowed] on parameter #1
!missing-null-allowed! 'Foundation.NSPredicate AVFoundation.AVAssetVariantQualifier::GetPredicateForImmersiveAudio(System.Boolean,AVFoundation.AVMediaSelectionOption)' is missing an [NullAllowed] on parameter #1
!missing-selector! +AVAssetVariantQualifier::predicateForAudioSampleRate:operatorType: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForBinauralAudio: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForChannelCount:operatorType: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForDownmixAudio: not bound
!missing-selector! +AVAssetVariantQualifier::predicateForImmersiveAudio: not bound
Loading
Oops, something went wrong.
Loading
Oops, something went wrong.