swiftでhttp通信とか自習メモ

* Xcode7.0.1, iOS9.0.2で確認

## 書式

* [The Swift Programming Language (Swift 2): The Basics](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309)

## NSURLを生成してSafari起動

* [[Swift] NSURLを生成してSafari起動　Advent Calendar 俺 2日目 - Qiita](http://qiita.com/senseiswift/items/70825c8dd4b8dd9d73f9)
* [SwiftでURLエンコードする - Qiita](http://qiita.com/yukihamada/items/9c0cc2e2074d5cc0d368)

![スクリーンショット 2015-10-03 14.11.12.png](https://qiita-image-store.s3.amazonaws.com/0/25728/1b65f934-c6d8-1804-f535-1185eef23c01.png)

```swift:DataViewController.swift
import UIKit
class DataViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.openSafari()
    }
    func openSafari() {
        let url : NSString = "http://api.tiqav.com/search/random.json"
        let urlStr : NSString = url.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!
        let searchURL : NSURL = NSURL(string: urlStr as String)!
        // ブラウザ起動
        if UIApplication.sharedApplication().canOpenURL(searchURL){
            UIApplication.sharedApplication().openURL(searchURL)
        }
    }
}
```

----

## 非SSL/TLSサイトのデータが取得できない

* [XCode7(iOS9)にして最初に出たエラーと対策方法とか - Qiita](http://qiita.com/shoya/items/cca9731a73ac1038aaa0)

> App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

![スクリーンショット 2015-10-03 14.30.39.png](https://qiita-image-store.s3.amazonaws.com/0/25728/340b2b63-90e2-79aa-d74b-82c5d5acc864.png)

* api.tiqav.comへのhttpを許可するには以下のように記述

```xml:Info.plist
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>api.tiqav.com</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>
```

----

## GET HTTP Request (非同期)

* [iOS - NSURLSession経由でHTTP requestを投げるサンプルコード Swift版 - Qiita](http://qiita.com/nyamage/items/48d5ee30869daaf70f7f)

![スクリーンショット 2015-10-03 15.26.01.png](https://qiita-image-store.s3.amazonaws.com/0/25728/9d651e3f-90a6-605a-6597-7c83c955ee09.png)

```swift:DataViewController.swift
class DataViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.testGet()
    }
    func testGet() {
        let request: Request = Request()
        let url: NSURL = NSURL(string: "http://api.tiqav.com/search/random.json")!
        request.get(url)
    }
}
```

```swift:Request.swift
import Foundation

class Request {
    let session: NSURLSession = NSURLSession.sharedSession()
    
    // GET METHOD
    func get(url : NSURL) {
        let config = NSURLSessionConfiguration.defaultSessionConfiguration()
        let session = NSURLSession(configuration: config)
        let req = NSURLRequest(URL: url)
        
        let task = session.dataTaskWithRequest(req, completionHandler: {
            (data, resp, err) in
            print(resp!.URL!)
            print(NSString(data: data!, encoding: NSUTF8StringEncoding))
        })
        task.resume()
    }
}
```

----

# cocoapodsでAlamofireをインストール

* [Swift - 【iOS】cocoapodsのインストール方法 - Qiita](http://qiita.com/SoyaTakahashi/items/fdb0d87597eb276056d8)
* [Alamofireに関する14件の投稿 - Qiita](http://qiita.com/tags/alamofire)
* [Alamofire/Alamofire · GitHub](https://github.com/Alamofire/Alamofirea)

```bash:iOSプロジェクトに移動
sudo gem install bundler
cd ~/Documents/test1
```

```bash:
bundle init
```

```diff:Gemfile
  source "https://rubygems.org"
+ gem "cocoapods"
```

```bash:
bundle install --path=vendor/bundle
bundle exec pod setup
bundle exec pod init
```

```diff:Podfile
 # Uncomment this line to define a global platform for your project
 # platform :ios, '6.0'
+use_frameworks!
 
 target 'test1' do
+    pod 'Alamofire', '~> 2.0.2'
 end
 
 target 'test1Tests' do
 
 end
 
 target 'test1UITests' do
 
 end
```

* `pod 'Alamofire', '~> 2.0.2'`については、その時々のバージョンに合わせること。

```bash:Xcodeを終了してから実施
bundle exec pod install
open test1.xcworkspace
```

こんな感じの画面が表示される。ビルドしてエラーが出ないことを確認。

![スクリーンショット 2015-10-03 15.53.17.png](https://qiita-image-store.s3.amazonaws.com/0/25728/97a4780a-c6fd-5611-48d9-f291b5321c6f.png)

## 【iOS】SwiftでRailsと連携する方法 (追記中)

* [【iOS】SwiftでRailsと連携する方法 - Qiita](http://qiita.com/SoyaTakahashi/items/4a40aefdf13417b1857f#1-cocoapodsのインストール)を実践してみる。

![スクリーンショット 2015-10-03 15.56.31.png](https://qiita-image-store.s3.amazonaws.com/0/25728/e7cb8ff1-1a70-8739-1b1c-7cd5cfe3b625.png)
![スクリーンショット 2015-10-03 15.57.06.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c35f1fa1-7026-ac10-220a-6f6597deeb0c.png)

### storyboardにオブジェクトを設置

* Storyboardのデバイス画面サイズが大きいので、`Use Size Classes`のチェックを外しiPhoneサイズに変更。

![スクリーンショット 2015-10-03 16.24.52.png](https://qiita-image-store.s3.amazonaws.com/0/25728/e2c37047-d8e8-723d-c539-94075ebad904.png)

* View,Button,Label,TextViewをMain.storyboardのViewに設置

![スクリーンショット 2015-10-03 16.31.19.png](https://qiita-image-store.s3.amazonaws.com/0/25728/aede2c9c-45e7-40d9-08e3-cec6a5080cab.png)

### ソースとひも付け

* Text ViewをtextViewという名前でOutlet接続
* ButtonをtapSaveBtnという名前でAction接続

![76f0d9ce-aa0b-70c4-c110-cb543bdeee4a.png](https://qiita-image-store.s3.amazonaws.com/0/25728/e0793025-40c6-45fb-62cf-99e856bd1818.png)

続きは今度