若想用swift语言生成库则只能生成动态库,若是纯swift代码脚本,问题不大,按一般流程就行。
若是编译的库中有shader文件则需要先编译出Metal库。具体方法可采用如下的方式。
- 把shader文件和swift文件放在一起进行framework库的编译。编译成功后会自动生成一个default.Metallib文件,该文件为shader生成的库文件。
- 把生成的framework导入需要调用的地方,注意使用库时需要单独把default.Metallib取出来放到工程中的Resource下面。
- 使用let library = device.newDefaultLibrary()直接加载Metal库。
上面的方式是最简单的,另外,对shader文件,也可以不在xcode中编译库,而是采取手动的编译方式。参考苹果官方文档:https://developer.apple.com/library/content/documentation/Miscellaneous/Conceptual/MetalProgrammingGuide/Dev-Technique/Dev-Technique.html
手动编译Metal库后,加载库不能采用上面步骤3中的方式,需要采用如下的方式:
guard let Metallibpath = Bundle(for: type(of: self)).path(forResource: "YourShader",ofType: "Metallib") else {
fatalError("Metal library not found")
}
let library = try device.makeLibrary(filepath: Metallibpath)
if library == nil{
print("Metal library is null")
}