サーバーと安全に通信するために iOS セキュリティ フレームワークを使用しようとしています。公開鍵参照を取得できる証明書ファイルがあります。これが私がしていることです。
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'