Xcode 15 [[stitchable]] Metal core image kernels fail

I have imported two metal files and defined two stitchable Metal Core Image kernels, one of them being CIColorKernel and other being CIKernel. As outlined in the WWDC video, I need to add a flag -framework CoreImage to other Metal Linker flags. Unfortunately, Xcode 15 puts a double quotes around this and generates an error metal: error: unknown argument: '-framework CoreImage'. So I built without this flag and it works for the first kernel that was added. The other kernel is never added to metal.defaultlib and fails to load. How do I get it working?

 class SobelEdgeFilterHDR: CIFilter {
          var inputImage: CIImage?
          var inputParam: Float = 0.0
    
         static var kernel: CIKernel = { () -> CIKernel in
           let url = Bundle.main.url(forResource: "default",
                                withExtension: "metallib")!
          let data = try! Data(contentsOf: url)

          let kernelNames = CIKernel.kernelNames(fromMetalLibraryData: data)
          NSLog("Kernels \(kernelNames)")
          return try! CIKernel(functionName: "sobelEdgeFilterHDR", fromMetalLibraryData: data)
    }()
    
     override var outputImage : CIImage? {
        guard let inputImage = inputImage else {
            return nil
        }
        
        return SobelEdgeFilterHDR.kernel.apply(extent: inputImage.extent, roiCallback: { (index, rect) in
            return rect }, arguments: [inputImage])
    }
}

Replies

The -framework CoreImage flag needs to be set in two lines in Xcode, otherwise it will mask the space between the words:

  • where is this located exactly? I can't find this in my target's build settings

Add a Comment