これは Swift iOS アプリ (XCode 6.1.1 に組み込まれています) であり、Kardia.io エコシステムをテストしている開発者向けの例として提供されています。現在、RedBearLabs Web サイトが推奨するファームウェアがロードされている RedBearLabs Blend Micro ユニットに接続してデータを読み取るためにハードコードされています。これらのユニットは、実際の ECG トレースをシミュレートする模擬データを出力するようにプログラムされました。このアプリは電話をデバイスに接続し、送信されるデータを Kardia.io のサーバー (node.js および python) に中継します。また、アプリはサーバーから返される分析をリッスンして表示します。
リポジトリのクローンを作成し、XCode で開きます。アプリを携帯電話にロードします。アプリは、適切なサービスと特性 UUID (下記を参照) を使用して近くの BLE ユニットに自動的に接続し、kardia.io へのデータのストリーミングを開始します。分析されたデータはリアルタイムでアプリに返されます。異常なイベント (不整脈) は、左または右にスワイプすることでアクセスできるテーブル ビューに記録されます。これらのイベントは、左に引くと削除できます。
アプリは、Arduino によって発行されるデータに対応する特性 UUID 713D0002-503E-4C75-BA94-3148F18D941E を含むサービス UUID 713D0000-503E-4C75-BA94-3148F18D941E を検索します。これらの値は、RedBearLabs Web サイトにリンクされている Blend Micro のファームウェアで定義されています。
アプリが BLE デバイスに接続すると (簡単な説明については以下を参照)、ハードウェアのデータ特性のステータスの変化に対してリスナーを登録します。このデータは浮動小数点数として解釈され、2 つのコールバック関数に渡されます。グラフでレンダリングするために、それを最近のデータ ポイントのバッファーに追加します。もう 1 つはソケット イベントとして発行します。これは、ハードウェアから受信した値とソケット イベントが発行された ISO8601 時間にそれぞれ対応するキー「振幅」と「時間」を持つ JSON オブジェクトとして発行されます。
アプリはサーバーからの応答もリッスンします。これは、「heartRate」 (自明のとおり) キーと「statusCode」キーを持つ JSON オブジェクトです。ステータス コードは ViewController.swift で定義された辞書で検索され、statusView としてメイン ビューに変換されます。
ここでは、Objective-C ライブラリ Socket Rocket をラップする SocketIOClient ライブラリを使用します。次のイベントが使用されます。
Swift-Linechart ライブラリを使用してライブ ECG トレースをレンダリングします。これは私たちのニーズを完全には満たしていなかったため、次のように変更しました。
アプリが新しい異常を登録すると、それを不整脈タイムズ グローバルに記録します。これは、テーブル ビューのデータ ソースとして機能します。この場合の「新鮮」とは、サーバーによって報告されているステータスが異常なイベント (この場合は不整脈) に変化した場合にのみイベントが記録されることを意味し、繰り返される不整脈イベントがすべて記録されるわけではありません。
このリポジトリの問題セクションを参照してください。
これは、Swift を使用して BLE デバイスを iOS デバイスに接続するための優れたチュートリアルです。簡単に言うと、アプリは特定のサービス UUID をアドバタイズしている Bluetooth 周辺機器の検索を開始します。見つかった場合は、接続して特定の特性 UUID を探します。それが見つかると、そのデータのリスニングが開始されます。
ビューを更新する必要がある場合は、そのコードをメイン (UI) スレッドで実行する必要があります。このため、次のようなコード ブロックが表示されます。
dispatch_async(dispatch_get_main_queue()) {
// UI-updating code goes here
}
イベントは NSNotificationCenter によって処理されます。リスナーの登録とイベントの発生は非常に一目瞭然です。 Swift : Javascript による用語の簡単な翻訳は次のとおりです。
例:
foo.on('bar', doAThing)
になる
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("doAThing"), name: "bar", object: nil)
関数は、パラメーターが異なる限り、同じ名前を持つことができます。これはプロトコルでよく起こります。
ビューは、Main.storyboard 内で作成するか、コード内でプログラム的に作成して制約することができます。このアプリはこの 2 つを組み合わせて使用します。メイン ビューはすべて後者のスタイルで実行されますが、テーブル ビューは前者を使用します。