将图像(或其他资源)添加到Mac或iOS Framework

apo*_*che 7 cocoa objective-c ios

假设我有一个现有的iOS或Mac框架,我们称之为Test.framework.这个框架已成功编译和链接(为iOS部分提供了i386和armv6/7 archs的技巧)并且工作得非常好.

现在我想添加一个图像让我们称之为' test.png'.我已将其复制到我的框架的Resources文件夹中,以便我具有以下结构:

ls Test.framework

- Headers -> Versions/Current/Headers
- Resources -> Versions/Current/Resources
- Test -> Versions/Current/Test
- Versions 

ls Test.framework/Resources

- Info.plist
- test.png
Run Code Online (Sandbox Code Playgroud)

然而,当我使用我的框架创建项目时,我无法访问该图像.

我试过了:

[UIImage imageNamed:@"test.png"]
[UIImage imageNamed:@"Test.framework/test.png"]
[UIImage imageNamed:@"Test.framework/Resources/test.png"]
Run Code Online (Sandbox Code Playgroud)

但没有任何成功,总能给我一个nil对象.

有任何想法吗 ?

编辑

经过进一步的调查后,似乎我想要实现的目标无法在iOS上完成.原因是最终的应用程序包(.app)不会复制为Mac OS编译的应用程序所在的私有框架.

这在iOS Bundle Structures文档中进一步详细说明.

感谢Rob Keniger和xuzhe对他们的赞赏.我会赞扬xuzhe的答案,因为它实际上是我最初问题的最合适的答案(尽管Rob评论让我深入研究了这个问题)

xuz*_*zhe 4

“imageNamed:”方法仅适用于应用程序包中的图像。你应该使用

[[UIImage alloc] initWithContentsOfFile:path];
Run Code Online (Sandbox Code Playgroud)

反而。

关于路径,由于我不确定“Test.Framework”是否在您的应用程序包中,因此我无法为您提供示例代码。但如果确实如此,下面的代码应该可以工作:

NSString* path = [Nsstring stringWithFormat:@"%@/Test.framework/Resources/test.png", [[NSBundle mainBundle] bundlePath]];
Run Code Online (Sandbox Code Playgroud)

  • arf 这很烦人。苹果文档清楚地表明,您可以使用框架做的事情之一就是向它们添加资源,但他们没有说明您之后如何访问它们......我仍然确信有一种方法,但这可能只是盲目的希望 (3认同)