Pregunta

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

¿Fue útil?

Otros consejos

En realidad, estoy probando con 10.6.8 y este código todavía funciona: está usando la API privada, pero verificando que el selector existe (Myurl es el NSURL que estoy tratando de cargar en una vista web o una 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ó para que absolutamente todos El trabajo se realizaría en tiempo de ejecución. Eso hace que sea tan seguro y oculto de las cheques de Apple como puede ser, especialmente si oscurece la cadena.

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

@implementation NSURLRequest (IgnoreSSL)

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
    return YES;
}

@end

Esto debería obtener los cheques de API privados de Apple, pero sigue siendo lo mismo (usando una API privada e indocumentada [1] que puede romperse en cualquier momento). En realidad, es peor ya que lo permite todo, no solo ese anfitrión.

1]: una API privada que debería ser público, pero una API privada, sin embargo.

setAlowsanyhttpsCertificate parece estar ahora sin apoyo en OS X 10.6.6 por completo.

¿Dije 10.6.6? Quizás debería haber dicho "Snow Vista".

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top