.fullScreenCover Incorrectly Dismissed

Hi, thought I'd share some feedback (which was also sent to Apple) publicly in case anyone else is experiencing the same issue or has an idea of how to circumvent the issue while Apple investigates.

TLDR: Views presented with the .fullScreenCover modifier can be incorrectly dismissed when a child view presented with a .sheet modifier inside the .fullScreenCover is dismissed.

The intended behavior is that the child sheet views can be dismissed without dismissing the parent full screen cover views. It appears this bug has been present in versions of iOS 17 as well as iOS 18.

Short of using something other than a .fullScreenCover to present the view, I'm still searching for a solution to this bug.

Filing: FB14007758

Steps to Reproduce (see code below):

  1. Open a View in .fullScreenCover presentation
  2. In the view presented via the .fullScreenCover, add two sheet modifiers with two different views (e.g. SheetOneView, SheetTwoView)
  3. Toggle the presentation of SheetOneView and SheetTwoView randomly until the .fullScreenCover is incorrectly dismissed.

Reproducible Code:

import SwiftUI

struct SheetOneView: View {
    var body: some View {
        Text("Sheet: 1")
    }
}

struct SheetTwoView: View {
    var body: some View {
        Text("Sheet: 2")
    }
}

struct FullScreenCoverView: View {
    @State var isSheetOnePresented = false
    @State var isSheetTwoPresented = false
    
    var body: some View {
        VStack(content: {
            Text("Full Screen Cover")
            
            HStack {
                Button("Open Sheet 1") {
                    isSheetOnePresented = true
                }
                
                Button("Open Sheet 2") {
                    isSheetTwoPresented = true
                }
            }
            .buttonStyle(.borderedProminent)
            .buttonBorderShape(.capsule)
        })
            .sheet(isPresented: $isSheetOnePresented) {
                SheetOneView()
            }
            .sheet(isPresented: $isSheetTwoPresented) {
                SheetTwoView()
            }
    }
}

struct ContentView: View {
    @State var isFullScreenCoverPresented = false
    
    var body: some View {
        VStack {
            Button("Open Full Screen Cover") {
                isFullScreenCoverPresented = true
            }
        }
        .fullScreenCover(isPresented: $isFullScreenCoverPresented, content: {
            FullScreenCoverView()
        })
        .padding()
    }
}

The correct feedback ID is: FB14007895. Please ignore the one in the post.

.fullScreenCover Incorrectly Dismissed
 
 
Q