我已经构建了一个外部框架,我正在尝试利用框架资源目录中的一些图像。框架不是在应用程序中复制,而是仅仅引用它。如何从xyz.framework资源文件夹中相应地使用UIImage?
由于
答案 0 :(得分:32)
您需要做的是为框架加载bundle,然后使用NSBundle对象访问资源。
例如,如果有一个定义类“FrameworkClass”的框架,我们可以这样做:
NSBundle *frameworkBundle = [NSBundle bundleForClass:[FrameworkClass class]];
NSString *resourcePath = [frameworkBundle pathForResource:@"an_image" ofType:@"jpeg"];
UIImage *image = [UIImage imageWithContentsOfFile:resourcePath];
这应该或多或少地做你想要的。
答案 1 :(得分:4)
您可以按如下方式引用Framework资源:
[[NSBundle mainBundle] pathForResource:@"FI.framework/Resources/FileName"
ofType:@"fileExtension"];
注意,此处FI是您的框架名称。
参考。链接:http://db-in.com/blog/2011/07/universal-framework-iphone-ios-2-0/
答案 2 :(得分:2)
斯威夫特3:
let bundle = Bundle(for: SomeFrameworkClass.self as AnyClass)
if let path = bundle.path(forResource: "test", ofType: "png") {
if let image = UIImage(contentsOfFile: path) {
// do stuff
}
}
答案 3 :(得分:1)
迅速4/5:
let bundle = Bundle(for: type(of: self))
// let bundle = Bundle(for: ClassOfInterest.self)) // or by pointing to class of interest
let path = bundle.path(forResource: "filename", ofType: "json")!
let url = URL(fileURLWithPath: path)
let data = try! Data(contentsOf: url)
这是来自内部框架/单元测试的,在生产代码中,您不想强行尝试进行强制包装。
答案 4 :(得分:0)
使用捆绑包标识符找到您的框架。
这要求框架的“ MACH-O类型”为“动态库”,并配置为“嵌入和签名”。
NSBundle *bundle = [NSBundle bundleWithIdentifier:@"com.example.App.ExampleFramework"];
NSURL *url = [URLForResource:@"resource" withExtension:@"txt"];
// load the contents with this file url