无法从我的项目中的框架加载图像

4 xcode frameworks image ios swift

我的项目结构是这样的,我有 2 个名为ProjectA和 的项目ProjectB。现在,对于这两个项目,我创建了一个名为 的框架ProjFramework

我将这两个项目的公共文件添加到框架中,然后分别在项目中添加框架。到目前为止,我可以访问所有文件和变量。现在我也在框架中添加了图像,当我尝试在 UI 中显示它们时,我收到一条错误消息,指出无法读取此 .png

据我所知,我需要以某种方式包含该框架,但我不知道如何包含。请帮助我分享 2 个XCode项目的常见图像。

提前致谢。

小智 6

@arunjos007' 方法的替代方法是 (a) 创建图像包,然后 (b) 从该包中检索。

假设您有一个名为Kernel的框架,并且您希望访问两种类型的文件 - cikernelpng

创建捆绑包:

  • 将所有文件/图像移至桌面上的新文件夹中。随意命名。在我的示例中,我将它们命名为cikernelsimages

  • 使用.bundle扩展名重命名您的文件夹。在我的示例中,它们变成了cikernels.bundleimages.bundle。您将看到下面的警告...选择“添加”。

捆绑警告

  • 将包拖到您的框架项目中。您可以展开捆绑包以查看内容。此外,您还可以添加/删除/编辑捆绑包的内容。

从包中检索文件:

我创建了两个公共函数,一个用于检索文件,一个用于检索图像。除了 (a) 返回类型和 (b) 错误处理之外,它们几乎相同。(我可能应该在UIImage函数中添加一些 - 但由于我对代码有完全的控制权 - 它不会被其他任何人使用 - 这并不重要。)

public func returnImage(_ named:String) -> UIImage {
    let myBundle = Bundle.init(identifier: "com.companyName.frameworkName")
    let imagePath = (myBundle?.path(forResource: "images", ofType: "bundle"))! + "/" + named
    let theImage = UIImage(contentsOfFile: imagePath)
    return theImage!
}

public func returnKernel(_ named:String) -> String {
    let myBundle = Bundle.init(identifier: "com.companyName.frameworkName")
    let kernelPath = (myBundle?.path(forResource: "cikernels", ofType: "bundle"))! + "/" + named + ".cikernel"
    do {
        return try String(contentsOfFile: kernelPath)
    }
    catch let error as NSError {
        return error.description
    }
}
Run Code Online (Sandbox Code Playgroud)

最后一点:标识符是在框架目标的“常规”选项卡中定义的。通常采用com.company Framework* 的形式。将该行更改为您的。