使用静态库中的图像

Posted

技术标签:

【中文标题】使用静态库中的图像【英文标题】:Using images from a static Library 【发布时间】:2010-11-03 00:53:58 【问题描述】:

我正在尝试将包含图像的项目转换为静态库。

获取图片的代码如下:

[UIImage imageNamed:@"foo.png"]

当我将此库包含到另一个项目中时,图像不会加载。但是,如果我将图像复制到新项目中,它会加载。

有没有什么方法可以在图像仅包含在库中并且我不必将它们复制到我的项目中的情况下使其工作?

顺便说一下,我的 Header Search Paths 包含这些图像在库中所在的路径,如果这有什么不同的话。

【问题讨论】:

【参考方案1】:

只需将包含您的图像的捆绑包名称添加到图像名称:

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

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

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

你可以看到相关的答案here。

【讨论】:

您对这个问题的回答是正确的。但是我想问这个问题:***.com/questions/22869670/… 它对我不起作用。我正在尝试从添加到静态库中的捆绑包中加载图像。无论如何我访问捆绑包中的 xcassets 吗?【参考方案2】:

静态库不能包含捆绑资源。所以仅仅链接 .a 文件是不够的。但是您应该能够交叉引用静态库 xcodeproj。 Example

【讨论】:

但是图像可以经过 Base64 编码并硬编码到静态库中。 @uchuugaka - 无法使用 [UIImage imageNamed:] 加载嵌入式 base64 图像。据我了解, [UIImage imageNamed:] 调用从预编译的 Bundle 中定位图像。并且静态库不能包含 Bundle。【参考方案3】:

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

【讨论】:

以上是关于使用静态库中的图像的主要内容,如果未能解决你的问题,请参考以下文章

gcc找不到静态库中的函数

静态库中的外部指针为空,当不是静态库时工作正常

静态库中的 MagicalRecord:如何加载数据模型?

静态库中的对话框资源

查看.a 静态库中的.o文件

链接到静态库中的 explicit_bzero (glibc)