[Swift][初心者向け]とにかく春からSwiftを触ってみたい新卒にオススメしたい簡単なwebViewアプリ


## 出来るようになること
 - Xcodeの使い方がざっくりと分かるようになる
 - Swiftの書き方がざっくりと分かるようになる
 - webViewを使ったプロジェクトの作り方がざっくりと分かるようになる
 - twitterやfacebookといったSNSへの投稿機能の実装方法がざっくりと分かるようになる



## 本テキストの裏の目的
 - Web業界に入ったばかりの新卒君にSwiftがどうやって動くのかを座学ではなく、手を動かしながら覚えてもらいたい
 - Web業界に入ったばかりの新卒君に自分で作れるようになる感覚を見たり聞いたりするのではなく、体験して欲しい

## 本テキストで叶えたい一番の裏の目的
 - Web業界に入ったばかりの新卒君にちょっとでもエンジニアがどんなことをしているのか、アプリが出来るまでの手順やどんなツールが使われるかなどを知るきっかけにして欲しい。



## 注意
 - そのコードが何をしているのかを理解してもらうために、写経をベースにしています。コピペは厳禁でお願いします！


## Xcodeの各部名称
<b>イメージ図</b>
![20130225020153.png](https://qiita-image-store.s3.amazonaws.com/0/15812/6b7320f9-beb4-f161-e642-e5c40ebd6bcf.png)


1.ツールバー<br>
2.ナビゲーションエリア<br>
3.ジャンプバー<br>
4.インスペクタセレクトバー<br>
5.ナビゲーションエリア<br>
6.エディタエリア<br>
7.インスペクタペイン<br>
8.フィルターバー<br>
9.デバッグバー<br>
10.ライブラリセレクトバー<br>
11.デバッグエリア<br>
12.ライブラリペイン<br>
<br>


<b>イメージ図</b>
![スクリーンショット 2014-11-12 17.24.59.png](https://qiita-image-store.s3.amazonaws.com/0/15812/2e036bae-ee3b-a416-f8c3-0a25fc3a7f87.png)

この中でも主にFileタブ、Productタブを今回利用します。



### 詳細は以下のリンクで確認しましょう。


[Xcodeの使い方](http://nanananande.helpfulness.jp/post-1219/)

<br>


## STEP１の完成イメージ

![swift_2.gif](https://qiita-image-store.s3.amazonaws.com/0/15812/a06135aa-1dcb-167e-49ec-d99ed4cffbe5.gif)


## 1・新規ProjectをSingleViewで作成します。

ここではwebViewSampleというプロジェクト名で作成しています。

![スクリーンショット 2014-08-19 0.09.13.png](https://qiita-image-store.s3.amazonaws.com/0/15812/e1d847b5-91d9-b109-b9d1-595f86addbdb.png)


![スクリーンショット 2014-08-19 0.09.46.png](https://qiita-image-store.s3.amazonaws.com/0/15812/133215d6-8b8d-9cc3-5f76-654b7df6d0d4.png)


![スクリーンショット 2014-08-19 0.10.16.png](https://qiita-image-store.s3.amazonaws.com/0/15812/d747d6bc-03d0-6d6b-d14c-54b803bf50d8.png)


## ２・Main.storyboardを選択します。そしてユーティリティエリアからwebviewを選び、viewControllerへwebviewを貼付けます。最後にauto layautoを設定します。

![スクリーンショット 2014-08-19 0.11.03.png](https://qiita-image-store.s3.amazonaws.com/0/15812/a6e585a1-2c7e-cc9f-4fe7-fdce62414ada.png)

次に画面表示の最適化を行うためにauto layautoを設定していきます。
画面にぴったり合わせます。
そしてMain.storyboardの右下の「△」を押し、「Add Missing Constraints」を押して、
設定していきます。

![スクリーンショット 2014-10-29 20.53.04.png](https://qiita-image-store.s3.amazonaws.com/0/15812/68735839-f81f-9939-7543-f7d10402be38.png)

![スクリーンショット 2014-10-29 20.53.25.png](https://qiita-image-store.s3.amazonaws.com/0/15812/d32eacb4-f11e-1a29-5941-db4a34c58a34.png)


## ３・貼付けたwebviewに対してcontrolキー ＋ ジェスチャーを使い、delgateを追加します。

![スクリーンショット 2014-08-19 0.11.37.png](https://qiita-image-store.s3.amazonaws.com/0/15812/7e4ea95b-bb50-5f6e-dcc5-94d070d4714a.png)

## ４・webViewからCtrlを押しっぱなしでViewController.swiftにドラッグして、アウトレットを追加します。
ここではwebViewという名前で設定しています。

![スクリーンショット 2014-08-19 0.12.29.png](https://qiita-image-store.s3.amazonaws.com/0/15812/f5c3cbbc-9258-8192-f351-01eba9ded2fe.png)


## ５・view Controllerを以下のように修正します。

```swift
//
//  ViewController.swift
//  webViewSample
//
//  Created by g08m11 on 2014/08/19.
//  Copyright (c) 2014年 Bloc. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

  @IBOutlet var webView: UIWebView!

  // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ この部分を写経
  //表示したいURLを設定(初期化)
  var targetURL = "http://rakutenqute.herokuapp.com/"
  // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑　この部分を写経

  override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ この部分を写経
    // webViewを表示するためのメソッド呼び出し
    loadAddressURL()
    // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑　この部分を写経

  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }

  // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ この部分を写経
  func loadAddressURL(){

    // 初期化済みのURLを読み込む
    let requestURL = NSURL(string: targetURL)

    // 読み込んだURLの実行結果を取得する
    let req = NSURLRequest(URL:requestURL!)

    // webvieにデータをロードする
    webView.loadRequest(req)
    webView.scalesPageToFit = true

  }
  // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑　この部分を写経

}

```
## ６・バグがないかチェックしましょう。
commandキー + Bを押してみましょう。
バグが無ければ以下の画像が表示されます。

![スクリーンショット 2014-11-11 21.09.17.png](https://qiita-image-store.s3.amazonaws.com/0/15812/05c948c7-c658-d597-9999-137416a29123.png)

ただ、エラーがあった場合は以下の画像が表示されます。

![スクリーンショット 2014-11-11 21.12.46.png](https://qiita-image-store.s3.amazonaws.com/0/15812/97504c02-255e-020e-2320-597de62f6e66.png)

バグが無い状態を確認した後、
commandキー + Rを押しみましょう。
自動的にiPhoneシュミレーターが起動されます。


## ７・指定したURLが表示されれば成功

白い画面が数秒表示されますが、慌てずに待ちましょう。


![スクリーンショット 2014-08-29 0.29.06.png](https://qiita-image-store.s3.amazonaws.com/0/15812/ceb92b55-e8a6-8ad7-db87-f9f8cb26cde5.png)


<br>
### 備考
使用しているwebアプリは私、[g08m11](http://qiita.com/g08m11)が作った[Rakuten Qute!](http://rakutenqute.herokuapp.com/)という楽天のAPIを利用したwebアプリです。

[Rakuten Qute!](http://rakutenqute.herokuapp.com/)

<br>
<br>

##!!白い画面のままならこちらの対応をお願いします!!

APIを使っているため敢えて非推奨でありながらこちらの対策を取っています。ご了承ください。

## 1.info.plistを右クリックし、「Show in Finder」を選択します。

![スクリーンショット 2015-11-16 23.30.47.png](https://qiita-image-store.s3.amazonaws.com/0/15812/6517ed37-8840-0fa2-1634-25bc3eb7ac73.png "スクリーンショット 2015-11-16 23.30.47.png")

info.plistが配置されている場所へ移動出来ていることを確認しましょう。

![スクリーンショット 2015-11-16 23.31.28.png](https://qiita-image-store.s3.amazonaws.com/0/15812/7d8ffcd6-4d24-c618-f8d1-ce8dc07a5a6e.png "スクリーンショット 2015-11-16 23.31.28.png")

## 2.移動された場所のinfo.plistに対して右クリックをし、ファイルの内部を表示します。

Xcodeで開いた場合、表示内容がことなるため、別のアプリケーションで開く必要があります。
まず、「その他」を選択します。

![スクリーンショット 2015-11-16 23.33.58.png](https://qiita-image-store.s3.amazonaws.com/0/15812/d636f511-b101-6ac9-0766-3980ae4dd666.png "スクリーンショット 2015-11-16 23.33.58.png")


その中から「テキストエディタ」を選びます。
(こちらはsublime textやCotEditorなどで開いても構いません。)

![スクリーンショット 2015-11-16 23.36.36.png](https://qiita-image-store.s3.amazonaws.com/0/15812/76066070-9cac-59d5-1dee-0e451ca8183c.png "スクリーンショット 2015-11-16 23.36.36.png")


## 3.開いたinfo.plistを更新する。
*RakutenQute!は特別なサイトのため、どのドメインでも対応出来るような設定を行っています。


以下のソースコードを「info.plist」の

```
</dict>
</plist>

```
の前に貼り付けます。


```
	<key>NSAppTransportSecurity</key>
	<dict>
    	<key>NSAllowsArbitraryLoads</key>
    	<true/>
	</dict>

```

そしてcommandキー + S　で上書き更新をします。

## 4.Xcodeに戻って問題が発生しないか確認します。

info.plistの更新内容に誤りがないかcommand + Bを実行しエラーがないか確認します。

問題が無ければ以下の内容が表示されます。

![スクリーンショット 2015-11-16 23.39.21.png](https://qiita-image-store.s3.amazonaws.com/0/15812/4895c480-3cec-b4e2-ee8b-5d810233be05.png "スクリーンショット 2015-11-16 23.39.21.png")




## STEP２の完成イメージ
(こちらはステップ１が前提となっています。)

![sample.gif](https://qiita-image-store.s3.amazonaws.com/0/15812/127d94d4-efb3-c65b-0cfb-a5a267479dd8.gif "sample.gif")



## 1・「webViewSample」プロジェクトを開きます。


## ２・view Controllerを以下のように修正します。

```swift
//
//  ViewController.swift
//  webViewSample
//
//  Created by g08m11 on 2014/08/19.
//  Copyright (c) 2014年 Bloc. All rights reserved.
//

import UIKit
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ この部分を写経
// twitterなどのSocialへ投稿する際に必要な機能を外部から読み込むための初期化
import Social
// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑　この部分を写経


class ViewController: UIViewController {
  
  @IBOutlet var webView: UIWebView!
  
  //表示したいURLを設定(初期化)
  var targetURL = "http://rakutenqute.herokuapp.com/"
  
  // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ この部分を写経
  // twitter投稿画面を生成するための初期化
  var myComposeView : SLComposeViewController!
  // twitter用のボタンを生成するための初期化
  var myTwitterButton: UIButton!
  // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑　この部分を写経
  
  override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    
    // webViewを表示するためのメソッド呼び出し
    loadAddressURL()
    
    // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ この部分を写経
    // twitterに似た色合いをコードで生成するための設定。色味のみの設定
    let hex: Int = 0x55ACEE
    let red = Double((hex & 0xFF0000) >> 16) / 255.0
    let green = Double((hex & 0xFF00) >> 8) / 255.0
    let blue = Double((hex & 0xFF)) / 255.0
    var myColor: UIColor = UIColor( red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha: CGFloat(1.0))
    // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑　この部分を写経
    
    
    // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ この部分を写経
    // twitter用のボタンを設定。ボタンを押された後にtwitter投稿用のメソッド呼び出しまで設定
    myTwitterButton = UIButton()
    myTwitterButton.frame = CGRectMake(0,0,100,100)
    myTwitterButton.backgroundColor = myColor
    myTwitterButton.layer.masksToBounds = true
    myTwitterButton.setTitle("Twitter", forState: UIControlState.Normal)
    myTwitterButton.titleLabel?.font = UIFont.systemFontOfSize(CGFloat(30))
    myTwitterButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
    myTwitterButton.layer.cornerRadius = 50.0
    myTwitterButton.layer.position = CGPoint(x: self.view.frame.width - 55, y:self.view.frame.height - 115)
    myTwitterButton.tag = 1
    myTwitterButton.addTarget(self, action: "onPostToTwitter:", forControlEvents: .TouchUpInside)
    // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑　この部分を写経
    
    // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ この部分を写経
    // twitter用のボタンを画面に表示させるための設定
    self.view.addSubview(myTwitterButton)
    // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑　この部分を写経
    
  }
  
  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }
  
  func loadAddressURL(){
    
    // 初期化済みのURLを読み込む
    let requestURL = NSURL(string: targetURL)
    
    // 読み込んだURLの実行結果を取得する
    let req = NSURLRequest(URL:requestURL!)
    
    // webvieにデータをロードする
    webView.loadRequest(req)
    webView.scalesPageToFit = true
    
  }
  
  // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ この部分を写経
  func onPostToTwitter(sender : AnyObject) {
    myComposeView = SLComposeViewController(forServiceType: SLServiceTypeTwitter)
    myComposeView.setInitialText("アプリ開発中！  #Swift")
    self.presentViewController(myComposeView, animated: true, completion: nil)
  }
  // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑　この部分を写経
  
}
```

## ３・twitterのボタンが表示されれば成功
動作にも問題が無いかtwitterボタンを押してみましょう。


![スクリーンショット 2014-11-08 12.28.44.png](https://qiita-image-store.s3.amazonaws.com/0/15812/6e2035b4-cba7-a97c-e380-19cb7ed9f293.png)




## おまけ
余裕がある方はここまで頑張ってみましょう！
(基本はtwitterと同様です！)


![sample2.gif](https://qiita-image-store.s3.amazonaws.com/0/15812/7f34df19-0007-5f4a-9e1b-1cd0532fd72b.gif "sample2.gif")