Storyboardを使用せずに、SpriteKitを使用したゲームを作成する

AppleはStoryboardの使用を推奨（Xcode6からEmpty Applicationテンプレートを削除）しているようですが、どうも仕様がブラックボックス化されている気がするので、削除してアプリを作成してみます。

類似記事：[Gameテンプレートを使用せず、横向きゲームアプリを作成する](http://qiita.com/moco3/private/6f262bc3b6763d6d9137)

## SingleViewApplicationからStoryboardを削除する
Empty Applicationテンプレートがないので、Single View Applicatinでプロジェクトを立ち上げます
![template.png](https://qiita-image-store.s3.amazonaws.com/0/70446/197d3f39-268b-64ae-9ce5-b36cc7b23373.png)

Main.storyboardを削除（右クリック - Delete）し、Development InfoのMain Interfaceを空白にします（Mainを削除）
 
![developmentinfo.png](https://qiita-image-store.s3.amazonaws.com/0/70446/38288d1b-e05d-d89e-c6db-5836bdc954d8.png)

## AppDelegate、ViewControllerの修正
初回起動時に呼ばれるAppDelegateのapplicationメソッドで、ViewControllerを生成し、rootViewに設定します

```Swift:AppDelegate.swift
import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var window: UIWindow?
    
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        window = UIWindow(frame: UIScreen.mainScreen().bounds)
        if let window = window{
            window.backgroundColor = UIColor.whiteColor()
            window.rootViewController = ViewController()
            window.makeKeyAndVisible()
        }
        return true
    }
    
```

続いて、ViewControllerでSKViewを生成します。ここでハマりました。
今まではStoryboardで、SKViewクラスを設定していましたが、それをどのように定義してよいかがわからなかったからです。

結論から言うと、viewDidLoadメソッドよりも先に呼ばれるloadviewメソッドをオーバライドして、self.viewをSKViewに差し替えてやると良いようです。
[iOS Developer Library：UIKit Framework Reference   UIViewController Class Reference](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/index.html#//apple_ref/occ/instm/UIViewController/loadView)

```Swift:ViewController.swift
import UIKit
import SpriteKit

class ViewController: UIViewController {
    //var skView: SKView!
    var viewInitiated: Bool = false
    
    override func loadView() {
        let skView = SKView()
        self.view = skView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    override func viewWillLayoutSubviews() {
        if(!viewInitiated){
            super.viewWillLayoutSubviews()
            var skView = self.view as SKView
            skView.showsFPS = true
            
            skView.showsNodeCount = true
            let scene = GameScene(size: skView.bounds.size)
            
            skView.presentScene(scene)
            self.viewInitiated = true
        }
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
    }
}
```

```swift:GameScene.swift
import SpriteKit

class GameScene: SKScene {
    var initiated: Bool = false

    override func didMoveToView(view: SKView) {
        if(!initiated){
            self.initContent()
            self.initiated = true
        }
    }
    func initContent(){
        self.backgroundColor = UIColor.redColor()
    }
}
```

これで真っ赤な背景を表示することができました。

![iphone.png](https://qiita-image-store.s3.amazonaws.com/0/70446/ae20db6c-b5d2-5b16-4f8a-20d5e090cd6d.png)

## 参考
[How do I create a new Swift project without using Storyboards?](http://stackoverflow.com/questions/24046898/how-do-i-create-a-new-swift-project-without-using-storyboards)
[さよならテンプレート](http://spritekit.jp/tutorial/scratch/)