読者です 読者をやめる 読者になる 読者になる

Reality Keysと連携するiOSアプリをつくる 第1回

f:id:yzono:20150211195659j:plain

はじめに

前回までBY MY COIN(以降BMC)の実装を調べました。BMCは美しく、レスポンシブルなデザインでスマホ画面にも最適化されています。これをモバイルアプリ化したら使い勝手が向上するかもしれません。

今回からモバイルアプリ化について考えてみます。

目次

  • 必要な機能
  • 計画
  • 方針
  • ウォークスルー実装
  • Seed作成、表示実装

必要な機能

必要になりそうな機能を思いついた順に書きました。

  • Seed作成
  • 契約セットアップ
  • claim
  • 契約一覧
  • 契約詳細、進捗
  • 残高、unspentトランザクション取得
  • ソーシャル連携
  • RunKeeper連携、RK連携

計画

以下のくくりに分けて実装を行う予定です。

  1. 初期設定(チュートリアル、RunKeeper連携、Seed作成)
  2. 契約セットアップ
  3. 契約情報参照
  4. claim

方針

まずは、BMCのJavascriptをそのまま使わせてもらって早めにVersion1をリリースする予定です。

そのうちソースは公開して、Appleが承認してくれない場合は、使いたい人がgithubから直接インストールする流れを考えています。

ウォークスルー実装

それでは、実装開始します。

ウォークスルーは、ariok/BWWalkthroughを使います。

@IBAction func showWalkthrough(){
    
    let stb = UIStoryboard(name: "Main", bundle: nil)
    let walkthrough = stb.instantiateViewControllerWithIdentifier("walk") as BWWalkthroughViewController
    let page_one = stb.instantiateViewControllerWithIdentifier("walk1") as UIViewController
    let page_two = stb.instantiateViewControllerWithIdentifier("walk2") as UIViewController
    
    walkthrough.delegate = self
    walkthrough.addViewController(page_one)
    walkthrough.addViewController(page_two)
    
    self.presentViewController(walkthrough, animated: true, completion: nil)
}

Seed作成、表示実装

Seedの作成、P2SHアドレス作成はBMCのJavascriptを使わせてもらいます。Bitcoin系のiOSライブラリはいくつかありますが、まだ未整備な部分もあるので、完全ネイティブ化はVersion2以降で対応予定です。

以下のコードでSeedを作成します。

ViewController.swift

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    
    let userDefaults = NSUserDefaults.standardUserDefaults()
    if !userDefaults.boolForKey("walkthroughPresented") {
        showWalkthrough()
        userDefaults.setBool(true, forKey: "walkthroughPresented")
        userDefaults.synchronize()
    } else {
        let path = NSBundle.mainBundle().pathForResource("index", ofType: "html")!
        let url = NSURL(string: path)!
        let urlRequest = NSURLRequest(URL: url)
        webView.loadRequest(urlRequest)
    }
}

index.html

<!DOCTYPE html>
<html lang="ja">

(省略)

    <script type="text/javascript" src="mnemonic.js"></script>
    <script type="text/javascript" src="main.js"></script>
  </body>
</html>

main.js

function addTextNode(text) {
  document.body.appendChild(document.createTextNode(text));
}

(function() {
  var mne = new Mnemonic(128);
  addTextNode(mne.toWords().join(' '));
})();

こんな感じ

f:id:yzono:20150211195523g:plain

まとめ

今後、ネイティブとWEBView間の連携が面倒かもしれませんが、BMCのJavascriptswiftに直すのもそれはそれで大変かもしれません。少しずつやっていきます。(1ヶ月ぐらいでなんとか作りたいですが、興味が他に移る可能性あります..)

参考

Swiftで作られたイケてるUIライブラリたち

WatchKit Tutorial with Swift: Getting Started

Swiftコーディング規約@Wantedly

DoubleSha/BitcoinSwift

voisine/breadwallet

SwiftでJavaScript

JavaScriptプログラマがSwift iOSアプリを2週間で作って公開してみた〜その1 Overview〜

iOSでガワネイティブ

SwiftでUiWebViewを使ってアプリ内ローカルHTMLを表示する。

Swiftで #pragma mark - を使う