Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Apple Walletでパスを作るお話
Search
Ryotaro Onoue
July 12, 2024
Technology
270
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Apple Walletでパスを作るお話
Ryotaro Onoue
July 12, 2024
More Decks by Ryotaro Onoue
See All by Ryotaro Onoue
FlutterKaigi 2025 公式アプリ&WebサイトのCDについて
yumnumm
0
150
FlutterKaigi 2025 システム裏側
yumnumm
0
2.2k
Terraform+cloud-initで自宅サーバのLXDをIaCするお話
yumnumm
2
260
FlutterKaigi 2024における開発チームの取り組み と 2025への展望
yumnumm
0
110
Dart WebAssemblyを使ったWeb API on Cloudflare Workers
yumnumm
0
140
私がやってきたアウトプット集
yumnumm
0
230
俺/私のこだわりデスク大大大自慢LT大会 (LTFes #12)
yumnumm
0
160
仕事以外で作成したプロダクトの自慢大会
yumnumm
0
230
Cloudflare Workers でプリントシール機の画像共有システムを制作したお話 @serverlessF
yumnumm
0
320
Other Decks in Technology
See All in Technology
20260912_スクフェス三河
kgnkhkr
0
300
AIとペアプロを始める。人とのペアプロをやめる。ペアプロの良さを改めて知る。もっと好きになった。 / Rediscovering Pair Programming
honyanya
1
350
データ界隈LT祭 第1回LT登壇
taromatsui_cccmkhd
0
150
2026/09/10 Spring Bootから Jakarta EE/MicroProfileへの移行
megascus
0
340
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
210
新機種発売前に見直そう!端末移行で再ログインが要るアプリ・要らないアプリは何が違うのか 〜シームレスに再開できる設計と実装〜
zozotech
PRO
0
110
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
280
リージョンの壁を越える、 ちょっと変わったAWSサービスの話
falken
PRO
1
310
Claude Code本って、 読む必要あるの?
oikon48
2
420
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
hinakko
0
110
2026-09-11 【Snowflake World Tour Tokyo 2026】Snowflakeを起点に、AI Agentが自律稼働し続ける未来へ / Driving AI Agents with Snowflake
civitaspo
0
350
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
1
1.5k
Featured
See All Featured
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
Done Done
chrislema
186
16k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Are puppies a ranking factor?
jonoalderson
2
3.9k
The untapped power of vector embeddings
frankvandijk
2
1.9k
Prompt Engineering for Job Search
mfonobong
0
450
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Heart Work Chapter 1 - Part 1
lfama
PRO
9
36k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Technical Leadership for Architectural Decision Making
baasie
3
560
Transcript
2024.07.12 Apple WalletͰύεΛ࡞Δ͓ YUMEMI Inc. Flutter Engineer - Ryotaro Onoue
1 Money Forward×YUMEMI.grow ࣗশएखϞόΠϧΤϯδχΞLTձ
0. ࣗݾհ ɾגࣜձࣾΏΊΈ FlutterΤϯδχΞ 20234݄ʙ ɾFlutterKaigi 2023 (ڞಉ)ొஃ&ελοϑ ɾDart BFF(Backend
for Frontend)ͷΛ͠·ͨ͠ ɾFlutterKaigi 2024 WebαΠτνʔϜ&σʔλνʔϜ ɾTwitter @YumNumm(͙͙) Ͱ͍ͬͯ·͢ ɾࠓ9݄Ͱ20ࡀʹͳΓ·͢ ࠓ19Ͱ͢ 2
None
ࠓͷτϐοΫ ❌ FlutterΤϯδχΞͰ͕͢ɺFlutterͷ͠·ͤΜ ࠓɺAppleϓϥοτϑΥʔϜʹدͬͨΛ͠·͢ (ݩʑAndroidʹ৮Δ༧ఆͩͬͨͷͰ͕͢ɺ͕࣌ؒ͋·ΓऔΕͣ...🙏) 4
ࠓͷτϐοΫ ❌ FlutterΤϯδχΞͰ͕͢ɺFlutterͷ͠·ͤΜ ࠓɺAndroidͱiOS ͦΕͧΕϓϥοτϑΥʔϜʹدͬͨΛ͠Α͏ͱࢥ͍·͢ 5
ࠓͷτϐοΫ 6 ΥϨοτ App Έͳ͞Μ͍ͬͯ·͔͢?
ͳΜͰ͜ͷ? ɾ@ۙॴͷΠτʔϤʔΧυʔ ɾηϧϑϨδͰొΛͨ͠ޙͷϙΠϯτΧʔυొʹͯ ɾΠτʔϤʔΧυʔͷWiFiʹଓ͞Ε͍ͯͯ ΞϓϦ͕ىಈ͠ͳ͍ ɾϞόΠϧσʔλ༰ྔ͕ऴΘ͍ͬͯͯ ىಈʹ10ඵ͘Β͍ͨ͞ΕΔ ɾͭͷΠϠ͕ͩ ϙΠϯτ͕͔ͳ͍ͷ൵͍͠ ɾ݁Ռ:
ڏແͷ͕࣌ؒྲྀΕΔ 7
ͳΜͰ͜ͷ? ɾۙॴͷΠτʔϤʔΧυʔʹͯ ɾηϧϑϨδͰొΛͨ͠ޙͷϙΠϯτΧʔυొʹͯ ɾ΅͘ʮ͋ͬɺϙΠϯτΧʔυొ͠ͳ͍ͱ... εϚϗͷΞϓϦͬͱʯ ɾiPhoneʮΠτʔϤʔΧυʔͷWiFiܨ͕͍ͬͯΔ͔Βೝূͯ͠Ͷʯ(ΩϟϓςΟϒWiFi) ɾ΅͘ʮ͍ɺࠓ͍ΒΜʯ ɾΞϓϦʮ(10ඵ΄Ͳػ)ωοτଓͰ͖·ͤΜʯ ɾ΅͘ʮWiFiΦϑʹͯ͠ΞϓϦ࠶ىಈ...ʯ ɾΞϓϦʮ(5ඵ΄Ͳػ)͍ɺϙΠϯτΧʔυͷόʔίʔυʯ
ɾ΅͘ʮͬͱܾࡁͷͱ͜Ζ·ͰདྷͨΘʯ 8 ɾSuicaܾࡁɾΫϨδοτΧʔυܾࡁͰ͢Β Apple Watch୯ମͰࡁ·ͤΒΕΔ͜ͷ࣌ ʹͲ͏ͯ͠ʮΞϓϦΛ։͍ͯͭʯͱ͍͏ΊΜͲ͍͘͞ίτΛ͠ͳ͍ͱ͍͚ͳ͍ͷ ͔? ɾ͜͜Ұͭ ٕज़Ͱղܾ͍ͨ͠ɻ -> ύεΛ࡞ͬͨΔ!
2. Apple WalletͷΈ 9
1. ύεͷσʔλΛ༻ҙ͢Δ - pass.json: ύεʹදࣔ͢ΔจࣈྻϝλσʔλΛ֨ೲ - ֤छը૾ϑΝΠϧ: ϩΰΞΠίϯͳͲ - (optional)
ϩʔΧϦθʔγϣϯใ 2. Apple WalletͷΈ 10
1. ύεͷσʔλΛ༻ҙ͢Δ - pass.json: ύεʹදࣔ͢ΔจࣈྻϝλσʔλΛ֨ೲ - ֤छը૾ϑΝΠϧ: ϩΰΞΠίϯͳͲ - (optional)
ϩʔΧϦθʔγϣϯใ 2. ύεͷσʔλͦΕͧΕʹରͯ͠ॺ໊Λ͢Δ - ͍͔ͭ͘ͷσʔλΛ༻ҙͯ͠ॺ໊ 3. σʔλͱॺ໊ΛؚΊͯZIPѹॖ 4. ֦ுࢠΛ.pkpassʹม͑ͯ - Webܦ༝ͰϝʔϧͰAirDropͰʙ 2. Apple WalletͷΈ 11
- Apple WalletΛܦ༝ͯ͠ύεΛ৴ɾ͢ΔͨΊʹॺ໊͕ඞཁ - ύε͕࡞+ॺ໊͞Ε͔ͯΒɺѱҙͷ͋ΔϢʔβʹΑͬͯվม͞Ε͍ͯͳ͍͜ͱΛ ݕূͰ͖ΔΑ͏ʹͳΔ - Pass Type IdentifierͱTeam
IDΛ༻ҙ͢Δ - Identifier(ࣝผࢠ)Λొͨ͠ΒɺCertificate(ূ໌ॻ)ΛDL͢Δ - Identifier pass. ͔Β࢝·ΔҙͷٯDNSจࣈྻ 2-0. ֤छূ໌ॻͷ༻ҙ 12
- ύεͷσʔλ pass.json ʹهड़͢Δ - description, formatVersion: “1”, organizationName(Team ID),
passTypeIdentifier, serialNumber ඞਢ - barcodesbackgroundColor, associatedStoreIdentifiers, locationsهड़Ͱ͖Δ - associatedStoreIdentifiers: ύεʹඥͮ͘ΞϓϦ ͷAppStoreࣝผࢠྻɻύε͔ΒΞϓϦΛىಈͰ͖Δ - locations: ύεʹඥͮ͘ҢܦྻɻͦͷҐஔʹߦ͘ ͱɺϩοΫը໘ʹύεͷީิ͕ग़ͯ͘Δ - ৄࡉͳύεͷจࣈྻPass Type͝ͱʹهड़(࣍ϖʔδ) 2-1. ύεͷσʔλΛ༻ҙ͢Δ 13
- ύεʹେ͖͘5छྨ͋ΜͶΜ: ͦΕͧΕͰදࣔͰ͖Δ߲͕ҧ͏ 2-1. ύεͷσʔλΛ༻ҙ͢Δ 14 Boarding pass Coupon Generic
Event ticket Store card https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/PassKit_PG/Creating.html#//apple_ref/doc/uid/TP40012195-CH4-SW1 ΑΓҾ༻
- ύεʹେ͖͘5छྨ͋ΜͶΜ: ͦΕͧΕͰදࣔͰ͖Δ߲͕ҧ͏ 2-1. ύεͷσʔλΛ༻ҙ͢Δ 15 Boarding pass Coupon Generic
Event ticket Store card https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/PassKit_PG/YourFirst.html ΑΓύεσʔλΛҾ༻
- ֤छը૾ͷ༻ҙ - എܠը૾ΞΠίϯɾϩΰͳͲΛஔ Ͱ͖Δ - ύεͷλΠϓʹԠͯ͡දࣔͰ͖Δը૾ ͕ҟͳΔͷͰɺ֬ೝ͢͠ 2-1. ύεͷσʔλΛ༻ҙ͢Δ
16
- ॺ໊ɾѹॖsignpassίϚϯυͰָʹ࣮Ͱ͖Δ - signpassπʔϧApple Developer͔ΒDLͰ͖Δ - signpass -p hoge Ͱѹॖʙॺ໊·Ͱͬͯ͘ΕΔ
- hoge.pkpass͕Ͱ͖ΔͷͰɺAirDropͰૹΕOK 2-2. ύεͷσʔλΛॺ໊͢Δ 17 https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/PassKit_PG/index.html ΑΓDLՄೳ
- ͰɺsignpassίϚϯυதͰԿΛ͍ͬͯΔͷ͔? - ͍͔ͭ͘ͷॺ໊νΣʔϯΛݩʹɺύεσʔλ͕ਖ਼͍͔͠ݕূͰ͖ΔΑ͏ʹ͍ͯ͠Δ 1. pass.jsonը૾ϑΝΠϧͷSHA-1ϋογϡΛܭࢉͯ͠manifests.jsonʹ֨ ೲ͢Δ 2-2. ύεͷσʔλΛॺ໊͢Δ 18
- ͰɺsignpassίϚϯυதͰԿΛ͍ͬͯΔͷ͔? - ͍͔ͭ͘ͷॺ໊νΣʔϯΛݩʹɺύεσʔλ͕ਖ਼͍͔͠ݕূͰ͖ΔΑ͏ʹ͍ͯ͠Δ 1. pass.jsonը૾ϑΝΠϧͷSHA-1ϋογϡΛܭࢉͯ͠manifests.jsonʹ֨ ೲ͢Δ 2.ʮ2-0. ֤छূ໌ॻͷ༻ҙʯͰ༻ҙͨ͠Certificates+WWDR(World Wide
Developer Relations தؒূ໌ॻ)Ͱ manifests.json Λެ։伴ॺ໊Λൃߦ - PKCS#7(҉߸Խσʔλॺ໊ΛؚΉϝοηʔδަܗࣜنఆ)ॺ໊Λ࡞͢Δ 2-2. ύεͷσʔλΛॺ໊͢Δ 19
- ͰɺsignpassίϚϯυதͰԿΛ͍ͬͯΔͷ͔? - ͍͔ͭ͘ͷॺ໊νΣʔϯΛݩʹɺύεσʔλ͕ਖ਼͍͔͠ݕূͰ͖ΔΑ͏ʹ͍ͯ͠Δ 1. pass.jsonը૾ϑΝΠϧͷSHA-1ϋογϡΛܭࢉͯ͠manifests.jsonʹ֨ ೲ͢Δ 2.ʮ2-0. ֤छূ໌ॻͷ༻ҙʯͰ༻ҙͨ͠Certificates+WWDR(World Wide
Developer Relations தؒূ໌ॻ)Ͱ manifests.json Λެ։伴ॺ໊Λൃߦ - PKCS#7(҉߸Խσʔλॺ໊ΛؚΉϝοηʔδަܗࣜنఆ)ॺ໊Λ࡞͢Δ 2-2. ύεͷσʔλΛॺ໊͢Δ 20
- ͰɺsignpassίϚϯυதͰԿΛ͍ͬͯΔͷ͔? - ͍͔ͭ͘ͷॺ໊νΣʔϯΛݩʹɺύεσʔλ͕ਖ਼͍͔͠ݕূͰ͖ΔΑ͏ʹ͍ͯ͠Δ 1. pass.jsonը૾ϑΝΠϧͷSHA-1ϋογϡΛܭࢉͯ͠manifests.jsonʹ֨ ೲ͢Δ 2.ʮ2-0. ֤छূ໌ॻͷ༻ҙʯͰ༻ҙͨ͠Certificates+WWDR(World Wide
Developer Relations தؒূ໌ॻ)Ͱ manifests.json Λެ։伴ॺ໊Λൃߦ - PKCS#7(҉߸Խσʔλॺ໊ΛؚΉϝοηʔδަܗࣜنఆ)ॺ໊Λ࡞͢Δ 3. σʔλ+ॺ໊ΛZIPѹॖ -> ֦ுࢠΛ.pkpassʹมߋ Ϥγ👌 2-2. ύεͷσʔλΛॺ໊͢Δ 21
3. ࣮ࡍʹύεΛߏங͢Δ 22
- ࠓճΠτʔϤʔΧυʔͷϙΠϯτΧʔυΛApple WalletʹೖΕ͍ͨ - ͪͳΈʹɺར༻ن֬ೝࡁΈ(ϙΠϯτΧʔυͷόʔίʔυෳʹؔ͢Δهड़ͳ͍) - όʔίʔυ࣌ؒʹΑͬͯมԽ͠ͳ͍ - े࣮ݱՄೳͳ͜ͱݕূࡁΈ 3.
࣮ࡍʹύεΛߏங͢Δɹ 23
3. ࣮ࡍʹύεΛߏங͢Δɹ 24
25 ͬͯ͜ͱͰ!
- νέοτͬͯݴΘΕͨΒΠϕϯτνέοτͰ͢ΑͶʙ - ͱ͍͏͜ͱͰɺSupabase(Database)+Stripe(ܾࡁ)+Flutter Web(ϑϩϯτ Τϯυ)ͰνέοτཧγεςϜΛ࡞ͬͯΈ·ͨ͠ ticket.yumnumm.dev github.com/YumNumm/ticket-system 4. [͓·͚]
ಈతੜ͢ΔΑ͏ʹͯ͠Έ·ͨ͠ 26
- νέοτͬͯݴΘΕͨΒΠϕϯτνέοτͰ͢ΑͶʙ - ͱ͍͏͜ͱͰɺSupabase(Database)+Stripe(ܾࡁ)+Flutter Web(ϑϩϯτ Τϯυ)ͰνέοτཧγεςϜΛ࡞ͬͯΈ·ͨ͠ ticket.yumnumm.dev github.com/YumNumm/ticket-system - νέοτੜCloudflare
Workers(αʔόϨεJS࣮ߦڥ)Ͱ࣮ߦ - TypeScriptͰهड़ - ແྉͰࢼͤΔͷͰؾ͕͍ͨΒݟͯΈ͍ͯͩ͘͞ 4. [͓·͚] ಈతੜ͢ΔΑ͏ʹͯ͠Έ·ͨ͠ 27
- νέοτͬͯݴΘΕͨΒΠϕϯτνέοτͰ͢ΑͶʙ - ͱ͍͏͜ͱͰɺSupabase(Database)+Stripe(ܾࡁ)+Flutter Web(ϑϩϯτ Τϯυ)ͰνέοτཧγεςϜΛ࡞ͬͯΈ·ͨ͠ ticket.yumnumm.dev github.com/YumNumm/ticket-system - νέοτੜCloudflare
Workers(αʔόϨεJS࣮ߦڥ)Ͱ࣮ߦ - TypeScriptͰهड़ - αϯϓϧύε https://api.ticket.yumnumm.dev/sample/wallet ͔Β DLͰ͖·͢! 4. [͓·͚] ಈతੜ͢ΔΑ͏ʹͯ͠Έ·ͨ͠ 28 ͍͔ͭ͘᠘͕͋ΔͷͷɺTSͷܕʹैͬͯຒΊ ͍͚ͯͩ͘ͳͷͰɺׂͱָʹߏஙͰ͖·͢
- Apple WalletͰͷύεੜׂͱָʹͰ͖Δ - ΞϓϦαʔϏεʹΈࠐΉ͚ͩͰͳ͘ɺࣗ༻ʹύεΛΉͷΞϦ(Ex. ϙ ΠϯτΧʔυɾֶੜূ) - نϧʔϧʹؾΛ͚ͭͯ -
ಈతʹੜ͢Δ͜ͱՄೳ - ຊLTͰѻ͍·ͤΜͰ͕ͨ͠ɺApple Push Notification Service(APNs)Λ ར༻ͯ͠ αʔό͔Βಈతʹ༰Λॻ͖͑Δ͜ͱͰ͖·͢ - ௨ΛૹͬͨΓͰ͖Δ 5. ·ͱΊ 29
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠! 30 Follow me on Twitter: @YumNumm νέοτཧγεςϜ Twitter