swift - 从 ios 框架创建默认金属库
问题描述
我正在创建一个包含多个金属文件的框架,同时使用device?.makeDefaultLibrary()
(当此框架嵌入到项目中时)创建默认库时,应用程序正在崩溃。事实证明,没有指定Bundle()
它只makeDefaultLibrary()
搜索主包中的库,但根据要求编译器应该在嵌入式框架的包中搜索库(创建框架时正在生成一个.metallib文件)。
我试过指定捆绑如下:
一个。
let frameworkBundle = Bundle(for: type(of: self))
let bundleLib = try device?.makeDefaultLibrary(bundle: frameworkBundle)
B.
let frameworkBundle = Bundle(identifier: "com.myframework")
let bundleLib = try device?.makeDefaultLibrary(bundle: frameworkBundle)
应用程序仍然崩溃,我还注意到在上述两种方法中,frameworkBundle都返回为 nil。
解决方案
将此作为答案提供,如果没有帮助,我们非常乐意将其删除。
我有一个CIKernels
带有.cikernel
后缀的文本文件库。这些包含在一个框架中,我创建了一个函数来根据需要通过指定包名称来打开它们,如下所示:
let myBundle = Bundle.init(identifier: "com.mycompany.myframework")
let kernelPath = (myBundle?.path(forResource: "cikernels", ofType: "bundle"))! + "/" + named + ".cikernel"
就您而言,我认为您需要"com.myframework"。
基本上,从我在您的问题和文档中看到的 内容来看,它看起来像 a是一个(关于您可以拥有的最基本的对象,并且如果您传入正确的包,您(正确完成)代码允许返回。Bundle
NSObject
nil
看看这是否适合你。祝你好运!
编辑:
第二个想法 - 我创建的 Bundle 使用Bundle.init(identifier:)
. 也许这就是您所需要的,而不是我的“矫枉过正”的方法?:-)
推荐阅读
- spotfire - 在 spotfire 中保存用户输入
- powershell-core - 如何在 PowerShell 核心中创建永久别名文件?
- javascript - Javascript 运算符“in”不适用于浮点数
- swift - Render text with SKRenderer
- java - 如何检查 JAVA 代码(保留在数据库中)是否正确完成或突然终止?
- xamarin.forms - Xamarin iOS build error - Native linking failed (Link Framework SDKs Only)
- django - 对于 nginx,我是在为这个 url https://localhost:3000 监听端口 443 还是端口 3000?
- c# - AnimationPlayer animations do not play in Godot
- ionic-framework - ionic cordova run android - Ionic 4 命令卡住
- c++ - 提升 Asio 同步 https 调用