How correctly setup AVSampleBufferDisplayLayer

How can I setup correctly AVSampleBufferDisplayLayer for video display when I have input picture format kCVPixelFormatType_32BGRA?

Currently video i visible in simulator, but not iPhone, miss I something?

Render code:

    var pixelBuffer: CVPixelBuffer?
    let attrs: [String: Any] = [
        kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA,
        kCVPixelBufferWidthKey as String: width,
        kCVPixelBufferHeightKey as String: height,
        kCVPixelBufferBytesPerRowAlignmentKey as String: width * 4,
        kCVPixelBufferIOSurfacePropertiesKey as String: [:]
    ]
    
    let status = CVPixelBufferCreateWithBytes(
        nil,
        width,
        height,
        kCVPixelFormatType_32BGRA,
        img,
        width * 4,
        nil,
        nil,
        attrs as CFDictionary,
        &pixelBuffer
    )
    
    guard status == kCVReturnSuccess, let pb = pixelBuffer else { return }

    var formatDesc: CMVideoFormatDescription?
    CMVideoFormatDescriptionCreateForImageBuffer(
        allocator: nil,
        imageBuffer: pb,
        formatDescriptionOut: &formatDesc
    )
    
    guard let format = formatDesc else { return }
    
    var timingInfo = CMSampleTimingInfo(
        duration: .invalid,
        presentationTimeStamp: currentTime,
        decodeTimeStamp: .invalid
    )

    var sampleBuffer: CMSampleBuffer?
    CMSampleBufferCreateForImageBuffer(
        allocator: kCFAllocatorDefault,
        imageBuffer: pb,
        dataReady: true,
        makeDataReadyCallback: nil,
        refcon: nil,
        formatDescription: format,
        sampleTiming: &timingInfo,
        sampleBufferOut: &sampleBuffer
    )
    if let sb = sampleBuffer {
        if CMSampleBufferGetPresentationTimeStamp(sb) == .invalid {
            print("Invalid video timestamp")

        }

        if (displayLayer.status == .failed) {
            displayLayer.flush()
        }
            DispatchQueue.main.async { [weak self] in
                guard let self = self else {
                    print("Lost reference to self drawing")
                    return
                }
                displayLayer.enqueue(sb)
            }
        frameIndex += 1
    }
How correctly setup AVSampleBufferDisplayLayer
 
 
Q