xcode 如何从主程序中检索iOS框架包中的文件/资源?

5tmbdcev  于 2022-12-05  发布在  iOS
关注(0)|答案(2)|浏览(151)

我使用的方法是创建一个用于iOS开发的通用二进制框架来分发一个库。我还想在框架中添加文件,并将它们加载到主程序中(实际上是一个SSL证书)。这与this StackOverflow question有关,主要区别是我想包含除XIB之外的其他内容。
如果我们读到与链接帖子相关的帖子,似乎这是不可能的。我们可以读到:
“静态框架不是标准框架的完全替代--用于访问框架资源的标准方法(如+[NSBundle bundleForClass:])将不会返回预期的包。包路径是通过查询dyld以获得与符号地址对应的库路径来确定的--在静态链接的情况下,这将返回静态库链接到的二进制文件的路径。此外,NSBundle/CFBundle将检查返回地址的上一个堆栈,并使用该返回地址确定调用代码的dyld二进制路径。考虑到这些限制,可以使用一些变通办法,例如使用-[NSBundle privateFrameworkPath]查找嵌入式框架的路径。
我是iOS开发的初学者,我很难使用这样的机制。使用privateFrameworksPath确实返回了一个路径,但我不知道下一步该怎么做才能找到我想加载的文件。
事情是这样的:

NSBundle * bundle = [NSBundle bundleForClass:[self class]];
NSString * path = [bundle privateFrameworksPath]; // Works, return something like .../Frameworks
NSString * file = [path stringByAppendingPathComponent:@"MyFramework.framework/Versions/A/my-cert.der"]; 
NSData * trustedCertData = [NSData dataWithContentsOfFile:file]; // Returns nil

有什么想法吗?

bjp0bcyl

bjp0bcyl1#

下面的代码在类似的情况下对我有效

NSBundle * bundle = [NSBundle bundleForClass:[self class]];
NSString * file = [bundle pathForResource:@"my-cert" ofType:@"der"];; 
NSData * trustedCertData = [NSData dataWithContentsOfFile:[file stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSBundle bundleForClass:方法返回当前类的框架包。因此,如果您从MyFramework中调用此方法,则无需再次在路径后追加MyFramework.framework,但如果这是您的问题,您将捕获调试。
此外,my-cert.der中的破折号可能需要替换为% equivelent。因此调用stringByReplacingPercentEscapesUsingEncoding:

gpnt7bae

gpnt7bae2#

访问框架捆绑包

关键是要传递任何metatypeAbout(https://stackoverflow.com/a/67459704/4770877)类属于框架
目标-C

NSBundle *someBundle = [NSBundle bundleForClass:[SomeFrameworkClass class]];

雨燕

//via public framework's class
let frameworkBundle = Bundle(for: SomeFrameworkClass.self)
//or via Bundle Identifier(PRODUCT_BUNDLE_IDENTIFIER)
let frameworkBundle = Bundle(identifier: "com.someid") 
//or if it is called from the framework
let frameworkBundle = Bundle(for: type(of: self))
let frameworkBundle = Bundle(for: Self.self)

//working with bundle as usual

Vocabulary(https://stackoverflow.com/a/59216151/4770877)

相关问题