我的项目结构是这样的,我有两个名为ProjectA
和ProjectB
的项目。现在,对于这两个项目,我创建了一个名为ProjFramework
的框架。
我在框架中添加了这两个项目的公共文件,然后分别在项目中添加了框架。直到现在我能够访问所有文件和变量。现在我也在框架中添加了图像,当我尝试在UI中显示它们时,我收到一条错误,说无法读取此.png 。
据我所知,我需要以某种方式包含框架,但我不知道如何。请帮助我分享b / w 2 XCode
项目的常见图片。
提前致谢。
答案 0 :(得分:3)
在构建和分发framework
之前,您应该复制需要携带framework
的文件。
要复制文件,请点击framework project target
,转到“构建阶段”标签,您可以看到名为“复制文件”的部分。在这里添加您的文件(见下面的截图)
然后构建您的framework project
,在成功构建后,您的可分发框架将在产品文件夹中生成。它看起来像YourFrameworkProjectName.framework
。
将此文件添加到需要您的框架的其他项目中。
注意:如果您只想通过连接框架项目来运行项目,可以通过添加构建依赖项来完成它。 See StackOverflow question here
答案 1 :(得分:2)
@ arunjos007方法的替代方法是(a)创建一组图像,然后(b)从包中检索。
假设您有一个名为 Kernel 的框架,并且您希望访问两种类型的文件 - cikernel 和 png 。
创建捆绑包:
将所有文件/图像移动到桌面上的新文件夹中。根据您的意愿命名。在我的例子中,我将它们命名为 cikernels 和 images 。
使用 .bundle 扩展名重命名文件夹。在我的例子中,他们变成了 cikernels.bundle 和 images.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
}
}
最后一点:标识符是在Framework目标的 General 标签中定义的。通常它采用 com.company 框架*的形式。将该行更改为您的。