iOS 8:从Cocoa Touch框架获取资源

iOS 8:从Cocoa Touch框架获取资源,ios,cocoa-touch,ios8,Ios,Cocoa Touch,Ios8,为了在我的应用程序和扩展程序之间共享代码和资源,我在我的项目中嵌入了一个Cocoa Touch框架,该框架包含一些资源,如图像和xib文件 我的问题是:如何从may main应用程序和扩展访问这些资源 我曾经用过这个方法: 但这将复制到应用程序包和扩展包中的所有资源,这不是一个好的重复 有更好的办法吗 更新: 现在,我的主应用程序可以使用以下代码访问框架中的资源: +(NSBundle*)frameworkBundle { NSString *frameworkDirPath = [[N

为了在我的应用程序和扩展程序之间共享代码和资源,我在我的项目中嵌入了一个
Cocoa Touch框架
,该框架包含一些资源,如图像和xib文件

我的问题是:如何从may main应用程序和扩展访问这些资源

我曾经用过这个方法:

但这将复制到应用程序包和扩展包中的所有资源,这不是一个好的重复

有更好的办法吗

更新:

现在,我的主应用程序可以使用以下代码访问框架中的资源:

+(NSBundle*)frameworkBundle
{
    NSString *frameworkDirPath = [[NSBundle mainBundle] privateFrameworksPath];
    NSString *frameworkBundlePath = [frameworkDirPath stringByAppendingPathComponent:@"MyFramework.framework"];
    NSBundle *frameworkBundle = [NSBundle bundleWithPath:frameworkBundlePath];

    return frameworkBundle;
}
但这对扩展不起作用。

试试这个:

NSBundle *frameworkBundle = [NSBundle bundleForClass:[AnyClassFromFramework class]];
这对我很有用:

NSBundle * frameworkBundle = [NSBundle bundleWithIdentifier:@"<framework-bundle-identifier>"];
NSBundle*frameworkBundle=[NSBundle-bundlewithiIdentifier:@”“;

<>代码>

对于<强> Swift ,考虑使用:

let bundle = NSBundle(forClass: self.dynamicType)

它抛出的路径与问题中的代码不同,为什么?我们应该使用什么?使用bundleForClass创建捆绑包比从路径创建要好。我在开发过程中遇到了这个问题,在开发过程中,我们使用了测试应用程序中的coredatamomd文件,然后我们将该应用程序转换为一个框架,并将momd添加为一个资源。现在,使用momd文件的测试应用程序正在mainBundle中查找它,而现在它不正确。momd文件在框架内移动。因此,请始终使用bundleForClass并提供最接近/直接使用资源的类。这仅适用于Swift 3+。这仅适用于动态库,对于静态库,它返回nil。