Webからデータをダウンロードする iOSアプリ開発
Web上のコンテンツをダウンロードする iOSアプリを作ってみましょう。NSURLSessionを利用します。Udemyの講座だと、Lecture 54 の内容です。
開発環境
完成予定
amazon のトップページをダウンロードして、コンソールに表示します。
製作開始!
まずは新規プロジェクトを作成しましょう。テンプレートは Single View Application を選択し、プロジェクト名は Download Demo にしました。全てのコードを、ViewController.swift の viewDidLoad() メソッド内に書いていきます。
1. URL を作成
amazon の URL を持った NSURL クラスのインスタンスを作成します。
確実に URL は作成されるので、! をつけてアンラップしました。
2. URL からダウンロード
NSURLSession.sharedSession().dataTaskWithURL メソッドから返される値を使ってダウンロードを開始します。このメソッドを入力補完を使って dataTaskWithURL まで書いたら、最初の引数に url を入力。2つ目をダブルクリックしてクロージャを展開します。
クロージャには、3つのオプショナル型の引数がありますね。このうち、NSData? と NSError? の nil チェックをします。引数には以下のように名前をつけました。
命名前 | 命名後 |
---|---|
NSData? | data |
NSURLRespons? | res |
NSError? | error |
code の部分に書いていきます。まずはエラーチェック
次に data をチェック
guard let urlContent = data else {
print("I can't get data from url:\(url)")
return
}
最後に urlContent を NSString にして、コンソールに出力します
if let strUrlContent = NSString(data: urlContent, encoding: NSUTF8StringEncoding) {
print(strUrlContent)
}
これで表示の準備が整いました。task を実行します。クロージャの } の下に、task を実行するコードを書きます。
以上で完了です。シミュレータでアプリを実行すると、コンソールにダウンロードしたファイルがズラズラズラーっと表示されました。
http:// のサイトからダウンロード
amazon の URL は https:// で始まっていたので、問題なくダウンロードできました。しかし、http:// で始まる場合は、Info.plistを編集する必要があります。Apple はセキュリティが確保された通信の利用を推奨しているためです。
まず Info.plist を開いて、キーに "App Transport Security Settings" を追加します。作成されたキーは Dictionary 型になっているので、そこにキー "Allow Arbitrary Loads" を追加します。その値を NO から YES に変更します。
まとめ
- ダウンロードには NSURLSession クラスを使う
- http:// で始まるサイトは Info.plist を編集する必要がある
これで Web 上のコンテンツを取得できるようになりました。