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
89
Bitriseことはじめ
ykkc
0
35
Other Decks in Programming
See All in Programming
距離関数を極める! / SESSIONS 2024
gam0022
0
280
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
330
Tauriでネイティブアプリを作りたい
tsucchinoko
0
370
WebフロントエンドにおけるGraphQL(あるいはバックエンドのAPI)との向き合い方 / #241106_plk_frontend
izumin5210
4
1.4k
ローコードSaaSのUXを向上させるためのTypeScript
taro28
1
610
[Do iOS '24] Ship your app on a Friday...and enjoy your weekend!
polpielladev
0
100
Arm移行タイムアタック
qnighy
0
320
受け取る人から提供する人になるということ
little_rubyist
0
230
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
100
macOS でできる リアルタイム動画像処理
biacco42
9
2.4k
Outline View in SwiftUI
1024jp
1
330
どうして僕の作ったクラスが手続き型と言われなきゃいけないんですか
akikogoto
1
120
Featured
See All Featured
A Tale of Four Properties
chriscoyier
156
23k
Site-Speed That Sticks
csswizardry
0
24
We Have a Design System, Now What?
morganepeng
50
7.2k
Making Projects Easy
brettharned
115
5.9k
Happy Clients
brianwarren
98
6.7k
Done Done
chrislema
181
16k
Practical Orchestrator
shlominoach
186
10k
Side Projects
sachag
452
42k
A designer walks into a library…
pauljervisheath
204
24k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
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