iphone cocoa cocoa-touch nsurlrequest iphone-privateapi

iphone - Método alternativo para el "setAllowsAnyHTTPSCertificate privado de NSURLRequest: forHost:”?



cocoa cocoa-touch (6)

Mi aplicación de iPhone fue rechazada únicamente por utilizar el método privado (que parece muy seguro) +setAllowsAnyHTTPSCertificate:forHost: for NSURLRequest . ¿Existe una API no privada para emular esta funcionalidad?



En realidad, estoy probando con 10.6.8 y este código aún funciona; está usando la API privada pero comprobando que el selector existe (myurl es el NSURL que estoy tratando de cargar en un WebView o un NSURLConnection):

SEL selx = NSSelectorFromString(@"setAllowsAnyHTTPSCertificate:forHost:"); if ( [NSURLRequest respondsToSelector: selx] ) { IMP fp; fp = [NSURLRequest methodForSelector:selx]; (fp)([NSURLRequest class], selx, YES, [myurl host]); }

Tenga en cuenta que "@selector" no se usó, por lo que absolutamente todo el trabajo se haría en tiempo de ejecución. Eso lo hace tan seguro y tan oculto de los cheques de Apple como puede ser, especialmente si ocultas la cadena.


No es una solución, sino una sugerencia. ¿Has pensado en usar ASIHttpRequest Framework para esto? Este marco está completo en todos los aspectos. Verifique la documentación, tal vez pueda ayudarle también.



Una solución muy estúpida es hacer tu propio método de categoría:

@implementation NSURLRequest (IgnoreSSL) + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host { return YES; } @end

Esto se debe a las comprobaciones de la API privada de Apple, pero sigue siendo lo mismo (el uso de una API privada no documentada [1] que puede romperse en cualquier momento). En realidad, es peor porque permite todo, no solo ese host.

[1]: Una API privada que debería hacerse pública, pero una API privada sin embargo.


setAllowsAnyHTTPSCertificate parece que ahora no es compatible con OS X 10.6.6 en total.

¿Dije 10.6.6? Tal vez debería haber dicho "Snow Vista".