interruptionLevel crashes the iOS App on Silicon Macs

I recently added time-sensitive notifications to my iOS / iPadOS App.

let content = UNMutableNotificationContent()

if #available(iOS 15.0, *) {
        content.interruptionLevel = .timeSensitive
}

The if #available works fine on iOS 15 and it is ignored on iPadOS or older iOS builds, but it's making the (designed for iPad) App crash when running on Apple Silicon Macs.

I am getting the following error:

Value of type 'UNMutableNotificationContent' has no member 'interruptionLevel'

I tried to add another check but it doesn't work either:

#if os(iOS)

      if #available(iOS 15.0, *) {
        content.interruptionLevel = .timeSensitive
      }

#endif

Replies

In the Xcode release notes, there's mention of this allllll the way at the bottom (it's easy to miss):

Availability checks in iPhone and iPad apps on a Mac with Apple silicon always return true. This causes iOS apps running in macOS 11 Big Sur to see iOS 15 APIs as available, resulting in crashes. This only affects apps available in the Mac App Store built with the “My Mac (Designed for iPhone)” or “My Mac (Designed for iPad)” run destination. It doesn’t affect Mac Catalyst apps. (83378814) Workaround: Use the following code to check for iOS 15 availability:

if #available(iOS 15, *), ProcessInfo.processInfo.operatingSystemVersion.majorVersion >= 15 {