nsbundle bundleWithIdentifier返回静态框架和资源bundle的null



我正在尝试创建一个静态框架,该静态框架将使用某些图像在其视图中显示。我通过在SDK项目中添加目标来从XCode创建MyFrameworkBundle.bundle。在捆绑包中添加了我的所有图像,并创建了捆绑包,并给了该目标捆绑包标识符my.frameworkbundle。现在,我试图在我的框架中获取该捆绑包,如以下内容:

NSBundle * mybundleRef = [NSBundle bundleWithIdentifier:@"my.frameworkbundle"];

然后,我将这些框架和资源束放在另一个项目中,并尝试使用上线运行功能。它总是返回null。即使我尝试像上述代码一样获取框架:

NSBundle * mybundleRef = [NSBundle bundleWithIdentifier:@"my.framework"];

这也使我无效。但是,如果我将此框架从静态更改为动态,它总是会给我正确的捆绑包。因为我要与Unity一起使用它,所以我不希望动态框架避免后处理脚本。

我也尝试了以下代码:

NSString *bundleString =[[NSBundle mainBundle] pathForResource:@"MyFrameworkBundle" ofType:@"bundle"];
NSBundle * PlayCacheBundle = [NSBundle bundleWithPath:bundleString];

但是它给出了错误

找不到合适的图像

系统详细信息:

  • xcode:8.2.1
  • macOS:10.12(Sierra)

,因为框架在静态上链接,因此类似乎属于主捆绑包,因此+[NSBundle bundleForClass:]不起作用。

您可以使用以下内容创建自己指向框架的捆绑包:

NSString *fwPath = [[[NSBundle mainBundle] privateFrameworksPath] stringByAppendingPathComponent:@"Shared.framework"]; NSBundle *bundle = [NSBundle bundleWithPath:fwPath];

我已经在一个空项目上进行了测试,它可以正常工作,并允许加载笔尖文件。我没有测试资产目录,但我怀疑这是有效的NSBundle参考,您应该可以。

静态库只是对象文件的汇编(一个.a文件中的多个.o文件)。当它们链接到可执行目标(APP二进制或动态库)时,它们的身份消失了,除了代码和恒定数据以外,它们没有其他资源。

最新更新