问题描述
创建MyFramework.framework来共享我在应用程序之间显示的视图。当前,我在应用程序“ MyApp”中使用MyFramework。
在我的项目中使用的框架(MyFrawork.framework)中创建了名为 Resources.bundle 的捆绑包。
我在上面放了一些图像和字体。我将此捆绑包放入MyFrawork.framework中的复制捆绑包资源中。
尝试从MyFramowork.framework获取窗口时,未加载我的字体和图像...
我想做的是:
Nsstring *fontName;
static NSBundle* frameworkBundle = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate,^{
Nsstring* mainBundlePath = [[NSBundle mainBundle] resourcePath];
Nsstring* frameworkBundlePath = [mainBundlePath stringByAppendingPathComponent:@"Resources.bundle"];
frameworkBundle = [NSBundle bundleWithPath:frameworkBundlePath];
});
NSLog(@"[Bundle] IS NULL: %@",frameworkBundle == nil ? @"YES" : @"NO");
Nsstring *fontPath = [frameworkBundle pathForResource:@"Roboto-Regular" ofType:@"ttf"];
NSData *inData = [NSData dataWithContentsOfFile:fontPath];
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)inData);
CGFontRef font = CGFontCreateWithDataProvider(provider);
CFErrorRef error;
fontName = (Nsstring *)CFBridgingrelease(CGFontcopyPostScriptName(font));
if (! CTFontManagerRegistergraphicsFont(font,&error)) {
CFStringRef errorDescription = CFErrorcopyDescription(error);
NSLog(@"[FONT]Failed to load font: %@",errorDescription);
CFRelease(errorDescription);
}
frameworkBundle始终为零,因此我的日志中始终始终为“ [Bundle] IS NULL:YES”。
以上所有操作均在MyFrawork.framwork中完成。这里是我尝试加载字体的方法:
[title setFont:[UIFont fontWithName:fontName size:11]];
如何从MyFramework.framework访问Resource.bundle,以便可以从其他应用程序使用这些资源?
解决方法
让我们假设您将通过LibPD Framework实现PureData,并将一些基本的PD文件(.pd)作为资源放入库中,以便从捆绑软件中加载。
┬─── YourApp Workspace
├┬── libpd.xcodeproj //LibPD Framework
│└┬─ PDBase.h
│ └─ SomeFile.pd
└┬── YourApp Source Folder
├── AppDelegate.h
├── ... other ...
如果您有框架定义的基类(应该有一个),则应该可以使用bundleForClass:
访问文件
NSBundle *pdBundle = [NSBundle bundleForClass:[PdBase class]];
NSString *path=[pdBundle pathForResource:@"SomeFile" ofType:@"pd"];
(未经测试)PS:很高兴详细了解您的结构以帮助您。还有很多其他方法可以访问文件。Apple Doc就像..
[NSBundle bundleWithIdentifier:@"com.organisation.projectname"]