$30 off During Our Annual Pro Sale. View Details »

初めてのハードウェア対応

ykkc
September 18, 2021

 初めてのハードウェア対応

iOSDC2021 DAY1 10:50〜でお話させていただくものです!

ykkc

September 18, 2021
Tweet

More Decks by ykkc

Other Decks in Programming

Transcript

  1. ɹɹ
    ©︎
    hey, Inc
    初めてのハードウェア対応


    テクノロジー部門モバイルアプリケーション本部 レジグループ


    ソフトウェアエンジニア


    横小路 健(@_ykkc)

    View Slide

  2. ɹ
    ɹ
    自己紹介
    横小路 健 Takeshi Yokokoji


    @_ykkc(Twitter)


    2019.1 オンラインフィットネスサービスの開発

    2019.2 hey入社

    STORES 決済のプロダクト改善を行う


    2020.8 STORES レジの立ち上げに参画


    2021.6 STORES レジをリリース


    2021.8 STORES レジの新機能開発 / 改善を行う

    View Slide

  3. ɹ
    ɹ
    アジェンダ
    ● STORES レジの紹介と対応ハードウェア


    ● ハードウェア対応の裏側


    ● 〜CoreBluetooth編〜


    ● 〜External Accessory編〜


    ● ハードウェア対応で苦労したことまとめ

    View Slide

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

    View Slide

  5. ɹ
    ɹ
    STORES レジの紹介
    技術スタック


    ● 言語:Swift


    ● フレームワーク:SwiftUI, Combine


    ● API:GraphQL (using Apollo-iOS)


    ● DB:Realm


    ● ツール:GitHub, Bitrise, Firebase, Fastlane

    View Slide

  6. ɹ
    ɹ
    みなさんは

    「レジ」


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

    View Slide

  7. ɹ
    ɹ
    STORES レジの紹介

    View Slide

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

    View Slide

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

    View Slide

  10. ɹ
    ɹ
    ハードウェア対応の裏側 〜全体観〜
    全体の流れ


    ● やりたいことを明らかにする


    ● 仕様書を読み、ハードウェアを選定する


    ● 開発


    ● Bluetoothの規格によって異なる


    ● Bluetooth Low Energy


    ● Bluetooth Classic


    ● ( Optional ) Bluetooth Classicを利用する場合はMFi登録申請をする


    ● 審査


    ● リリース

    View Slide

  11. ɹ
    ɹ
    ハードウェア対応の裏側 〜CoreBluetooth編〜
    Bluetooth Low Energy(BLE)


    ● Bluetooth 4.0以降の規格


    ● 特徴


    ● 以前と比較して低消費電力での通信を実現した


    ● CoreBluetooth Frameworkで実装

    View Slide

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

    View Slide

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

    View Slide

  14. ɹ
    ɹ
    ハードウェア対応の裏側 〜External Accessory編〜
    デバイスの管理クラス


    ● ハードウェアの

    接続状態の検知


    ● デバイスのスキャン


    ● 印刷の実行


    View Slide

  15. ɹ
    ɹ
    ハードウェア対応の裏側 〜External Accessory編〜
    デバイスの管理クラス


    ● ハードウェアの

    接続状態の検知


    ● デバイスのスキャン


    ● 印刷の実行


    View Slide

  16. ɹ
    ɹ
    ハードウェア対応の裏側 〜External Accessory編〜
    デバイスの管理クラス


    ● ハードウェアの

    接続状態の検知


    ● デバイスのスキャン


    ● 印刷の実行


    View Slide

  17. ɹ
    ɹ
    ハードウェア対応の裏側 〜External Accessory編〜
    デバイスの管理クラス


    ● ハードウェアの

    接続状態の検知


    ● デバイスのスキャン


    ● 印刷の実行


    View Slide

  18. ɹ
    ɹ
    ハードウェア対応の裏側 〜External Accessory編〜
    デバイスの管理クラス


    ● ハードウェアの

    接続状態の検知


    ● デバイスのスキャン


    View Slide

  19. ɹ
    ɹ
    ハードウェア対応の裏側 〜External Accessory編〜
    デバイスの管理クラス


    ● ハードウェアの

    接続状態の検知


    ● デバイスのスキャン


    View Slide

  20. ɹ
    ɹ
    ハードウェア対応の裏側 〜External Accessory編〜
    デバイスの管理クラス


    ● ハードウェアの

    接続状態の検知


    ● デバイスのスキャン


    View Slide

  21. ɹ
    ɹ
    ハードウェア対応の裏側 〜External Accessory編〜
    デバイスの管理クラス


    ● ハードウェアの

    接続状態の検知


    ● デバイスのスキャン


    View Slide

  22. ɹ
    ɹ
    ハードウェア対応の裏側 〜External Accessory編〜
    Bluetooth Classic


    ● Bluetooth 3.0以前の規格


    ● 特徴


    ● External Accessory Frameworkで実装


    ● 実装以外にも…


    ● Info.plistのUISupportedExternalAccessoryProtocolsに

    accessory protocol stringsを追加する必要あり


    ● リリース前にMFi登録申請する必要あり

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. ɹ
    ɹ
    ハードウェア対応の裏側 〜External Accessory編〜
    MFi登録申請


    ● MFi登録申請って何?


    ● MFi(Made for iPhone/iPad/iPod)認証


    ● Apple製品に対応したハードウェアと認められるために必要なもの


    ● MFi認証されたハードウェアに対応したアプリの審査にはPPIDが必要


    ● メーカー経由でAppleからPPIDをもらうためにメーカーにする申請

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  33. ɹ
    ɹ
    ハードウェア対応の裏側 〜苦労編〜
    接続状態管理


    ● アプリでハードウェアとの接続状態を知りたい要件がある


    ● ハードウェアとの接続状態の通知の確実性を担保するのが難しい


    View Slide

  34. ɹ
    ɹ
    ハードウェア対応の裏側 〜苦労編〜
    ハードウェア固有の動作差分


    ● 同じメーカーでも一部の端末で挙動が異なる場合がある


    ● 調査に難航しがち

    View Slide

  35. ɹ
    ɹ
    ハードウェア対応の裏側 〜苦労編〜
    普段のアプリ開発ではなかなかない体験が出来る


    ● ハードウェアを理由に自宅にブースが出来たり…


    ● 開発中にレシートにまみれたり…


    View Slide

  36. ɹ
    ɹ
    おわりに
    ● 低レイヤーの実装を体験できたのはよかった


    ● 普段Bluetoothで接続しているデバイスがどのような仕組みで動いてい
    るかを知ることができたのもよかった


    ● アプリを含めた周辺機器を踏まえた体験まで考える視野が広がった


    ● 触っている人が少ない分、ノウハウをアウトプットする機会が増えた

    View Slide

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

    View Slide

  38. View Slide