使って創ってApp

ソフトウェアを使ったり作ったりするブログです

Webからデータをダウンロードする iOSアプリ開発

Web上のコンテンツをダウンロードする iOSアプリを作ってみましょう。NSURLSessionを利用します。Udemyの講座だと、Lecture 54 の内容です。

www.udemy.com

開発環境

完成予定

amazon のトップページをダウンロードして、コンソールに表示します。

f:id:hitxutokun:20151210182835p:plain

製作開始!

まずは新規プロジェクトを作成しましょう。テンプレートは Single View Application を選択し、プロジェクト名は Download Demo にしました。全てのコードを、ViewController.swift の viewDidLoad() メソッド内に書いていきます。

1. URL を作成

amazon の URL を持った NSURL クラスのインスタンスを作成します。

let url = NSURL(string: "https://amazon.co.jp")!

確実に URL は作成されるので、! をつけてアンラップしました。

2. URL からダウンロード

NSURLSession.sharedSession().dataTaskWithURL メソッドから返される値を使ってダウンロードを開始します。このメソッドを入力補完を使って dataTaskWithURL まで書いたら、最初の引数に url を入力。2つ目をダブルクリックしてクロージャを展開します。

f:id:hitxutokun:20151210190305p:plain

クロージャには、3つのオプショナル型の引数がありますね。このうち、NSData? と NSError? の nil チェックをします。引数には以下のように名前をつけました。

命名前命名後
NSData? data
NSURLRespons? res
NSError? error

code の部分に書いていきます。まずはエラーチェック

// エラーチェック
if let err = error {
  fatalError(err.localizedDescription)
}

次に 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 を実行するコードを書きます。

task.resume()

以上で完了です。シミュレータでアプリを実行すると、コンソールにダウンロードしたファイルがズラズラズラーっと表示されました。

http:// のサイトからダウンロード

amazon の URL は https:// で始まっていたので、問題なくダウンロードできました。しかし、http:// で始まる場合は、Info.plistを編集する必要があります。Apple はセキュリティが確保された通信の利用を推奨しているためです。

まず Info.plist を開いて、キーに "App Transport Security Settings" を追加します。作成されたキーは Dictionary 型になっているので、そこにキー "Allow Arbitrary Loads"  を追加します。その値を NO から YES に変更します。

f:id:hitxutokun:20151210213444g:plain

まとめ

  • ダウンロードには NSURLSession クラスを使う
  • http:// で始まるサイトは Info.plist を編集する必要がある

これで Web 上のコンテンツを取得できるようになりました。