Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
初めてのハードウェア対応
Search
ykkc
September 18, 2021
Programming
4
1.1k
初めてのハードウェア対応
iOSDC2021 DAY1 10:50〜でお話させていただくものです!
ykkc
September 18, 2021
Tweet
Share
More Decks by ykkc
See All by ykkc
Magic Podで始める ローコンテクストな モバイルUIテスティング
ykkc
0
90
Bitriseことはじめ
ykkc
0
35
Other Decks in Programming
See All in Programming
ChatGPT とつくる PHP で OS 実装
memory1994
PRO
3
190
AWS re:Invent 2024個人的まとめ
satoshi256kbyte
0
100
生成AIでGitHubソースコード取得して仕様書を作成
shukob
0
630
ゼロからの、レトロゲームエンジンの作り方
tokujiros
3
1k
Fixstars高速化コンテスト2024準優勝解法
eijirou
0
190
良いユニットテストを書こう
mototakatsu
11
3.6k
ErdMap: Thinking about a map for Rails applications
makicamel
1
590
歴史と現在から考えるスケーラブルなソフトウェア開発のプラクティス
i10416
0
300
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
7.7k
令和7年版 あなたが使ってよいフロントエンド機能とは
mugi_uno
10
5.1k
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
1.3k
Azure AI Foundryのご紹介
qt_luigi
1
180
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Adopting Sorbet at Scale
ufuk
74
9.2k
Making the Leap to Tech Lead
cromwellryan
133
9k
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Music & Morning Musume
bryan
46
6.3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
GraphQLとの向き合い方2022年版
quramy
44
13k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Statistics for Hackers
jakevdp
797
220k
Transcript
ɹɹ ©︎ hey, Inc 初めてのハードウェア対応 テクノロジー部門モバイルアプリケーション本部 レジグループ ソフトウェアエンジニア 横小路 健(@_ykkc)
ɹ ɹ 自己紹介 横小路 健 Takeshi Yokokoji @_ykkc(Twitter) 2019.1 オンラインフィットネスサービスの開発
2019.2 hey入社 STORES 決済のプロダクト改善を行う 2020.8 STORES レジの立ち上げに参画 2021.6 STORES レジをリリース 2021.8 STORES レジの新機能開発 / 改善を行う
ɹ ɹ アジェンダ • STORES レジの紹介と対応ハードウェア • ハードウェア対応の裏側 • 〜CoreBluetooth編〜
• 〜External Accessory編〜 • ハードウェア対応で苦労したことまとめ
ɹ ɹ STORES レジの紹介 STORES レジはお商売を支えるSTORES プラットフォームのプロダクトの内の1つ
ɹ ɹ STORES レジの紹介 技術スタック • 言語:Swift • フレームワーク:SwiftUI, Combine
• API:GraphQL (using Apollo-iOS) • DB:Realm • ツール:GitHub, Bitrise, Firebase, Fastlane
ɹ ɹ みなさんは 「レジ」 と言われてどんなものを思い浮かべますか? STORES レジの紹介
ɹ ɹ STORES レジの紹介
ɹ ɹ STORES レジの紹介 レシートの発行 決済 合計金額の通知 商品の読み取り
ɹ ɹ STORES レジの紹介 会計の流れには様々なハードウェアが必要 レシートプリンター キャッシュドロワー 決済端末 バーコードリーダー レジアプリ
ɹ ɹ ハードウェア対応の裏側 〜全体観〜 全体の流れ • やりたいことを明らかにする • 仕様書を読み、ハードウェアを選定する •
開発 • Bluetoothの規格によって異なる • Bluetooth Low Energy • Bluetooth Classic • ( Optional ) Bluetooth Classicを利用する場合はMFi登録申請をする • 審査 • リリース
ɹ ɹ ハードウェア対応の裏側 〜CoreBluetooth編〜 Bluetooth Low Energy(BLE) • Bluetooth 4.0以降の規格
• 特徴 • 以前と比較して低消費電力での通信を実現した • CoreBluetooth Frameworkで実装
ɹ ɹ ハードウェア対応の裏側 〜CoreBluetooth編〜 Central Peripheral Service Characteristic iPhone BLEϓϦϯλʔ
ɹ ɹ ハードウェア対応の裏側 〜CoreBluetooth編〜 σόΠεͷ༷ʹؔ͢Δใ
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス • ハードウェアの 接続状態の検知
• デバイスのスキャン • 印刷の実行
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス • ハードウェアの 接続状態の検知
• デバイスのスキャン • 印刷の実行
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス • ハードウェアの 接続状態の検知
• デバイスのスキャン • 印刷の実行
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス • ハードウェアの 接続状態の検知
• デバイスのスキャン • 印刷の実行
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス • ハードウェアの 接続状態の検知
• デバイスのスキャン
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス • ハードウェアの 接続状態の検知
• デバイスのスキャン
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス • ハードウェアの 接続状態の検知
• デバイスのスキャン
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 デバイスの管理クラス • ハードウェアの 接続状態の検知
• デバイスのスキャン
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 Bluetooth Classic • Bluetooth 3.0以前の規格
• 特徴 • External Accessory Frameworkで実装 • 実装以外にも… • Info.plistのUISupportedExternalAccessoryProtocolsに accessory protocol stringsを追加する必要あり • リリース前にMFi登録申請する必要あり
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 EAAccessoryΛར༻࣮ͨ͠ྫ
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 ΞϓϦ͔ΒͷଓͰFrameworkͷUIʹґଘ͢Δ
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 EAAccessoryΛར༻࣮ͨ͠ྫ
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 MFi登録申請 • MFi登録申請って何? • MFi(Made
for iPhone/iPad/iPod)認証 • Apple製品に対応したハードウェアと認められるために必要なもの • MFi認証されたハードウェアに対応したアプリの審査にはPPIDが必要 • メーカー経由でAppleからPPIDをもらうためにメーカーにする申請
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 ᶅ PPIDൃߦ ᶄ PPIDൃߦґཔ ᶃ
MFiొਃ ᶆ MFiొྃ with PPID ᶇ ΞϓϦ৹ࠪ with PPID ΞϓϦ։ൃऀ MFiೝূΛड͚ͨϋʔυΣΞΛఏڙ͢ΔϝʔΧʔ
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 ᶅ PPIDൃߦ ᶄ PPIDൃߦґཔ ᶃ
MFiొਃ ᶆ MFiొྃ with PPID ᶇ ΞϓϦ৹ࠪ with PPID ΞϓϦ։ൃऀ MFiೝূΛड͚ͨϋʔυΣΞΛఏڙ͢ΔϝʔΧʔ
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 ᶅ PPIDൃߦ ᶄ PPIDൃߦґཔ ᶃ
MFiొਃ ᶆ MFiొྃ with PPID ᶇ ΞϓϦ৹ࠪ with PPID ΞϓϦ։ൃऀ MFiೝূΛड͚ͨϋʔυΣΞΛఏڙ͢ΔϝʔΧʔ
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 ᶅ PPIDൃߦ ᶄ PPIDൃߦґཔ ᶃ
MFiొਃ ᶆ MFiొྃ with PPID ᶇ ΞϓϦ৹ࠪ with PPID ΞϓϦ։ൃऀ MFiೝূΛड͚ͨϋʔυΣΞΛఏڙ͢ΔϝʔΧʔ
ɹ ɹ ハードウェア対応の裏側 〜External Accessory編〜 ᶅ PPIDൃߦ ᶄ PPIDൃߦґཔ ᶃ
MFiొਃ ᶆ MFiొྃ with PPID ᶇ ΞϓϦ৹ࠪ with PPID ΞϓϦ։ൃऀ MFiೝূΛड͚ͨϋʔυΣΞΛఏڙ͢ΔϝʔΧʔ
ɹ ɹ STORES レジでの審査時 の端末記載例 ハードウェア対応の裏側 〜External Accessory編〜
ɹ ɹ ハードウェア対応の裏側 〜苦労編〜 接続状態管理 • アプリでハードウェアとの接続状態を知りたい要件がある • ハードウェアとの接続状態の通知の確実性を担保するのが難しい
ɹ ɹ ハードウェア対応の裏側 〜苦労編〜 ハードウェア固有の動作差分 • 同じメーカーでも一部の端末で挙動が異なる場合がある • 調査に難航しがち
ɹ ɹ ハードウェア対応の裏側 〜苦労編〜 普段のアプリ開発ではなかなかない体験が出来る • ハードウェアを理由に自宅にブースが出来たり… • 開発中にレシートにまみれたり…
ɹ ɹ おわりに • 低レイヤーの実装を体験できたのはよかった • 普段Bluetoothで接続しているデバイスがどのような仕組みで動いてい るかを知ることができたのもよかった • アプリを含めた周辺機器を踏まえた体験まで考える視野が広がった
• 触っている人が少ない分、ノウハウをアウトプットする機会が増えた
募集中の職種 hey採用 https://hello.hey.jp/ 詳細はこちらで検索
None