3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

StarXpand SDKをインポートする(SwiftUI, Xcode)

Last updated at Posted at 2023-07-21

今回はStarXpand SDKをXcodeでインポートしてみました。

公式のサンプルではSwift×StoryBoardのソースしかないので、
SwiftUIに対応したい場合はこの記事を参考にしてください。

※公式サイトのマニュアルはこちら

1.Xcodeプロジェクトを作成

まずはプロジェクトを作成しましょう。

1-1.png

・Create a new Xcode projectを選択
・Appを選択してNext
・適当なProduct Nameを入力してNext
・プロジェクト保存先を選択してCreate

1-2.png

サンプルコードとともにプロジェクトが生成されました。

2.StarXpand SDKを取り込む

公式の導入手順はGitHubで公開されています。

・File > Add Packages... を選択
・右上の検索バーに「star」と入力

1-3.png

・StarXpand SDK iOSを選択してAdd Package
・StarIO10のチェックを確認してAdd Package

1-4.png

パッケージが追加されました。

3.必要な設定をする

info.plistの設定が必要です。

1-6.png

他にもBluetoothを使用する場合、LANを使用する場合はユーザーに許可を要求するための設定をinfo.plistに入れなければなりません。

1-7.png

4.SDKの動作を試してみる

今回はStarXpand SDKのディスカバリ機能を試してみます。
ディスカバリ機能とは、簡単にいうと周囲のプリンタを検索する機能です。

リファレンスを見ると、ディスカバリ系のAPIは大きく3種類あります。

1-5.png

StarIO10をインポートします。

import StarIO10

No such module 'StarIO10'と出ても無視して大丈夫です。
一度ビルドすれば消えます。

続いてディスカバリ用のクラスを作成します。
StarDeviceDiscoveryManagerDelegateに準拠します。
Viewで監視するためObservableObjectにも準拠しておきます。

クラス全体
class DiscoveryManager: ObservableObject, StarDeviceDiscoveryManagerDelegate{
    @Published var printers: [StarPrinter] = []
    
    func manager(_ manager: StarDeviceDiscoveryManager, didFind printer: StarPrinter) {
        DispatchQueue.main.async {
            self.printers.append(printer)
            print("did find")
        }
    }
    
    func managerDidFinishDiscovery(_ manager: StarIO10.StarDeviceDiscoveryManager) {
        DispatchQueue.main.async {
            print("did finish")
        }
    }
    
    func discovery(){
        printers.removeAll()
        if let manager = try? StarDeviceDiscoveryManagerFactory.create(interfaceTypes: [.lan, .bluetooth, .bluetoothLE, .usb]){
            manager.delegate = self
            manager.discoveryTime = 10000
            do{
                try manager.startDiscovery()
            }
            catch{
                print("error")
            }
        }
    }
}

順に説明します。

@Published var printers: [StarPrinter] = []

検索したプリンターをここに格納します。

func manager(_ manager: StarDeviceDiscoveryManager, didFind printer: StarPrinter) {
    DispatchQueue.main.async {
        self.printers.append(printer)
        print("did find")
    }
}

プリンターが見つかるたびに呼ばれます。
StarDeviceDiscoveryManagerDelegateに準拠しているので必須です。

func managerDidFinishDiscovery(_ manager: StarIO10.StarDeviceDiscoveryManager) {
    DispatchQueue.main.async {
        print("did finish")
    }
}

検索が終了した時に呼ばれます。
StarDeviceDiscoveryManagerDelegateに準拠しているので必須です。

func discovery(){
    printers.removeAll()
    if let manager = try? StarDeviceDiscoveryManagerFactory.create(interfaceTypes: [.lan, .bluetooth, .bluetoothLE, .usb]){
        manager.delegate = self
        manager.discoveryTime = 10000
        do{
            try manager.startDiscovery()
        }
        catch{
            print("error")
        }
    }
}

検索を実行するメソッドです。
StarDeviceDiscoveryManagerFactoryはStarDeviceDiscoveryManagerを生成して返すAPIです。
生成されたStarDeviceDiscoveryManagerによって、startDiscovery()で検索を実行します。
検索時間は10000ms(10秒)としました。

続いてViewを実装します。

struct ContentView: View {
    @StateObject var manager = DiscoveryManager()
    
    var body: some View {
        List{
            Section{
                ForEach(manager.printers, id: \.self){ printer in
                    Text(printer.information?.model.description ?? "不明")
                }
            }
            Button("検索"){
                manager.discovery()
            }
        }
    }
}

検索ボタンを押したら実行し、検索したプリンターの一覧をリスト表示するというシンプルなViewです。

それではビルドして実行してみましょう。

検索ボタンを押すと

プリンターが見つかりました。

出力を見てみると、プリンターが見つかった後も継続的に探しているようです。

1-10.png

しばらくこのログが流れてきて、、、

1-11.png

ちょうど、設定した10秒で終了の確認が取れました。

まとめ

今回はStarXpand SDKをXcodeでインポートして使用する方法をまとめました。
まだまだたくさんの機能がありそうなので、色々試しながら記事で共有していきたいと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?