Reality Keysと連携するiOSアプリをつくる 第1回
はじめに
前回までBY MY COIN(以降BMC)の実装を調べました。BMCは美しく、レスポンシブルなデザインでスマホ画面にも最適化されています。これをモバイルアプリ化したら使い勝手が向上するかもしれません。
今回からモバイルアプリ化について考えてみます。
目次
- 必要な機能
- 計画
- 方針
- ウォークスルー実装
- Seed作成、表示実装
必要な機能
必要になりそうな機能を思いついた順に書きました。
- Seed作成
- 契約セットアップ
- claim
- 契約一覧
- 契約詳細、進捗
- 残高、unspentトランザクション取得
- ソーシャル連携
- RunKeeper連携、RK連携
計画
以下のくくりに分けて実装を行う予定です。
- 初期設定(チュートリアル、RunKeeper連携、Seed作成)
- 契約セットアップ
- 契約情報参照
- 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(' ')); })();
こんな感じ
まとめ
今後、ネイティブとWEBView間の連携が面倒かもしれませんが、BMCのJavascriptをswiftに直すのもそれはそれで大変かもしれません。少しずつやっていきます。(1ヶ月ぐらいでなんとか作りたいですが、興味が他に移る可能性あります..)
参考
WatchKit Tutorial with Swift: Getting Started
JavaScriptプログラマがSwift iOSアプリを2週間で作って公開してみた〜その1 Overview〜