
Nsstring *certPath = [[NSBundle mainBundle] pathForResource:@"supportwarriors.com" ofType:@"cer"]; SecCertificateRef myCertificate = nil; NSData *certificateData = [[NSData alloc] initWithContentsOffile:certPath]; myCertificate = SecCertificateCreateWithData(kcfAllocatorDefault,(CFDataRef)certificateData); //got certificate ref..Now get public key secKeyRef reference from certificate.. SecPolicyRef myPolicy = SecPolicyCreateBasicX509(); SecTrustRef myTrust; Osstatus status = SecTrustCreateWithCertificates(myCertificate,myPolicy,&myTrust); SecTrustResultType trustResult; if (status == noErr) { status = SecTrustEvaluate(myTrust,&trustResult); } publicKey = SecTrustcopyPublicKey(myTrust); 上面的代码完全适用于iPhone,我测试过.我能够安全地与我的服务器通信.但是当我尝试在iPad上运行我的应用程序时(在2x模式下)上面的代码崩溃了.调试之后,我发现secTrustCreateWithCertificate崩溃并且崩溃日志在下面给出.我使用的证书对于iPad和iPhone都是相同的…上面的函数secCertificateCreateWithData返回证书引用并且不是nil …所以这是不是崩溃的原因.我做错了什么.
*** -[NSCFType count]: unrecognized selector sent to instance 0x14af24*** Terminating app due to uncaught exception 'NSinvalidargumentexception',reason: '*** -[NSCFType count]: unrecognized selector sent to instance 0x14af24'解决方法 SecTrustCreateWithCertificates的文档声称您可以传递单个证书或数组.您收到的异常表明 – [NSCFType count]:发送到实例的无法识别的选择器. iOS 3.2中发生的事情是SecTrustCreateWithCertificates将输入值视为CFArray而不先检查它是否是一个单一的SecCertificateRef.
要解决此问题,您可以执行类似于以下代码的 *** 作:
SecCertificateRef certs[1] = { certificate }; CFArrayRef array = CFArrayCreate(NulL,(const voID **) certs,1,NulL); if(SecTrustCreateWithCertificates(array,x509Policy,&trustChain) == errSecSuccess) 只记得CFRelease(数组)在适当的范围内.
总结以上是内存溢出为你收集整理的iphone – SecTrustCreateWithCertificates在iPad上崩溃全部内容,希望文章能够帮你解决iphone – SecTrustCreateWithCertificates在iPad上崩溃所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)