NSBundle bundleWithIdentifier 为静态框架和资源包返回 null

NSBundle bundleWithIdentifier returning null for Static framework and resource bundle

我正在尝试创建一个静态框架,它将使用一些图像在其视图中显示。我通过在我的 sdk 项目中添加目标从 XCode 创建了一个 MyFrameworkBundle.bundle。在包中添加了我所有的图像并创建了包并为该目标提供了一个包标识符 my.frameworkbundle。 现在我正尝试在我的框架中获取该包,如下所示:

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

然后我将那些框架和资源包放在另一个项目中,并尝试 运行 上面一行的功能。它始终 return 为空。即使我尝试像上面的代码一样获取框架,即:

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

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

我也试过下面的代码:

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

但它给出错误

no suitable image found

系统详细信息:

因为框架是静态链接的,所以 类 似乎属于主包,因此 +[NSBundle bundleForClass:] 不起作用。

您可以使用以下方法创建自己的指向框架的包:

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

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

静态库只是目标文件的编译(一个 .a 文件中有多个 .o 文件)。当它们链接到可执行目标(应用程序二进制文件或动态库)时,它们的身份就会消失,并且除了代码和常量数据之外,它们不会带来任何资源。