首页 > 解决方案 > 从 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。

标签: swiftbundleios-frameworks

解决方案


将此作为答案提供,如果没有帮助,我们非常乐意将其删除。

我有一个CIKernels带有.cikernel后缀的文本文件库。这些包含在一个框架中,我创建了一个函数来根据需要通过指定包名称来打开它们,如下所示:

let myBundle = Bundle.init(identifier: "com.mycompany.myframework")
let kernelPath = (myBundle?.path(forResource: "cikernels", ofType: "bundle"))! + "/" + named + ".cikernel"

就您而言,我认为您需要"com.myframework"

基本上,从我在您的问题和文档中看到 内容来看,它看起来像 a是一个(关于您可以拥有的最基本的对象,并且如果您传入正确的包,您(正确完成)代码允许返回。BundleNSObjectnil

看看这是否适合你。祝你好运!

编辑:

第二个想法 - 我创建的 Bundle 使用Bundle.init(identifier:). 也许这就是您所需要的,而不是我的“矫枉过正”的方法?:-)


推荐阅读