2015-09-21 20 views
7

残念ながら今朝私のXCodeがバージョン7にアップデートされました.HTMLで開発していたiOSアプリケーションがhttpsを望んでいます。そこで、多くのチュートリアルに続いて、MAMPサーバーを設定してhttps/sslを使用してダミーの証明書を作成しました。 iOSアプリのURLは次のようになります。Swift/https:NSURLSession/NSURLConnection HTTP読み込みに失敗しました

static var webServerLoginURL = "https://localhost:443/excogitoweb/mobile/loginM.php" 
static var webServerGetUserTasks = "https://localhost:443/excogitoweb/mobile/handleTasks.php" 
static var webServerGetUsers = "https://localhost:443/excogitoweb/mobile/handleUsers.php" 
static var webServerGetProjects = "https://localhost:443/excogitoweb/mobile/handleProjects.php" 

これらのURLは、ブラウザでアクセスしようとすると問題なく動作します。 NSURLSession.sharedSession()。dataTaskWithRequest()を使用してデータベースとphpファイルにアクセスしましたが、これでtitleのエラーが発生しました。例えば、ここでエラーが発生したラインです。

if let responseJSON: [[String: String]] = (try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions())) as? [[String: String]] { 
... 
} 

が、これは完全なエラーメッセージです:

2015-09-21 16:41:48.354 ExcogitoWeb[75200:476213] CFNetwork SSLHandshake failed (-9824) 
2015-09-21 16:41:48.355 ExcogitoWeb[75200:476213] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824) 
fatal error: unexpectedly found nil while unwrapping an Optional value 

私はこの問題を解決する方法を知っていただきたいと思います。私はここでいくつかの有用な答えを読んだが、私はまだ理解していない多くのものがあり、誰かが助けてくれれば私は非常に感謝するだろう。

答えて

9

アプリのInfo.plist

<key>NSAppTransportSecurity</key> 
    <dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
    </dict> 
+2

これは安全ではありません。これをうまく使う:http://stackoverflow.com/a/32331282/1447641 – Apfelsaft

3
fatal error: unexpectedly found nil while unwrapping an Optional value 

は通常、あなたがあまりよくない何かをやっていることを意味し、あなたのif

if let responseJSON: [[String: String]] = (try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions())) as? [[String: String]] { 

を見て、私はdata!があることを見ることができますが、そのデータオブジェクトがnilです。特に、リモートデータを扱うときは、オプションを使用する前にオプションのラップを解除する必要があります。

は、その後、ネットワークエラーが、それはおそらくAppleがどのように 一時的に無効に ATS上の別の答えを参照してください

のiOS 9で追加ATSに関連しています持っています。 https://stackoverflow.com/a/30748166/421755

編集:ローカルホストにsslを追加したことが分かりました。しかし、TLS 1.2と自己署名証明書が必要なので、ATSが動作するには十分ではありません。

+0

はい、私は、そのエラーネットワークのためにデータがnilであると思います。あなたが言ったように無効にしようとします...私が理解しているのは、MAMP ssl/tlsを1.2にアップグレードする必要があるということです。それは今でも可能ですか?待つか? –

+1

あなたがコメントしたのと同時に、答えを編集しました。ローカルサーバーを使用するときに 'ATS'を無効にする方が簡単だと思います。あなたがアプリケーションを出荷するときに後で有効にすることを確認してください! – Simon

+0

私はちょうどTLS 1.2がOSX El Capitanで利用できるようになったことを読んだことがあります。私は試験のためにこのiOSアプリを開発しています。私は先生に経験の浅い人のように見えません...あなたのヒープのためにありがとう –

1

本当に古い質問にこれを追加し、私は、私は反応するだろうと思いました。これは、通常、httpオブジェクトをアンラップしようとしたときに起こります。

あなたのURLをアンラップして、デフォルト値を設定してください。

例:

let jsonURL = "your https link to your json" 
guard let url = URL(string: jsonURL) else { return } // dont force unwrap 

は、このことができます願っています!

関連する問題