# SDKの使い方 ## SDK及び依存ライブラリーをインポート プロジェクトにJvmaSDK.framework、ExternalAccessory.framework、 libc++.tbdを追加する必要があります。 ※「ExternalAccessory.framework」と「libc++.tbd」はiOS標準のライブラリであり、本SDKには含まれません。   ### JvmaSDK.frameworkをインポート JvmaSDK.frameworkファイルをプロジェクトのフォルダにコピーします。 ```{image} ./media/image2.png :width: 700px :alt: edit pubspec.yml ```   1)プロジェクト名を選択 2)TARGETSを選択 3)Build Phasesを選択 4)Link Binary With Librariesに「+」をタップ ```{image} ./media/image3.png :width: 700px :alt: edit pubspec.yml ``` 5)「Add Other…」にある「Add Files… 」を選択します。 ```{image} ./media/image4.png :width: 500px :alt: edit pubspec.yml ``` 6)プロジェクトフォルダにあるJvmaSDK.frameworkを選択、「Open」をタップします。 ```{image} ./media/image5.png :width: 700px :alt: edit pubspec.yml ``` 7)JvmaSDK.frameworkのインポートに成功 ```{image} ./media/image6.png :width: 700px :alt: edit pubspec.yml ```    ### 依存ライブラリーをインポート 1)プロジェクト名を選択 2)TARGETSを選択 3)Build Phasesを選択 4)Link Binary With Librariesに「+」をタップ ```{image} ./media/image3.png :width: 700px :alt: edit pubspec.yml ```   #### libc++.tbd をリンクする 1)検索枠に「libc++.tbd」を入力 2)libc++.tbdを選択 3)Addをタップ ```{image} ./media/image7.png :width: 700px :alt: edit pubspec.yml ``` 4)libc++.tbd のインポートに成功 ```{image} ./media/image8.png :width: 700px :alt: edit pubspec.yml ```   #### ExternalAccessory.framework のインポート 1)検索枠に「ExternalAccessory」を入力 2)ExternalAccessory.frameworkを選択 3)Addをタップ ```{image} ./media/image9.png :width: 700px :alt: edit pubspec.yml ``` 4)ExternalAccessory.framework のインポートに成功 ```{image} ./media/image10.png :width: 700px :alt: edit pubspec.yml ``` --- ## protocolを追加 AsReaderのASK通信デバイスと通信する為に、プロトコルの設定が必要です。 プロジェクトの.plistファイルの Supported external accessory protocolsに 「jp.co.asx.asreader.6dongle.ask」プロトコルを追加します。 ```{image} ./media/image12.png :width: 700px :alt: edit pubspec.yml ``` --- ## Bridging-Header.h の作成 この SDK は Objective-C で開発されているため、Swift で利用する場合は Bridging-Header.h ファイルを設定する必要があります。 ここではその手順を簡単に説明します。 ※ 詳細な手順については、Apple の開発ドキュメントをご参照ください。   ### ファイルの作成 プロジェクトを選択し、「New File」をタップします。 ```{image} ./media/image13.png :width: 500px :alt: edit pubspec.yml ``` ポップアップしたウィインドウに「Header File」を選択します。 ```{image} ./media/image14.png :width: 700px :alt: edit pubspec.yml ``` 「Next」をタップし、ブリッジングファイルの名前を入力します。 「プロジェクト名-Bridging-Header.h」と入力後、「Create」をタップすると、ブリッジングファイルが生成されます。 ```{image} ./media/image15.png :width: 700px :alt: edit pubspec.yml ``` プロジェクトに生成したブリッジングファイルは下図の通りです。 ```{image} ./media/image16.png :width: 500px :alt: edit pubspec.yml ```    ### ブリッジングファイルの設定 TARGETS -\>Build Settings-\>「bridging」で検索します。 ```{image} ./media/image17.png :width: 700px :alt: edit pubspec.yml ``` 「Objective-C Bridging Header」にブリッジングファイルのパスを追加します。 (下図はサンプルプロジェクトを例にしています。)) ```{image} ./media/image18.png :width: 700px :alt: edit pubspec.yml ```    ### ブリッジングファイルを使う ブリッジングファイルでSDKファイルを引用します。 ```swift #import ``` ```{image} ./media/image19.png :width: 700px :alt: edit pubspec.yml ``` --- ## プロジェクトでSDKを使う SDKは主に2つの部分に分かれています。 1つ目は、AsReaderとの通信を行う「[**AsReaderAsk**](AsReaderAsk_index.rst)」クラス。 2つ目は、JVMAプロトコルを含む「[**JvmaSDK**](JvmaSDK_index.rst)」クラスです。   ### AsReaderAsKオブジェクトを作成する ```swift let ask: AsReaderAsk = AsReaderAsk.shared() ```   ### JvmaSDKオブジェクトを作成する 「JvmaSDK」オブジェクトを作成するには、「AsReaderAsk」オブジェクトをパラメーターとして渡す必要があります。 ```swift let sdk: JvmaSDK = JvmaSDK(asReaderAsk: ask) ```   ### statusDelegateのデリゲートの設定 ```swift ask.statusDelegate = self ```   ### statusDelegateのデリゲートメソッドを実装 ```swift extension ViewController: AsReaderAskStatusDelegate { func onReceivedConnectedState(_ isConnected: Bool) { //AsReaderとiOSデバイス間の接続ステータスをコールバックします。 } func onReceivedPowerState(_ isOn: Bool, beep isBeep: Bool, vib isVib: Bool, led isLed: Bool) { //現在接続されているAsReaderの電源、音、振動のステータスをコールバックします。 } func onReceivedBatteryState(_ gauge: Int32) { //現在接続されているAsReaderのバッテリー残量をコールバックします。 } func onReceivedTriggerState(_ isTriggerDown: Bool) { //現在接続されているAsReaderのトリガーキーの状態をコールバックします。 } func onReceivedReaderSettingBeep(_ isOn: Bool, vib isVib: Bool, led isLed: Bool){ //現在接続されているAsReaderの音と振動のステータスをコールバックします。 } } ```   ### AsReader の接続 AsReader が **iOS デバイス** に接続または切断されると、 [onReceivedConnectedState](AsReaderAsk_delegate.md#onreceivedconnectedstate) デリゲートメソッドが呼び出され、 現在の接続状態をアプリに通知します。   ### AsReader の電源を入れる AsReader が接続され、`isConnected` が `true` の場合は、 [sendPower](AsReaderAsk_method.md#sendpower) メソッドを呼び出し、 AsReader の電源をオンにします。 ```swift func onReceivedConnectedState(_ isConnected: Bool) { // AsReader と iOS デバイス間の接続ステータスをコールバックします。 if isConnected { ask.sendPower(on: true, setBeep: true, setVib: true, setLed: true) } else { ask.sendPower(on: false, setBeep: false, setVib: false, setLed: false) } } ```   ### AsReader の電源状態を確認する [sendPower](AsReaderAsk_method.md#sendpower) を呼び出すと、戻り値が `true` の場合、 [onReceivedPowerState](AsReaderAsk_delegate.md#onreceivedpowerstate) デリゲートメソッドが呼び出されます。 `onReceivedPowerState` のコールバックパラメータ `isOn` が `true` の場合、 AsReader の電源が正常にオンになっていることを示します。 ```swift func onReceivedPowerState(_ isOn: Bool, beep isBeep: Bool, vib isVib: Bool, led isLed: Bool) { // 現在接続されている AsReader の電源、ビープ音、振動、LED のステータスをコールバックします。 } ```   ### 実行とコールバック 実行結果はクロージャを介してデータとしてコールバックされます。 AsReaderの電源がオンになると、[onReceivedPowerState](AsReaderAsk_delegate.md#onreceivedpowerstate)デリゲートメソッドがコールバックされます。 コールバックパラメータ `isOn` が`true`の場合、デバイスとの通信が正常に実行可能な状態です。 ここでは、[getVmData](JvmaSDK_method.md#getvmdata)のサンプルコードを紹介します。 このメソッドを使って自動販売機のデータを収集する方法を説明します。 なお、[他の通信メソッド](JvmaSDK_method.md)については同様の方法で呼び出すことが可能です。 ```swift //自動販売機のデータを取得するメソッドを呼び出します。 sdk.getVmData( withSettingCode: password, terminalPassword: terminalPassword, dataIds: array, inputTimeRecord: inputTimeRecord ) { resultDataBlock in // 返されたデータの処理(resultDataBlock) } ```