iOS 8まで動いてたアプリが NSCocoaErrorDomain Code=256 を吐く件

Apple に審査に出したiOS アプリの一部が メタデータ却下済み ってリジェクトを食らったので調べてみた。

問題があったのは、Safariで 審査用のURLを開くと URLOpen 経由で NSData をダウンロードしてくる仕組み

NSError *error = nil;
NSData *`data = [NSData dataWithContentsOfURL:url options: NSDataReadingUnchaced error: &Error]

で、見て見ると、[data length] が 0になってて error としてNSCocoaErrorDomain Code=256が入っていた

どうやら、NSData で http:// からのダウンロードによるデータよみこみができなくなったのが原因らしい

ios - NSData dataWithContentsOfURL: not returning data for URL that shows in browser - Stack Overflow
ios - dataWithContentsOfURL returns NSCocoaErrorDomain Code=256 over cellular, but not wifi - Stack Overflow
この辺はちょっと違うかなと思ってたら

ios - Get HTML data from website in Objective-C - Parse HTML - Stack Overflow

Transport Security Settings -> Allow Arbitrary Loads set to Yes

おー、これだ!

App Transport Security Settings => ATSの設定を無効化する. - Qiita

ATSが分からない人用に…
[iOS 9] iOS 9 で追加された App Transport Security の概要 | Developers.IO

App Transport Security (以降、ATS と呼びます) は iOS 9.0 または OS X 10.11 以上で有効な機能であり、アプリとウェブサービスとの間のセキュアな接続のために利用できます。

ATS が有効の場合、HTTP での通信はできません。また、Apple が推奨する必要条件を満たさない接続は強制的に接続失敗扱いになります。例えば、Apple 推奨の要件を満たさない Web ページを WKWebView で開こうとした場合、ページのロードは失敗します。その時の NSError の内容は以下のようになります。

Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={_WKRecoveryAttempterErrorKey=, NSErrorFailingURLStringKey=http://www.hoge.jp/, NSErrorFailingURLKey=http://www.hoge.jp/, NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.}

ちょっとメッセージ違うけど、ATS 許可にしたら動くようになった(ノ・ω・)ノ

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です