ErrorCode: AccessDenied, Mensaje: la authentication de AWS requiere una date válida o un encabezado de date x-amz

mi aplicación funciona bien en ios 6 … carga y descarga los datos del server web amazon s3 … pero cuando actualizo mi ios 6 a ios 7 … recibí un post de alerta "no puedo conectarme al server" este error en el logging window

"Exception = AmazonServiceException {RequestId: 5DC8AEF01DD9FB91, ErrorCode: AccessDenied, Mensaje: La authentication de AWS requiere una date válida o x-amz-date header}".

para resolver este problema, actualizo mi Aws ios SDK 1.0.0 a Aws ios SDK 1.6.1. e bash ejecutar mi aplicación, se congela durante 10-12 segundos y luego la aplicación se ejecuta.

así que por favor, ¿alguien puede decirme la solución de cómo elimino el problema "encabezado x-amz-date" en aws ios sdk 1.0.0 y su problema de congelación alternativo en aws ios sdk 1.6.1 ..

He enviado un informe de error a Apple (para averiguar si esto es un error o no).

Mientras tanto, he creado un horrible truco que resuelve el problema en S3Request.m en el método configureURLRequest:

NSString *checkFormat =[self.date requestFormat]; if(![checkFormat hasSuffix:@":00"]) checkFormat = [NSString stringWithFormat:@"%@:00",checkFormat]; [self.urlRequest setValue:checkFormat forHTTPHeaderField:kHttpHdrDate]; 

Esto puede no ser el mismo en su versión del AWS SDK.

No utilizaría esta solución a largo ploop: publicaré una respuesta del equipo de informe de errores de Apple aquí una vez que vuelvan con una solución recomendada

También publiqué una pregunta aquí: https://forums.aws.amazon.com/thread.jspa?threadID=135829#

EDITAR: en la última versión del juego de herramientas, el hack es:

 NSString *checkFormat =[self.date stringWithRFC822Format]; if(![checkFormat hasSuffix:@":00"]) checkFormat = [NSString stringWithFormat:@"%@:00",checkFormat]; [self.urlRequest setValue:checkFormat forHTTPHeaderField:kHttpHdrDate]; 

En AmazonSDKUtil.m , tenemos los siguientes methods:

 +(NSDate *)convertStringToDate:(NSString *)string usingFormat:(NSString *)dateFormat { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:dateFormat]; [dateFormatter setLocale:[AmazonSDKUtil timestampLocale]]; [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; NSDate *parsed = [dateFormatter dateFromString:string]; NSDate *localDate = [parsed dateByAddingTimeInterval:_clockskew]; [dateFormatter release]; return localDate; } +(NSString *)convertDateToString:(NSDate *)date usingFormat:(NSString *)dateFormat { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; [dateFormatter setDateFormat:dateFormat]; [dateFormatter setLocale:[AmazonSDKUtil timestampLocale]]; NSDate *realDate = [date dateByAddingTimeInterval:-1*_clockskew]; NSString *formatted = [dateFormatter stringFromDate:realDate]; [dateFormatter release]; return formatted; } 

En las versiones anteriores del SDK, la configuration regional y la zona horaria no se configuraron correctamente en en_US y GMT . Esto puede causar problemas dependiendo de la configuration regional de su dispositivo y de la zona horaria. La última versión del SDK corrige el problema. Si, por alguna razón, no puede actualizar el SDK, puede modificar AmazonSDKUtil.m y establecer explícitamente los valores de la zona horaria y la zona horaria.

EDITAR:

Si ejecuta el siguiente fragment de código en iOS 6 y iOS 7, puede ver cómo la configuration regional afecta el formatting de date.

 NSDateFormatter *dateFormatter = [NSDateFormatter new]; dateFormatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss z"; dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"PDT"]; dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]; NSString *dateWithoutTimezoneAndLocale = [dateFormatter stringFromDate:[NSDate date]]; NSLog(@"Date 1: %@", dateWithoutTimezoneAndLocale); dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"GMT"]; dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; NSString *dateWithTimezoneAndLocale = [dateFormatter stringFromDate:[NSDate date]]; NSLog(@"Date 2: %@", dateWithTimezoneAndLocale); 

En iOS 6

 Date 1: Wed, 25 Sep 2013 16:25:29 PDT Date 2: Wed, 25 Sep 2013 23:25:29 GMT 

En iOS 7

 Date 1: Wed, 25 Sep 2013 16:24:11 GMT-7 Date 2: Wed, 25 Sep 2013 23:24:11 GMT 

Como dijiste antes, el comportamiento de NSDateFormatter cambió en iOS 7; Sin embargo, la causa raíz de este problema es que no está configurando explícitamente la configuration regional en en_US . Cuando la configuration regional se configura en algo que no sea en_US , puede causar un problema. Es por eso que establecemos explícitamente la configuration regional en la última versión de nuestro SDK para que se ejecute en dispositivos con cualquier configuration regional.

Espero que esto tenga sentido,

Finalmente tengo la solución y esto funciona para mí, utilicé awsios sdk 1.3.1 en lugar de awsios sdk 1.6.1. y hacer algunos cambios en S3Request.m en el método

 -(AmazonURLRequest *)configureURLRequest{ .... .... NSString *checkFormat =[self.date stringWithRFC822Format]; if(![checkFormat hasSuffix:@":00"]) checkFormat = [NSString stringWithFormat:@"%@+00:00",checkFormat]; [self.urlRequest setValue:checkFormat forHTTPHeaderField:kHttpHdrDate]; ... ... 

}

Tuve el mismo problema y después de actualizar a la versión 1.6 de AWS SDK, el problema se ha ido.