今回はStarXpand SDKをXcodeでインポートしてみました。
公式のサンプルではSwift×StoryBoardのソースしかないので、
SwiftUIに対応したい場合はこの記事を参考にしてください。
※公式サイトのマニュアルはこちら
1.Xcodeプロジェクトを作成
まずはプロジェクトを作成しましょう。
・Create a new Xcode projectを選択
・Appを選択してNext
・適当なProduct Nameを入力してNext
・プロジェクト保存先を選択してCreate
サンプルコードとともにプロジェクトが生成されました。
2.StarXpand SDKを取り込む
公式の導入手順はGitHubで公開されています。
・File > Add Packages... を選択
・右上の検索バーに「star」と入力
・StarXpand SDK iOSを選択してAdd Package
・StarIO10のチェックを確認してAdd Package
パッケージが追加されました。
3.必要な設定をする
info.plistの設定が必要です。
他にもBluetoothを使用する場合、LANを使用する場合はユーザーに許可を要求するための設定をinfo.plistに入れなければなりません。
4.SDKの動作を試してみる
今回はStarXpand SDKのディスカバリ機能を試してみます。
ディスカバリ機能とは、簡単にいうと周囲のプリンタを検索する機能です。
リファレンスを見ると、ディスカバリ系のAPIは大きく3種類あります。
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です。
それではビルドして実行してみましょう。
検索ボタンを押すと
プリンターが見つかりました。
出力を見てみると、プリンターが見つかった後も継続的に探しているようです。
しばらくこのログが流れてきて、、、
ちょうど、設定した10秒で終了の確認が取れました。
まとめ
今回はStarXpand SDKをXcodeでインポートして使用する方法をまとめました。
まだまだたくさんの機能がありそうなので、色々試しながら記事で共有していきたいと思います。