未logging的NSURLErrorDomain错误代码(-1001,-1003和-1004)使用StoreKit

我正在写与StoreKit相关的代码,当我尝试将购买添加到队列时,我收到了一些相当麻烦的错误代码。

到目前为止,我经历了错误代码-1003和-1004,我无法find有关这些代码在互联网上的任何东西。

运行产品请求会返回有效的产品编号,所以我不知道为什么要调用[[SKPaymentQueue defaultQueue] addPayment:aPayment]; 会因为这个没有logging的问题而失败。

相同的代码也可以在一个设备上没有错误,但在另一个设备上没有错误。

我所拥有的问题迄今尚未解答:

这些代码是什么意思? 我怎样才能缓解这个问题? 为什么发生购买尝试而不是产品要求呢?

我已经完成的故障排除包括重新生成签名证书和configuration文件,更改WiFinetworking,清理和构build并重新安装所有相关的软件和组件,这些事情都没有单独或一起帮助解决问题。

编辑:

在苹果开发论坛上发现了一个关于这个问题的讨论,但苹果没有人回应: https : //devforums.apple.com/thread/107121? tstart =75 (iOS开发者帐户需要查看)

编辑:

我今天遇到错误代码-1001,添加到这个莫名其妙的和间歇性的问题列表。 苹果仍然没有问责,我可以find。

编辑:

我怀疑这些错误代码是随机生成的,只是表明Sandbox已closures。 任何人都会遇到这个问题?

所有错误代码位于文档( 链接 )上的“CFNetwork Errors Codes References”

CFURL和CFURLConnection的小提取错误:

  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, 

我有类似的问题,在我的情况似乎与networking连接有关:

错误域= NSURLErrorDomain代码= -1001“请求超时。”

检查事项:

  • 你的服务器有没有可能在一定的时间内回应? 像60秒或4分钟?
  • 您的设备是否有可能切换networking(WiFi,3G,VPN)?
  • 有人(客户端与服务器)是否可以等待身份validation?

对不起,没有想法如何解决。 只是debugging这个,试图找出问题是什么(-1021,-1001,-1009)

更新:谷歌search非常友好,find这个:

  • -1001 TimedOut – 花费的时间超过了超时。
  • -1003 CannotFindHost – 找不到主机。
  • -1004 CannotConnectToHost – 主机不会让我们build立连接。

请参阅NSURLError.h定义

 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, 

我在我的项目中使用以下方法

 -(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; } 

然后我只是检查错误代码,并显示警报是否在列表中

 if ([[self networkErrorCodes] containsObject:[NSNumber numberWithInt:[error code]]]){ // Fire Alert View Here } 

但是,正如你所看到的,我注释了一些我认为不符合我对无互联网的定义的代码。 例如-1012(validation失败)的代码。您可以随意编辑列表。

在我的项目中,我使用它从用户input的用户名/密码。 在我看来(物理)networking连接错误可能是在您的基于networking的应用程序中显示警报视图的唯一原因。 在任何其他情况下(例如不正确的用户名/密码对),我喜欢做一些自定义用户友好的animation,或者只是重复失败的尝试,而没有任何用户的关注。 特别是如果用户没有明确发起networking呼叫。

问候martinezdelariva链接到文档。

我发现了一个新的错误代码,上面没有logging: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."