使用解决方案时有几个反作用和副作用,例如
[NSBundle mainBundle]
或者
NSBundle *localBundle = [NSBundle bundleForClass:[myObject class]]
当你的应用结构就像
MyContainerApp
|------Frameworks/
|-----------------MyFramework.framwork/
|-------------------Resources/
|-------------mydata.json
因此,如果您可以创建一个捆绑文件并将其提供给容器应用程序(作为第 3 方框架开发人员),您可以提供此 API
+ (NSBundle *)frameworkBundle {
static NSBundle* frameworkBundle = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
NSString* mainBundlePath = [[NSBundle mainBundle] resourcePath];
NSString* frameworkBundlePath = [mainBundlePath stringByAppendingPathComponent:@"YourFrameworkBundle.bundle"];
frameworkBundle = [NSBundle bundleWithPath:frameworkBundlePath];
});
return frameworkBundle;
}
但是,一个非常简单的,可以说超级高效的解决方案是带有hexdump的旧 C 标头
xxd -i mydata.json >> mydata.json.h
这个 hexdump 将生成一个包含这些定义的头文件
unsigned char mydata_json[] = {
// hex array
};
和
unsigned int mydata_json_len = 32227;
因此,在您的框架或静态库中,您可以访问它
unsigned char *rawBytes = mydata_json;
NSUInteger dataLen = mydata_json_len;
NSData *serializedData = [NSData dataWithBytesNoCopy:rawBytes length:dataLen freeWhenDone:NO];
那么你可能想把它变成文本:
NSString* myString = [NSString stringWithUTF8String:[rawBytes bytes]];
就是这样。快乐编码!