Vin*_*ren 9 xcode objective-c ios
我使用有关为iOS开发创建通用二进制框架以分发库的方法.我还想在框架中添加文件,并将它们加载到主程序中(实际上是SSL证书).这与StackOverflow问题有关,主要区别在于我想要包含除XIB之外的其他内容.
如果我们读取与链接帖子相关的线程,似乎是不可能的.但是,提到了以下博客文章 ; 我们可以读到:
"静态框架不是标准框架的完全替代 - 访问框架资源的标准方法,例如
+[NSBundle bundleForClass:]不会返回预期的bundle.通过查询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
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
以下代码在类似情况下适用于我
NSBundle * bundle = [NSBundle bundleForClass:[self class]];
NSString * file = [bundle pathForResource:@"my-cert" ofType:@"der"];;
NSData * trustedCertData = [NSData dataWithContentsOfFile:[file stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
Run Code Online (Sandbox Code Playgroud)
该NSBundle bundleForClass:方法返回当前类框架的包.因此,如果您在MyFramework中调用此方法,则不需要MyFramework.framework再次附加路径,但如果这是您的问题,您可能已经捕获了调试.
也my-cert.der可能需要用%equivelent替换破折号.因此stringByReplacingPercentEscapesUsingEncoding:电话.
| 归档时间: |
|
| 查看次数: |
4693 次 |
| 最近记录: |