cocoapodsでMetalファイルを含めて配布する場合は、podspecにmetalファイルを追加します。
LibraryName.podspec
s.source_files = 'LibraryName/Classes/**/*.{swift,metal}'
また、CoreImageのCIKernelとして呼ぶ場合は次のような設定を追加します。
LibraryName.podspec
s.pod_target_xcconfig = {
'MTLLINKER_FLAGS' => '-cikernel',
'MTL_COMPILER_FLAGS' => '-fcikernel'
}
これでMetalファイルに含まれる関数がCoreImage用としてコンパイルされます。
CIKernelをライブラリ内で生成するには、自身のバンドルを指定します。
private final class BundleToken {}
let url = Bundle(for: BundleToken.self).url(forResource: "default", withExtension: "metallib")!
let data = try! Data(contentsOf: url)
let kernel = try! CIColorKernel(functionName: "filterName", fromMetalLibraryData: data)