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.2k
初めてのハードウェア対応
iOSDC2021 DAY1 10:50〜でお話させていただくものです!
ykkc
September 18, 2021
Tweet
Share
More Decks by ykkc
See All by ykkc
Magic Podで始める ローコンテクストな モバイルUIテスティング
ykkc
0
94
Bitriseことはじめ
ykkc
0
42
Other Decks in Programming
See All in Programming
dynamic!
moro
9
6.5k
プログラマのための作曲入門
cheebow
0
540
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
390
(Extension DC 2025) Actor境界を越える技術
teamhimeh
1
220
どの様にAIエージェントと 協業すべきだったのか?
takefumiyoshii
2
610
ポスターセッション: 「まっすぐ行って、右!」って言ってラズパイカーを動かしたい 〜生成AI × Raspberry Pi Pico × Gradioの試作メモ〜
komofr
0
960
Advance Your Career with Open Source
ivargrimstad
0
340
株式会社 Sun terras カンパニーデック
sunterras
0
230
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
590
After go func(): Goroutines Through a Beginner’s Eye
97vaibhav
0
230
猫と暮らすネットワークカメラ生活🐈 ~Vision frameworkでペットを愛でよう~ / iOSDC Japan 2025
yutailang0119
0
220
Чего вы не знали о строках в Python – Василий Рябов, PythoNN
sobolevn
0
160
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
95
14k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
51k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
960
Visualization
eitanlees
148
16k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
610
Context Engineering - Making Every Token Count
addyosmani
5
180
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
How STYLIGHT went responsive
nonsquared
100
5.8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Building Applications with DynamoDB
mza
96
6.6k
Balancing Empowerment & Direction
lara
4
680
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