17

我已经构建了一个外部框架,我正在尝试利用框架资源目录中的一些图像。该框架并未在应用程序中复制,而只是对其进行引用。如何从 xyz.framework 资源文件夹中相应地使用 UIImage?

谢谢

4

5 回答 5

36

您需要做的是为框架加载包,然后使用 NSBundle 对象访问资源。

例如,如果有一个框架定义了一个类“FrameworkClass”,我们可以这样做:

NSBundle *frameworkBundle = [NSBundle bundleForClass:[FrameworkClass class]];
NSString *resourcePath = [frameworkBundle pathForResource:@"an_image" ofType:@"jpeg"];
UIImage *image = [UIImage imageWithContentsOfFile:resourcePath];

那应该或多或少地做你想要的。

于 2012-08-02T00:08:13.353 回答
4

您可以参考以下框架资源:

[[NSBundle mainBundle] pathForResource:@"FI.framework/Resources/FileName"
                                ofType:@"fileExtension"];

注意,这里的 FI 是你的框架名称。

参考。链接:http ://db-in.com/blog/2011/07/universal-framework-iphone-ios-2-0/

于 2012-08-02T02:30:04.067 回答
4

斯威夫特 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
    }
}
于 2017-02-25T23:16:01.900 回答
4

斯威夫特 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)

这是来自框架/单元测试内部,在生产代码中你不想强制尝试和强制解包。

于 2019-05-31T15:59:47.787 回答
1

使用包标识符来定位您的框架。

这要求框架的“MACH-O 类型”为“动态库”并配置为“嵌入和签名”。

NSBundle *bundle = [NSBundle bundleWithIdentifier:@"com.example.App.ExampleFramework"];
NSURL *url = [URLForResource:@"resource" withExtension:@"txt"];
// load the contents with this file url
于 2020-07-17T03:50:55.093 回答