文書化されていないStoreKitを使用したNSURLErrorDomainエラーコード(-1001、-1003、-1004)


106

StoreKit関連のコードを書いていますが、購入をキューに追加しようとすると、かなり厄介なエラーコードが表示されます。

これまでのところ、エラーコード-1003と-1004が発生しており、インターネット上でこれらのコードについて何も見つけることができません。

製品リクエストを実行すると有効な製品番号が返されるため[[SKPaymentQueue defaultQueue] addPayment:aPayment];、この文書化されていない問題でへの呼び出しが失敗する理由がわかりません。

同じコードは、あるデバイスではエラーなしでも機能しますが、別のデバイスでは機能しません。

私が持っている質問は、まだ、まだ答えられていません:

これらのコードはどういう意味ですか?この問題を軽減するにはどうすればよいですか?製品のリクエストではなく購入の試みで発生するのはなぜですか?

私が行ったトラブルシューティングには、署名証明書とプロビジョニングプロファイルの再生成、WiFiネットワークの変更、すべての関連ソフトウェアとコンポーネントのクリーニングとビルドと再インストールが含まれますが、これらのどれも個別にまたは一緒にしても問題の解決に役立ちませんでした。

編集:

Apple 開発フォーラムでこれに関するディスカッションを見つけましたが、Appleの誰も返信していません:https : //devforums.apple.com/thread/107121?tstart=75(表示するにはiOS開発者アカウントが必要です)

編集:

この不可解で断続的な問題のリストに追加するために、本日エラーコード-1001に見舞われました。アップルからの説明責任はまだありません。

編集:

これらのエラーコードはランダムに生成され、実際にはサンドボックスがダウンしていることのみを示しているのではないかと疑っています。他の誰かがこの問題を経験していますか?

回答:


341

すべてのエラーコードは、ドキュメントの「CFNetworkエラーコードリファレンス」にあります(リンク

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,

2
これらは、CFNetworkフレームワーク> CFNetworkErrors.hヘッダー内にあります。
トムペース

1
このドキュメントには、エラーが発生したときの詳細が記載されています。NSURLErrorファミリー
9つの石

これらの定数はSwiftではコンパイルされませんが、たとえばコンパイルされNSURLErrorUnknownます。手がかりはありますか?
Nicolas Miari 2015

ああ、気にしないで...見つけ、ここでスウィフトバージョン:developer.apple.com/library/mac/documentation/Networking/...
ニコラMiari

25

私は同様の問題を抱えていますが、私の場合はネットワーク接続に関連しているようです:

エラードメイン= NSURLErrorDomainコード= -1001「要求がタイムアウトしました。」

確認すること:

  • サーバーが制限時間内に応答できない可能性はありますか?60秒か4分?
  • デバイスがネットワーク(WiFi、3G、VPN)を切り替えている可能性はありますか?
  • 誰か(クライアント対サーバー)が認証を待っている可能性はありますか?

申し訳ありませんが、修正方法はありません。これをデバッグして、問題が何であるかを見つけようとします(-1021、-1001、-1009)

更新:グーグル検索はこれを見つけるためにとても親切でした:

  • -1001 TimedOut-割り当てられたタイムアウトよりも時間がかかりました。
  • -1003 CannotFindHost-ホストが見つかりませんでした。
  • -1004 CannotConnectToHost-ホストは接続を確立できませんでした。

1
「サーバーが制限時間内に応答できない可能性はありますか?」あなたが知っている、それはキラーだ、それは私がこのコードと連絡をとろうとしているのはAppleのサーバーであるので、それは私のサーバーではありません。
双曲線2011

Hey Jom、iPhoneでは問題なく動作しますが、iPadでは時々クラッシュします。このメッセージは「-1001 TimedOut」メッセージを示します。しかし、私の質問は、TimedOutがiPhoneとiPadの両方に搭載されている場合です。事前の感謝@JOM
バブール

21

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,

3

私のプロジェクトでは次の方法を使用しています

-(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のコード(認証は失敗します)。必要に応じてリストを編集できます。

私のプロジェクトでは、ユーザーから入力するユーザー名/パスワードで使用します。私の見解では、(物理的な)ネットワーク接続エラーが、ネットワークベースのアプリでアラートビューを表示する唯一の理由である可能性があります。それ以外の場合(たとえば、ユーザー名とパスワードのペアが正しくない場合)、ユーザーフレンドリーなカスタムアニメーションを実行するか、ユーザーの注意を払わずに、失敗した試行を繰り返します。特に、ユーザーが明示的にネットワークコールを開始しなかった場合。

ドキュメントへのリンクについてmartinezdelarivaに関して。


それはクラスメソッドかもしれません!
ilnar_al 2014

2

上記に記載されていない新しいエラーコードを見つけました: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."

forums.developer.apple.com/thread/5835 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
ラクシュミ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.