Swiftで最新バージョンを確認してAppStoreに移動する方法

## 追記
だいぶコードが古いので、今だったらこちらの記事等を参考にされるといいと思います。
https://qiita.com/tommy19970714/items/4826a38917080743fde5

## 本文

Harpyがうまく使えなかったので今回は[Harpy](http://d.hatena.ne.jp/paraches/20130206)を使わずに実装します。
あとで載せてあるUserUtil.swiftをどっかに入れてください。
そしたら以下の簡単なコードだけで実装ができます。

```
if util.checkVersion() == Version.needUpdate {
        	util.openAppStore()
}
```

たとえばSampleViewControllerとかに実装するなら以下のような形になるかと。

```SampleViewController.swift
import UIKit

class SampleViewController: UIViewController{
    let     
    override func viewDidLoad() {
        super.viewDidLoad()
        if util.checkVersion() == Version.new {
        	util.openAppStore()
        }
    }
}

```


ぜひ使ってみてください。


```UserUtil.swift
import UIKit

var util = UserUtilLogic()
let APPLE_ID = "920856839" //自分のアプリのIDに変更して下さい。これは英単語アプリmikanのIDです。

enum Version {
    case needUpdate
    case same
    case oldVersion
    case noAppStoreResult
}

class UserUtilLogic: NSObject {
    override init() {
        super.init()
    }
    
    func checkVersion() -> Version {
        let url = "https://itunes.apple.com/jp/lookup?id=\(APPLE_ID)"
        let request = NSURLRequest(URL: NSURL(string: url)!, cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy, timeoutInterval: 60.0)
        var response:NSURLResponse?
        var error:NSErrorPointer
        if let data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil) {
            let dataDic: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(), error: nil)
            let resultsArray = dataDic?.objectForKey("results") as! NSArray
            if resultsArray.count > 0 {
                let results = resultsArray[0] as! NSDictionary
                let storeVersion = results.objectForKey("version") as! NSString
                let currentVersion = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
                println("latest version : \(storeVersion)")                
                if storeVersion.compare(currentVersion, options: NSStringCompareOptions.NumericSearch) == NSComparisonResult.OrderedDescending {
                    println("store version is newer!")
                    return Version.needUpdate
                } else if storeVersion.compare(currentVersion, options: NSStringCompareOptions.NumericSearch) == NSComparisonResult.OrderedSame{
                    println("store version is equal")
                    return Version.same
                } else {
                    println("store version is older")
                    return Version.oldVersion
                }
            }
        }
        return Version.noAppStoreResult
    }

    func openAppStore() {
        let urlString = "itms-apps://itunes.apple.com/app/id\(APPLE_ID)"
        let url = NSURL(string: urlString)
        UIApplication.sharedApplication().openURL(url!)
    }
}
```

あと、勝手にAppStoreに飛ぶとむかつくので、ぼくは自分で作ったUpdateViewというのをaddSubViewすることにしています。

```
if util.checkVersion() == Version.needUpdate {
	let updateView = UpdateView(frame: self.view.frame)
    self.view.addSubview(updateView)
}
```

![IMG_7528.jpg](https://qiita-image-store.s3.amazonaws.com/0/44151/301798bc-f529-e00a-9b96-88718d8be367.jpeg "IMG_7528.jpg")