Slide 1

Slide 1 text

ɹɹ ©︎ hey, Inc 初めてのハードウェア対応 テクノロジー部門モバイルアプリケーション本部 レジグループ ソフトウェアエンジニア 横小路 健(@_ykkc)

Slide 2

Slide 2 text

ɹ ɹ 自己紹介 横小路 健 Takeshi Yokokoji @_ykkc(Twitter) 2019.1 オンラインフィットネスサービスの開発 
 2019.2 hey入社 
 STORES 決済のプロダクト改善を行う 2020.8 STORES レジの立ち上げに参画 2021.6 STORES レジをリリース 2021.8 STORES レジの新機能開発 / 改善を行う

Slide 3

Slide 3 text

ɹ ɹ アジェンダ ● STORES レジの紹介と対応ハードウェア ● ハードウェア対応の裏側 ● 〜CoreBluetooth編〜 ● 〜External Accessory編〜 ● ハードウェア対応で苦労したことまとめ

Slide 4

Slide 4 text

ɹ ɹ STORES レジの紹介 STORES レジはお商売を支えるSTORES プラットフォームのプロダクトの内の1つ

Slide 5

Slide 5 text

ɹ ɹ STORES レジの紹介 技術スタック ● 言語:Swift ● フレームワーク:SwiftUI, Combine ● API:GraphQL (using Apollo-iOS) ● DB:Realm ● ツール:GitHub, Bitrise, Firebase, Fastlane

Slide 6

Slide 6 text

ɹ ɹ みなさんは 
 「レジ」 と言われてどんなものを思い浮かべますか? STORES レジの紹介

Slide 7

Slide 7 text

ɹ ɹ STORES レジの紹介

Slide 8

Slide 8 text

ɹ ɹ STORES レジの紹介 レシートの発行 決済 合計金額の通知 商品の読み取り

Slide 9

Slide 9 text

ɹ ɹ STORES レジの紹介 会計の流れには様々なハードウェアが必要 レシートプリンター キャッシュドロワー 決済端末 バーコードリーダー レジアプリ

Slide 10

Slide 10 text

ɹ ɹ ハードウェア対応の裏側 〜全体観〜 全体の流れ ● やりたいことを明らかにする ● 仕様書を読み、ハードウェアを選定する ● 開発 ● Bluetoothの規格によって異なる ● Bluetooth Low Energy ● Bluetooth Classic ● ( Optional ) Bluetooth Classicを利用する場合はMFi登録申請をする ● 審査 ● リリース

Slide 11

Slide 11 text

ɹ ɹ ハードウェア対応の裏側 〜CoreBluetooth編〜 Bluetooth Low Energy(BLE) ● Bluetooth 4.0以降の規格 ● 特徴 ● 以前と比較して低消費電力での通信を実現した ● CoreBluetooth Frameworkで実装

Slide 12

Slide 12 text

ɹ ɹ ハードウェア対応の裏側 〜CoreBluetooth編〜 Central Peripheral Service Characteristic iPhone BLEϓϦϯλʔ

Slide 13

Slide 13 text

ɹ ɹ ハードウェア対応の裏側 〜CoreBluetooth編〜 σόΠεͷ࢓༷ʹؔ͢Δ৘ใ

Slide 14

Slide 14 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス ● ハードウェアの 
 接続状態の検知 ● デバイスのスキャン ● 印刷の実行

Slide 15

Slide 15 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス ● ハードウェアの 
 接続状態の検知 ● デバイスのスキャン ● 印刷の実行

Slide 16

Slide 16 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス ● ハードウェアの 
 接続状態の検知 ● デバイスのスキャン ● 印刷の実行

Slide 17

Slide 17 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス ● ハードウェアの 
 接続状態の検知 ● デバイスのスキャン ● 印刷の実行

Slide 18

Slide 18 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス ● ハードウェアの 
 接続状態の検知 ● デバイスのスキャン

Slide 19

Slide 19 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス ● ハードウェアの 
 接続状態の検知 ● デバイスのスキャン

Slide 20

Slide 20 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス ● ハードウェアの 
 接続状態の検知 ● デバイスのスキャン

Slide 21

Slide 21 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス ● ハードウェアの 
 接続状態の検知 ● デバイスのスキャン

Slide 22

Slide 22 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 Bluetooth Classic ● Bluetooth 3.0以前の規格 ● 特徴 ● External Accessory Frameworkで実装 ● 実装以外にも… ● Info.plistのUISupportedExternalAccessoryProtocolsに 
 accessory protocol stringsを追加する必要あり ● リリース前にMFi登録申請する必要あり

