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
1.4k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
初めてのハードウェア対応
iOSDC2021 DAY1 10:50〜でお話させていただくものです!
ykkc
September 18, 2021
More Decks by ykkc
See All by ykkc
Magic Podで始める ローコンテクストな モバイルUIテスティング
ykkc
0
120
Bitriseことはじめ
ykkc
0
65
Other Decks in Programming
See All in Programming
MySQLとPostgreSQLって何が違うの?
akagami
0
150
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
240
源内ハンズオン概要編
hideg
0
220
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.3k
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
230
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
170
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
290
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
240
typoなんかねぇよ
raspython3
0
610
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
240
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
190
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
120
Featured
See All Featured
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
380
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
260
Google's AI Overviews - The New Search
badams
0
1.6k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The SEO Collaboration Effect
kristinabergwall1
1
530
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
400
4 Signs Your Business is Dying
shpigford
187
23k
Everyday Curiosity
cassininazir
0
300
Technical Leadership for Architectural Decision Making
baasie
3
540
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
480
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
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