如果您想访问子项目(框架等)中的资源,则需要确保从其自己的捆绑包中收集它们,因为它们不是Main Bundle
的一部分。
您可以使用以下这个简单的Swift 4代码:
let bundle = Bundle(for: type(of: self))
let image = UIImage(named: "imageName", in: bundle, compatibleWith: nil)
NSImage(named:...)
API,必须满足以下两个条件之一:图像应该存在于应用程序的主要捆绑包中,或者(引用文档的话):
在图像驻留在嵌入式框架中的情况下,第一个条件不成立,因为框架是单独的捆绑包,并且无法在运行时添加到主要捆绑包。这只留下了第二种方法。[应该有一个]使用setName:方法明确设置名称并当前驻留在图像缓存中的[NSImage]对象。
NSImage(named:...)
时,请确保已经使用其他方式加载了图像,然后设置其名称:let bundle = NSBundle(forClass: MyFrameworkClass.self)
let image = bundle.imageForResource(name) // image in the framework .xcassets
image.setName(name)
我不知道这个有多大的用处,你应该注意文档中关于图像缓存操作的注释,但至少它是一种将图像存储在一个捆绑包的.xcassets文件夹中,然后从另一个地方访问它们的方法。
resources
并且您所有框架的资源最终都将包含在主束中: https://guides.cocoapods.org/syntax/podspec.html#tab_resources。另一种方法是创建一个.bundle
文件与您的框架一起,但是您的框架的使用者需要手动将.bundle
文件拖到他的项目中。 - Foti Dim