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

时间:2017-03-02 12:04:01

标签: ios xcode nsbundle ios-frameworks

我正在尝试创建一个静态框架,它将使用一些图像在其视图中显示。我通过在我的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)

2 个答案:

答案 0 :(得分:0)

由于框架是静态链接的,因此类似乎属于主捆绑包,因此| KEY | MODULE | ACTION | NEXT_KEY | PREV_KEY | |-----|--------|---------|----------|----------| | 1 | A | SENT | 2 | (null) | | 2 | A | RECEIVE | (null) | 1 | | 3 | A | RECEIVE | (null) | 4 | | 4 | A | SENT | 3 | (null) | | 5 | A | SENT | (null) | (null) | | 6 | A | SENT | 7 | (null) | | 7 | A | RECEIVE | (null) | 6 | | 8 | A | SENT | (null) | (null) | 不起作用。

您可以使用以下方法创建指向框架的捆绑软件:

+[NSBundle bundleForClass:]

我已经在一个空项目上进行了测试,它可以正常工作,并且可以加载NIB文件。我尚未测试资产目录,但我怀疑,因为这是有效的 NSString *fwPath = [[[NSBundle mainBundle] privateFrameworksPath] stringByAppendingPathComponent:@"Shared.framework"]; NSBundle *bundle = [NSBundle bundleWithPath:fwPath]; 参考,所以应该没问题。

答案 1 :(得分:0)

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