我使用的方法是创建一个用于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
有什么想法吗?
2条答案
按热度按时间bjp0bcyl1#
下面的代码在类似的情况下对我有效
NSBundle bundleForClass:
方法返回当前类的框架包。因此,如果您从MyFramework中调用此方法,则无需再次在路径后追加MyFramework.framework
,但如果这是您的问题,您将捕获调试。此外,
my-cert.der
中的破折号可能需要替换为% equivelent。因此调用stringByReplacingPercentEscapesUsingEncoding:
。gpnt7bae2#
访问框架捆绑包
关键是要传递任何
metatype
About(https://stackoverflow.com/a/67459704/4770877)类属于框架目标-C
雨燕
Vocabulary(https://stackoverflow.com/a/59216151/4770877)