从iOS Objective-C框架访问捆绑资源字体,图像

问题描述

创建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"]