小さなバグ:CFNetwork内部エラー:URLConnectionLoader.cpp:304または289



Small Bug Cfnetwork Internal Error



突然、空が薄暗くなります...
プロジェクトに登場
31483: CFNetwork internal error (0xc01a:/BuildRoot/Library/Caches/com.apple.xbs/Sources/CFNetwork_Sim/CFNetwork-808.2.16/Loading/URLConnectionLoader.cpp:304)

1717878-7794586bda69015c.pngimage.png

エラーが表示されるということは、ネットワークがリソースエラーへのリンクを要求していることを意味します。私は2つのことを言いたい:



1.このような多くの警告、このコードはプロジェクトの通常の操作には影響しませんが、クラッシュの問題ではなく、何もないように見えますが、実際の卵が痛いです...しかし、乙女座がこれらのことを見て目の前、本当に見苦しい、我慢できない…
2.この種の問題は通常、正式な環境では発生せず、テスト環境などでのみ発生します。結局のところ、製品に関係なく、公式環境サーバー上のリソースは間違いなく最も完全です。 。

それからそれを解決し、それをオンラインでチェックしてください、問題の解決策はこれを言うことです:これとAFNetWorking3.x関連。次の解決策を作成できます。



info.plistを変更します
AppTransportのセキュリティ設定の下にNSExceptionDomainsが追加されました
NSExceptionRequiresForwardSecrecy:いいえ
NSIncludesSubdomains:はい
NSExceptionAllowInsecureHTTPLoads:はい

1717878-ed7f6ad4da88fbee.pngimage.png

しかし、このように対処しようとすると...何もしませんでした。慎重な検索とトラブルシューティングは、AFNetworkの問題ではないことが判明し、SDWebImageの使用によって引き起こされた問題です。これらのエラーはすべて、対応するリンクのSDWebImageです。画像のURLリソースを使用すると、に対応する応答がありません。対応するサーバー上の画像リソース。

URLパスリンクの画像リソースが存在しない場合、エラー警告CFNetwork内部エラーが表示され、サーバーとのリンクが中断され、画像リクエストはサーバーからのデータを要求できません。
無効なSSL証明書または自己作成(自己署名)証明書とSDWebImageを使用する場合、SDWebImageでオプション「SDWebImageAllowInvalidSSLCertificates」を使用してhttpイメージ(httpsイメージではない)を取得します。プロトコル(httpまたはhttps)はSDWebImageによって自動的に認識されます。このエラーが発生します。ただし、cer証明書が有効であれば、SDWebImageは正常に機能すると思います。



解決

1.自己パッケージ化XXWebImageManager画像リクエストメソッドを変更するラッパーラッパークラスで、画像のリクエストモードSDWebImageOptions 2つの異なる処理方法に設定します。

1.1要求プロトコルヘッダーはhttp契約、SDWebImageOptions設定SDWebImageRetryFailed(0に相当するか、デフォルトでは書き込まれません)

1.2リクエストプロトコルヘッダーはhttps契約、SDWebImageOptions設定SDWebImageAllowInvalidSSLCertificates、https証明書が自己署名されているか無効であるため、イメージのロード時にSSL証明書の検証をキャンセルします(SD公式このモードについてのコメント:
/ **信頼できないSSL証明書を許可できるようにします。テスト目的に役立ちます。 生産には注意して使用してください。 /
SDWebImageAllowInvalidSSLCertificates = 1<< 7)

2.自己カプセル化XXWebImageManagerクラスでは、次を使用して画像要求メソッドが変更されます:sd_setImageWithURL: placeholderImage: completed:それを置き換えるにはsd_setImageWithURL: placeholderImage:メソッド、completedコールバックUIImage *image画像をロードするかどうかを決定するために空であるかどうか。

しかし、この方法では十分ではありませんAlthough the CFNetwork error still occurs, but the connection will not break any more. CFNetworkエラーは引き続き表示されますが、リンク要求はすぐには中断されません。したがって、モード1の方が優れています。

at SDWebImageプロセスの開始時にラッパーまたはマネージャーのレイヤーをラップしない場合、それを処理するのにもう少し手間がかかります。それから、これから、カプセル化のレイヤーを実行します。画像リクエスト!結局のところ!SDWebImageこれはプロジェクトの下部にある3者間フレームワークです。最上層は、後で置き換えられるように、カスタムカプセル化された画像フレームワークであることが望ましいです。SDWebImage for YYWebImage他のフレームワークを待つときは、ラッパークラスを処理するだけでよく、N個のビジネスクラスを処理する必要はありません。

一般的に、すべてのサードパーティフレームワークリソースは、通常、トップレベルの処理サービスを提供するためにラッパーのレイヤーをカプセル化する必要があります。この小さなアーキテクチャのアイデアは、将来の多くの開発作業を容易にします。

何か問題があれば、みんなで私を正して一緒に進んでください。

参照リンク: https://stackoverflow.com/questions/42036246/cfnetwork-internal-error-urlconnectionloader-cpp304