使用静态库中的图像

问题描述:

我试图将具有图像的项目转换为静态库。使用静态库中的图像

一个获取图像的代码如下:

[UIImage imageNamed:@"foo.png"] 

当我包括这个库到另一个项目,图像不会加载。但是,如果我将图像复制到新项目中,则会加载。

有没有什么办法可以让我的图片只包含在图书馆中,而且我不必将它们复制到我的项目中?

顺便说一句,我的标题搜索路径包含这些图像在库中的位置的路径,如果这有什么不同。

静态库不能包含束资源。所以简单地链接.a文件是不够的。但是你应该能够交叉引用静态库xcodeproj。 Example

+0

但是一个图像可以被Base64编码并被硬编码到一个静态库中。 – uchuugaka 2014-03-31 01:33:51

+0

@uchuugaka - 无法使用[UIImage imageNamed:]加载嵌入式base64图像。据我所知,[UIImage imageNamed:]调用查找预编译的Bundle中的图像。而一个静态库不能包含Bundles。 – tidwall 2014-03-31 19:32:42

有类似的情况,并编写了一个脚本来将文件复制到.app在编译时。在“静态库的非代码资产”部分on this web page中描述了与我们使用的类似的修复方法。这有效,但可能会导致一些代码签名错误。另一种选择是为资源described on this web page创建第二个.bundle目标,但由于某些原因,我无法获得该包实际构建。我目前正在编写一个脚本来在编译时将资源复制到一个包中,并将任何.xib文件编译为.nibs,这也是您可以查看的一种可能的解决方案。

只是在前面加上一个包含图像的图像名包的名称:

[UIImage imageNamed:@"Myframework.bundle/MyImage" 

这也适用于Interface Builder中,预览可能被打破,但图像将被正确加载。

如果使用CocoaPods(我会推荐),请确保为图像和笔尖使用resource_bundles选项。

您可以看到相关答案here

+0

您对此问题的回答是正确的。但我想问这个问题:http://*.com/questions/22869670/how-can-i-load-an-image-from-assets-car-compiled-version-of-xcassets-within-an – 2014-04-04 17:58:27

+0

它不适用于我。我正试图从静态库中添加的包中加载图像。无论如何,我访问捆绑中的xcassets? – user1010819 2014-12-23 07:56:07