J'écris du code lié à StoreKit et j'obtiens des codes d'erreur plutôt troublants lorsque j'essaie d'ajouter un achat à la file d'attente.
Jusqu'à présent, j'ai rencontré les codes d'erreur -1003 et -1004 et je ne trouve rien sur ces codes sur Internet.
L'exécution d'une demande de produit retourne des numéros de produit valides. Je ne comprends donc pas pourquoi les appels à [[SKPaymentQueue defaultQueue] addPayment:aPayment];
échouerait avec ce problème non documenté.
Le même code fonctionne également sans les erreurs sur un périphérique mais pas sur un autre.
Les questions que j'ai sont, pour l'instant, sans réponse:
Que signifient ces codes? Comment puis-je résoudre ce problème? Pourquoi se produisent-ils pour les tentatives d’achat et non pour les demandes de produits?
Le dépannage que j'ai effectué inclut la régénération d'un certificat de signature et d'un profil d'approvisionnement, la modification de réseaux WiFi, le nettoyage, la construction et la réinstallation de tous les logiciels et composants associés. Aucune de ces choses, individuellement ou conjointement, n'a permis de résoudre le problème.
MODIFIER:
Vous avez trouvé une discussion à ce sujet sur les forums de développement Apple, mais personne à partir de Apple a répondu: https://devforums.Apple.com/thread/107121? tstart = 75 (compte de développeur iOS requis pour afficher)
MODIFIER:
J'ai été frappé par le code d'erreur -1001 aujourd'hui, pour ajouter à cette liste de problèmes inexplicables et intermittents. Toujours aucune responsabilité d'Apple, que je puisse trouver.
MODIFIER:
Je soupçonne que ces codes d'erreur sont générés de manière aléatoire et indiquent uniquement que la Sandbox est en panne. Quelqu'un d'autre a ce problème?
Tous les codes d'erreur figurent dans "Références des codes d'erreur CFNetwork" dans la documentation ( lien ).
Une petite extraction pour CFURL et CFURLConnection Erreurs:
kCFURLErrorUnknown = -998,
kCFURLErrorCancelled = -999,
kCFURLErrorBadURL = -1000,
kCFURLErrorTimedOut = -1001,
kCFURLErrorUnsupportedURL = -1002,
kCFURLErrorCannotFindHost = -1003,
kCFURLErrorCannotConnectToHost = -1004,
kCFURLErrorNetworkConnectionLost = -1005,
kCFURLErrorDNSLookupFailed = -1006,
kCFURLErrorHTTPTooManyRedirects = -1007,
kCFURLErrorResourceUnavailable = -1008,
kCFURLErrorNotConnectedToInternet = -1009,
kCFURLErrorRedirectToNonExistentLocation = -1010,
kCFURLErrorBadServerResponse = -1011,
kCFURLErrorUserCancelledAuthentication = -1012,
kCFURLErrorUserAuthenticationRequired = -1013,
kCFURLErrorZeroByteResource = -1014,
kCFURLErrorCannotDecodeRawData = -1015,
kCFURLErrorCannotDecodeContentData = -1016,
kCFURLErrorCannotParseResponse = -1017,
kCFURLErrorInternationalRoamingOff = -1018,
kCFURLErrorCallIsActive = -1019,
kCFURLErrorDataNotAllowed = -1020,
kCFURLErrorRequestBodyStreamExhausted = -1021,
kCFURLErrorFileDoesNotExist = -1100,
kCFURLErrorFileIsDirectory = -1101,
kCFURLErrorNoPermissionsToReadFile = -1102,
kCFURLErrorDataLengthExceedsMaximum = -1103,
J'ai des problèmes similaires, dans mon cas, semblent être liés à la connectivité réseau:
Domaine d'erreur = Code NSURLErrorDomain = -1001 "La demande a expiré."
Choses à vérifier:
Désolé, pas d'idées pour résoudre ce problème. Juste en train de déboguer ceci, en essayant de trouver le problème (-1021, -1001, -1009)
Mise à jour: La recherche Google était très gentille de trouver ceci:
voir NSURLError.h Define
NSURLErrorUnknown = -1,
NSURLErrorCancelled = -999,
NSURLErrorBadURL = -1000,
NSURLErrorTimedOut = -1001,
NSURLErrorUnsupportedURL = -1002,
NSURLErrorCannotFindHost = -1003,
NSURLErrorCannotConnectToHost = -1004,
NSURLErrorNetworkConnectionLost = -1005,
NSURLErrorDNSLookupFailed = -1006,
NSURLErrorHTTPTooManyRedirects = -1007,
NSURLErrorResourceUnavailable = -1008,
NSURLErrorNotConnectedToInternet = -1009,
NSURLErrorRedirectToNonExistentLocation = -1010,
NSURLErrorBadServerResponse = -1011,
NSURLErrorUserCancelledAuthentication = -1012,
NSURLErrorUserAuthenticationRequired = -1013,
NSURLErrorZeroByteResource = -1014,
NSURLErrorCannotDecodeRawData = -1015,
NSURLErrorCannotDecodeContentData = -1016,
NSURLErrorCannotParseResponse = -1017,
NSURLErrorAppTransportSecurityRequiresSecureConnection NS_ENUM_AVAILABLE(10_11, 9_0) = -1022,
NSURLErrorFileDoesNotExist = -1100,
NSURLErrorFileIsDirectory = -1101,
NSURLErrorNoPermissionsToReadFile = -1102,
NSURLErrorDataLengthExceedsMaximum NS_ENUM_AVAILABLE(10_5, 2_0) = -1103,
// SSL errors
NSURLErrorSecureConnectionFailed = -1200,
NSURLErrorServerCertificateHasBadDate = -1201,
NSURLErrorServerCertificateUntrusted = -1202,
NSURLErrorServerCertificateHasUnknownRoot = -1203,
NSURLErrorServerCertificateNotYetValid = -1204,
NSURLErrorClientCertificateRejected = -1205,
NSURLErrorClientCertificateRequired = -1206,
NSURLErrorCannotLoadFromNetwork = -2000,
// Download and file I/O errors
NSURLErrorCannotCreateFile = -3000,
NSURLErrorCannotOpenFile = -3001,
NSURLErrorCannotCloseFile = -3002,
NSURLErrorCannotWriteToFile = -3003,
NSURLErrorCannotRemoveFile = -3004,
NSURLErrorCannotMoveFile = -3005,
NSURLErrorDownloadDecodingFailedMidStream = -3006,
NSURLErrorDownloadDecodingFailedToComplete =-3007,
NSURLErrorInternationalRoamingOff NS_ENUM_AVAILABLE(10_7, 3_0) = -1018,
NSURLErrorCallIsActive NS_ENUM_AVAILABLE(10_7, 3_0) = -1019,
NSURLErrorDataNotAllowed NS_ENUM_AVAILABLE(10_7, 3_0) = -1020,
NSURLErrorRequestBodyStreamExhausted NS_ENUM_AVAILABLE(10_7, 3_0) = -1021,
NSURLErrorBackgroundSessionRequiresSharedContainer NS_ENUM_AVAILABLE(10_10, 8_0) = -995,
NSURLErrorBackgroundSessionInUseByAnotherProcess NS_ENUM_AVAILABLE(10_10, 8_0) = -996,
NSURLErrorBackgroundSessionWasDisconnected NS_ENUM_AVAILABLE(10_10, 8_0)= -997,
J'utilise la méthode suivante dans mon projet
-(NSArray*)networkErrorCodes
{
static NSArray *codesArray;
if (![codesArray count]){
@synchronized(self){
const int codes[] = {
//kCFURLErrorUnknown, //-998
//kCFURLErrorCancelled, //-999
//kCFURLErrorBadURL, //-1000
//kCFURLErrorTimedOut, //-1001
//kCFURLErrorUnsupportedURL, //-1002
//kCFURLErrorCannotFindHost, //-1003
kCFURLErrorCannotConnectToHost, //-1004
kCFURLErrorNetworkConnectionLost, //-1005
kCFURLErrorDNSLookupFailed, //-1006
//kCFURLErrorHTTPTooManyRedirects, //-1007
kCFURLErrorResourceUnavailable, //-1008
kCFURLErrorNotConnectedToInternet, //-1009
//kCFURLErrorRedirectToNonExistentLocation, //-1010
kCFURLErrorBadServerResponse, //-1011
//kCFURLErrorUserCancelledAuthentication, //-1012
//kCFURLErrorUserAuthenticationRequired, //-1013
//kCFURLErrorZeroByteResource, //-1014
//kCFURLErrorCannotDecodeRawData, //-1015
//kCFURLErrorCannotDecodeContentData, //-1016
//kCFURLErrorCannotParseResponse, //-1017
kCFURLErrorInternationalRoamingOff, //-1018
kCFURLErrorCallIsActive, //-1019
//kCFURLErrorDataNotAllowed, //-1020
//kCFURLErrorRequestBodyStreamExhausted, //-1021
kCFURLErrorFileDoesNotExist, //-1100
//kCFURLErrorFileIsDirectory, //-1101
kCFURLErrorNoPermissionsToReadFile, //-1102
//kCFURLErrorDataLengthExceedsMaximum, //-1103
};
int size = sizeof(codes)/sizeof(int);
NSMutableArray *array = [[NSMutableArray alloc] init];
for (int i=0;i<size;++i){
[array addObject:[NSNumber numberWithInt:codes[i]]];
}
codesArray = [array copy];
}
}
return codesArray;
}
Ensuite, je vérifie simplement le code d'erreur et montre l'alerte si elle se trouve dans la liste.
if ([[self networkErrorCodes] containsObject:[NSNumber
numberWithInt:[error code]]]){
// Fire Alert View Here
}
Mais comme vous pouvez le constater, j'ai commenté des codes qui, à mon avis, ne correspondent pas à ma définition de NO INTERNET. Par exemple, le code -1012 (échec de l’authentification.) Vous pouvez modifier la liste à votre guise.
Dans mon projet, je l’utilise avec un nom d’utilisateur/mot de passe. Et à mon avis, les erreurs de connexion réseau (physiques) pourraient être la seule raison d'afficher un affichage d'alerte dans votre application réseau. Dans tous les autres cas (par exemple, une paire nom d'utilisateur/mot de passe incorrect), je préfère effectuer une animation personnalisée conviviale, OR, il suffit de répéter la tentative infructueuse à nouveau, sans que l'utilisateur se préoccupe de rien. En particulier si l'utilisateur n'a pas pas explicitement lancé un appel réseau.
Cordialement à martinezdelariva pour un lien vers la documentation.
J'ai trouvé cette page dans la documentation qui a un objectif-c enum pour tous les codes d'erreur sous le NSURLErrorDomain.
J'ai trouvé un nouveau code d'erreur qui n'est pas documenté ci-dessus: CFNetworkErrorCode -1022
Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection."