【问题标题】:NSBundle bundleWithIdentifier returning null for Static framework and resource bundleNSBundle bundleWithIdentifier 为静态框架和资源包返回 null
【发布时间】:2017-03-02 12:04:01
【问题描述】:

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

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

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

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

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

我也尝试了以下代码:

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

但它给出了错误

没有找到合适的图片

系统详情:

  • Xcode:8.2.1
  • MacOS : 10.12 (Sierra)

【问题讨论】:

    标签: ios xcode nsbundle ios-frameworks


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我认为问题是关于框架而不是静态库
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多