具有图像资源的iOS静态库

时间:2013-02-12 11:49:02

标签: ios objective-c xcode resources static-libraries

我有一个静态库,我需要一些图形资源作为图像。 在我的班上,我想以这种方式添加图像:

[UIImage imageNamed:@"myImage.png"]

但它不起作用...... 我怎么能这样做?

5 个答案:

答案 0 :(得分:2)

拥有该捆绑包后,您可以访问您拥有的资源,如下所示:

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"YourBundle" ofType:@"bundle"];
NSString *imagePath = [[NSBundle bundleWithPath:bundlePath] pathForResource:@"yourImage" ofType:@"png"];
UIImage *image= [[UIImage alloc] initWithContentsOfFile:imagePath];

答案 1 :(得分:1)

您不能使用静态库提供除代码之外的任何内容。这是因为.a文件是目标文件的简单存档,在Mac / iOS下增加了支持多CPU架构的能力。

您唯一的选择是创建一个框架,它可以提供代码以及其他资源。

答案 2 :(得分:1)

在Xcode中,如果链接静态库,则库中的代码将直接包含在您的可执行文件中。没有文件被复制到应用程序包中,因此无法复制图像。

如果您的图像文件包含静态库,则可以通过在Xcode中向目标添加复制文件构建阶段,将其复制到应用程序包中。

答案 3 :(得分:1)

我找到了解决方案..

我探索了捆绑目录(已编译),我注意到我的图像(.png)他们拥有所有的iestensione .tiff

为避免这种情况,我将捆绑设置设置为HIDPI_COMBINE_IMAGES

..所以我可以按照 e1985

的建议恢复我的照片

答案 4 :(得分:0)

制作框架目标,而不是静态库。 确保"复制捆绑资源"存在于框架的构建阶段。在那里添加资源文件。

然后从外部项目中找到Framework bundle中的文件,我就这样做了:

NSArray<NSBundle *> * bundles = [NSBundle allFrameworks];
NSString * filePath;
for (int i = 0; i < bundles.count; i++) {

     filePath = [[bundles objectAtIndex:i] pathForResource:@"picture" ofType:@"png"];
     if (filePath != nil) break; // found
}