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

时间:2017-11-07 11:41:54

标签: ios swift xcode image frameworks

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

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

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

提前致谢。

2 个答案:

答案 0 :(得分:3)

在构建和分发framework之前,您应该复制需要携带framework的文件。

要复制文件,请点击framework project target,转到“构建阶段”标签,您可以看到名为“复制文件”的部分。在这里添加您的文件(见下面的截图)

enter image description here

然后构建您的framework project,在成功构建后,您的可分发框架将在产品文件夹中生成。它看起来像YourFrameworkProjectName.framework

将此文件添加到需要您的框架的其他项目中。

注意:如果您只想通过连接框架项目来运行项目,可以通过添加构建依赖项来完成它。 See StackOverflow question here

答案 1 :(得分:2)

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

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

创建捆绑包:

  • 将所有文件/图像移动到桌面上的新文件夹中。根据您的意愿命名。在我的例子中,我将它们命名为 cikernels images

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

Bundle warning

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

从捆绑中检索文件:

我创建了两个公共函数,一个用于检索文件,另一个用于检索图像。除了(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
    }
}

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