Slide 23

Slide 23 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 EAAccessoryΛར༻࣮ͨ͠૷ྫ

Slide 24

Slide 24 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 ΞϓϦ͔Βͷ઀ଓͰ͸FrameworkͷUIʹґଘ͢Δ

Slide 25

Slide 25 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 EAAccessoryΛར༻࣮ͨ͠૷ྫ

Slide 26

Slide 26 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 MFi登録申請 ● MFi登録申請って何? ● MFi(Made for iPhone/iPad/iPod)認証 ● Apple製品に対応したハードウェアと認められるために必要なもの ● MFi認証されたハードウェアに対応したアプリの審査にはPPIDが必要 ● メーカー経由でAppleからPPIDをもらうためにメーカーにする申請

Slide 27

Slide 27 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 ᶅ PPIDൃߦ ᶄ PPIDൃߦґཔ ᶃ MFiొ࿥ਃ੥ ᶆ MFiొ࿥׬ྃ with PPID ᶇ ΞϓϦ৹ࠪ with PPID ΞϓϦ։ൃऀ MFiೝূΛड͚ͨϋʔυ΢ΣΞΛఏڙ͢ΔϝʔΧʔ

Slide 28

Slide 28 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 ᶅ PPIDൃߦ ᶄ PPIDൃߦґཔ ᶃ MFiొ࿥ਃ੥ ᶆ MFiొ࿥׬ྃ with PPID ᶇ ΞϓϦ৹ࠪ with PPID ΞϓϦ։ൃऀ MFiೝূΛड͚ͨϋʔυ΢ΣΞΛఏڙ͢ΔϝʔΧʔ

Slide 29

Slide 29 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 ᶅ PPIDൃߦ ᶄ PPIDൃߦґཔ ᶃ MFiొ࿥ਃ੥ ᶆ MFiొ࿥׬ྃ with PPID ᶇ ΞϓϦ৹ࠪ with PPID ΞϓϦ։ൃऀ MFiೝূΛड͚ͨϋʔυ΢ΣΞΛఏڙ͢ΔϝʔΧʔ

Slide 30

Slide 30 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 ᶅ PPIDൃߦ ᶄ PPIDൃߦґཔ ᶃ MFiొ࿥ਃ੥ ᶆ MFiొ࿥׬ྃ with PPID ᶇ ΞϓϦ৹ࠪ with PPID ΞϓϦ։ൃऀ MFiೝূΛड͚ͨϋʔυ΢ΣΞΛఏڙ͢ΔϝʔΧʔ

Slide 31

Slide 31 text

ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 ᶅ PPIDൃߦ ᶄ PPIDൃߦґཔ ᶃ MFiొ࿥ਃ੥ ᶆ MFiొ࿥׬ྃ with PPID ᶇ ΞϓϦ৹ࠪ with PPID ΞϓϦ։ൃऀ MFiೝূΛड͚ͨϋʔυ΢ΣΞΛఏڙ͢ΔϝʔΧʔ

Slide 32

Slide 32 text

ɹ ɹ STORES レジでの審査時 の端末記載例 ハードウェア対応の裏側 〜External Accessory編〜

Slide 33

Slide 33 text

ɹ ɹ ハードウェア対応の裏側 〜苦労編〜 接続状態管理 ● アプリでハードウェアとの接続状態を知りたい要件がある ● ハードウェアとの接続状態の通知の確実性を担保するのが難しい

Slide 34

Slide 34 text

ɹ ɹ ハードウェア対応の裏側 〜苦労編〜 ハードウェア固有の動作差分 ● 同じメーカーでも一部の端末で挙動が異なる場合がある ● 調査に難航しがち

Slide 35

Slide 35 text

ɹ ɹ ハードウェア対応の裏側 〜苦労編〜 普段のアプリ開発ではなかなかない体験が出来る ● ハードウェアを理由に自宅にブースが出来たり… ● 開発中にレシートにまみれたり…

Slide 36

Slide 36 text

ɹ ɹ おわりに ● 低レイヤーの実装を体験できたのはよかった ● 普段Bluetoothで接続しているデバイスがどのような仕組みで動いてい るかを知ることができたのもよかった ● アプリを含めた周辺機器を踏まえた体験まで考える視野が広がった ● 触っている人が少ない分、ノウハウをアウトプットする機会が増えた

Slide 37

Slide 37 text

募集中の職種 hey採用 https://hello.hey.jp/ 詳細はこちらで検索

Slide 38

Slide 38 text

No content