iOS開発者のための手間いらずなOCAP統合

著者: Jonathan Lu (ArcBlock モバイルエンジニア)
前回のブログ記事では、OCAPサービスとそのPlaygroundについて学びました。GraphQLクエリを記述することで、Playgroundでブロックチェーンデータを深く掘り下げる方法をご存知かと思います。しばらく使ってみて、いくつかのインサイトが得られたら、それらのクエリを活用したモバイルアプリケーションを構築したくなるでしょう。それは可能でしょうか?
もちろん可能です!実際、ArcBlockはモバイルプラットフォームからOCAPを統合するための一連のツールを用意しています。この記事では、手間をかけずにOCAPと接続するために使用できるiOS SDKを紹介します。
例えば、最も裕福なビットコインアカウントのリストを表示するアプリを作りたいとしましょう。この記事の残りの部分では、当社のSDKを使用してそれを実現する方法を説明します。
SDKのインストール
最初のステップは、プロジェクトにSDKをインストールすることです。CocoaPodsまたはCarthage経由で行うことができます。
# Podfile
pod 'ArcBlockSDK', :git => 'https://github.com/ArcBlock/arcblock-ios-sdk.git'
pod 'Apollo', :git => 'https://github.com/ArcBlock/apollo-ios.git'# Cartfile
github "ArcBlock/arcblock-ios-sdk"Swiftコードの生成
しばらくPlaygroundに戻りましょう。
GraphQLの素晴らしい点の一つは、型安全性です。クエリとスキーマが確定すれば、実行前にクエリ引数と返されるデータの型がわかります。そのため、クエリをラップするSwiftクラスを生成するのに役立つcodegenツールを提供しています。SDKはこれらのクラスを使用し、コンパイル時にアプリの型安全性を強制します。
codegenツールはOCAP Playbookに直接統合されています。Playbook内で「コードを生成」ボタンを確認できます。言語としてSwiftを選択して生成すると、API.swiftファイルがローカルマシンにダウンロードされます。最後に、そのファイルをプロジェクトフォルダにドラッグするだけです。

こちらは、最も裕福なビットコインアカウントを照会するためのPlaybookの例です。
Xcodeファイルテンプレートのインストール
ArcBlockSDKは、新しいクラスを作成するためのXcodeファイルテンプレートをいくつか提供しています。これらをインストールするには、次のコマンドを実行します。
wget http://ios-docs.arcblock.io/Templates.tar.gz; \
tar -xvf Templates.tar.gz --strip-components=1 --directory ~/Library/Developer/Xcode/Templates/File\ Templates/; \
rm Templates.tar.gzABSDKClientの初期化
それでは、コードを書いていきましょう!
ABSDKClientは、クエリの送信、結果の解決、キャッシュの管理などを担当するGraphQLクライアントです。リクエストごとに1つのクライアントを作成することも、アプリ全体で1つを共有することもできます。
// in AppDelegate.swift
var arcblockClient: ABSDKClient!
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let databaseURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("ocap-demo-db")
do {
// initialize the AppSync client configuration configuration
let arcblockConfiguration = try ABSDKClientConfiguration(endpoint: .btc, databaseURL: databaseURL)
// initialize app sync client
arcblockClient = try ABSDKClient(configuration: arcblockConfiguration)
} catch {
print("Error initializing ABSDKClient. \(error)")
}
return true
}ViewControllerの作成
次に、ABSDKClientを使用してクエリを送信し、結果を表示しましょう。先ほどインストールしたファイルテンプレートを使用して、新しいViewControllerを作成します。


これで、ABSDKTableViewControllerとABSDKTableViewCellのサブクラスが作成されました。
ViewControllerの設定
次に、ViewControllerのいくつかのプロパティを設定する必要があります。
// in ViewController.swift
override func configDataSource() {
// config the parameters for initiating data source
let appDelegate = UIApplication.shared.delegate as! AppDelegate
client = appDelegate.arcblockClient
dataSourceMapper = { (data) in
return data.richestAccounts?.data
}
pageMapper = { (data) in
return (data.richestAccounts?.page)!
}
query = RichestAccountsQuery()
}上記のコードは、使用するクライアント、データフィールドを抽出するためのクロージャ、ページフィールドを抽出するためのクロージャ、および使用するクエリラッパークラスを指定しています。
セルへのデータ表示
次に、データフィールドをTableViewCellのUI要素に接続する必要があります。
// in AccountListCell.swift
override func updateView(data: RichestAccountsQuery.Data.RichestAccount.Datum) {
self.textLabel?.text = data.address
self.detailTextLabel?.text = "Balance: " + String(data.balance!)
}セルクラス用のXIBファイルも作成されるため、必要に応じてセルの外観をカスタマイズできます。
ビルドと実行
以上です!これでアプリをビルドして実行できます。

ご覧の通り、わずか数行のコードを書くだけで、SDKがネットワークリクエストの送信、結果の解決、キャッシュの保存、データバインディング、およびページネーションを処理します。
サンプルプロジェクトはこちらにあります。
最後に、ViewControllerをより詳細に制御したい場合(例えば、TableViewの代わりにCollectionViewを使用するなど)、またはデータやネットワークレベルでのみSDKを使用したい場合は、ドキュメントのData Binding、Client、およびClass Referenceを確認してください。
このページに関わるもの
製品
-
OCAP
active
チェーンごとにクライアントを用意するのではなく、一つのインターフェースでチェーン上のデータを問い合わせるためのプロトコル。ArcBlock が関連特許を保有しています。