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
パラレルの通話を支える iOS アプリ上での技術
Search
Naoki ISHIKAWA
July 30, 2021
Technology
2.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
パラレルの通話を支える iOS アプリ上での技術
https://radiotalk.connpass.com/event/219952/
Naoki ISHIKAWA
July 30, 2021
More Decks by Naoki ISHIKAWA
See All by Naoki ISHIKAWA
メルペイのエンジニアリング組織の変化と目指すチーム像
jarinosuke
5
6.9k
RIBs
jarinosuke
2
1.9k
US 版 Mercari をまるごと1から作り直した話
jarinosuke
2
4.5k
メルカリiOSアプリ開発の現状とこれから / Mercari Day 2017
jarinosuke
3
6.8k
Drink Meetup with Mercari #36
jarinosuke
0
1.2k
Switching Icon.png depending on each environment
jarinosuke
2
11k
Other Decks in Technology
See All in Technology
絵ではじめるKubernetesセキュリティ
aoi1
3
630
開発投資の期待値を上げるプロダクトロードマップづくり ~プロダクトエンジニアが越境して事業を伸ばす~
kekekenta
1
190
AIに任せた品質は、誰が見立てるのか - AI時代のテストマネジメント
nakanao
2
1.7k
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
4
200
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
2
540
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
2k
登壇の自信を奪う3匹のオバケ / 3 Ghosts That Rob You of Your Confidence in Public Speaking
pauli
9
970
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
2
930
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
0
250
Goodbye ShellScript, Hello File-based App
shunsock
0
110
GoのInterface内部構造から学ぶ!最高パフォーマンスを出すコード設計
yappli_developers
0
100
品質と信頼性を地続きにする
grimoh
0
470
Featured
See All Featured
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
540
30 Presentation Tips
portentint
PRO
1
400
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
420
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
Optimizing for Happiness
mojombo
378
71k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
520
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Abbi's Birthday
coloredviolet
4
10k
HDC tutorial
michielstock
2
870
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Transcript
Naoki ISHIKAWA @jarinosuke 2021/7/29 iOS Tech talk ύϥϨϧͷ௨Λࢧ͑Δ iOS ΞϓϦ্Ͱͷٕज़
1
ࣗݾհ 2
ࣗݾհ • 2010ʹϠϑʔʢYahoo! JAPANʣʹΤϯδχΞͱͯ͠ೖࣾɻͦͷޙΠάχε ʹͯेݸͷΞϓϦ։ൃܦݧΛܦͯɺ2016ʹϝϧΧϦస৬ɻϝϧϖΠ։ ൃɺΤϯδχΞϦϯάϚωʔδϟʔΛܦͯ202011݄ʹύϥϨϧʹೖࣾɻ • https://www.wantedly.com/companies/parallel/post_articles/333769 3
ΞδΣϯμ • ✅ࣗݾհ • ύϥϨϧͷઆ໌ • ύϥϨϧͷΞϓϦ্Ͱ࣮ݱ͍ͨ͜͠ͱ • ͍ͬͯΔ֤ٕज़ͷৄࡉ 4
ύϥϨϧͷઆ໌ 5
Copyright © Parallel Inc. All Rights Reserved. ༑ୡͱ༡Δ௨ΞϓϦʮύϥϨϧʯ 6 App
Store ධՁɿ4.7/5.0ʢ 2.3ສ݅ʣ ύϥϨϧͷྑ͍༑ୡͱ௨Λܨ͗ͳ͕ΒɺήʔϜͨ͠ΓಈըΛݟͨΓͯ͠༡Δ௨ΞϓϦͰ͢ ᶃ ๛ͳ௨ػձͷग़ • ༑ୡͷεςʔλεදࣔ • ؆୯ελϯϓΞΫγϣϯ • ௨։࢝࣌ͷϓογϡ௨ ᶄ ࠷దͳ௨ڥ • ݸผʹ௨ԻྔΛௐՄೳ • ѹతʹԆͳ௨৴ ᶅ εϚϗ࠷దԽ͞ΕͨUI/U X • ొ10ඵͰྃ • ͍׳ΕͨUI/UXͰ͙͢ʹ͑Δ ᶆ Ұॹʹ༡ΔύʔςΟʔίϯςϯπ • αΫοͱ༑ୡͱ༡Δίϯςϯπ͕๛ • ϘλϯҰͭͰڞಉମݧ͕Մೳ
ύϥϨϧͷΞϓϦ্Ͱ࣮ݱ͍ͨ͜͠ͱ 7
ύϥϨϧͷΞϓϦ্Ͱ࣮ݱ͍ͨ͜͠ͱ • ߴ࣭ͳԻ • ϦΞϧλΠϜͳϝοηʔδϯά • ༷ʑͳϑΥʔϚοτͷίϯςϯπͷಋೖ 8
ύϥϨϧͷΞϓϦ্Ͱ࣮ݱ͍ͨ͜͠ͱ • ߴ࣭ͳԻ • ϦΞϧλΠϜͳϝοηʔδϯά • ༷ʑͳϑΥʔϚοτͷίϯςϯπͷಋೖ 9
ϦΞϧλΠϜͳϝοηʔδϯά • HTTPS + Push ௨Ҏ্ʹ ϦΞϧλΠϜੑΛߴΊ͍ͨ • ϢʔβʔͷΦϯϥΠϯͷදࣔɺνϟοτૹ৴ɺϧʔϜͷঢ়ଶมԽ •
WebSocket • Starscream 10
WebSocket ֓ཁ • ௨࣌ • background ਐೖ࣌ଓΛܧଓ • background mode:
audio Λࢦఆ͍ͯ͠ΔͷͰɺ௨த background Ͱ main thread ͷϥϯϧʔϓܧଓ͢ΔͨΊ • ඇ௨࣌ • background ਐೖ࣌ʹஅɺforeground ʹͬͨ࣌ʹଓ 11
WebSocket ֓ཁ • ௨࣌ • background ਐೖ࣌ଓΛܧଓ • background mode:
audio Λࢦఆ͍ͯ͠ΔͷͰɺ௨த background Ͱ main thread ͷϥϯϧʔϓܧଓ͢ΔͨΊ • ඇ௨࣌ • background ਐೖ࣌ʹஅɺforeground ʹͬͨ࣌ʹଓ 12
WebSocket background Ͱ௨தʹΕͯ͠·͏ݪҼͱରॲํ๏ • ݪҼ • background ௨தʹ௨৴͕ Cellular <->
WiFi Ͱมߋ͞Εͨͱ͖ • ରॲ • heartbeat(ping/pong) ͷಋೖ • ఆظతʹ Timer Λͬͯૄ௨֬ೝ 13
ύϥϨϧͷΞϓϦ্Ͱ࣮ݱ͍ͨ͜͠ͱ • ߴ࣭ͳԻ • ✅ϦΞϧλΠϜͳϝοηʔδϯά • ༷ʑͳϑΥʔϚοτͷίϯςϯπͷಋೖ 14
༷ʑͳϑΥʔϚοτͷίϯςϯπͷಋೖ • iOS Native • WebView • Unity as a
Library • Broadcast Extension 15
༷ʑͳϑΥʔϚοτͷίϯςϯπͷಋೖ • iOS Native • WebView • Unity as a
Library • Broadcast Extension 16
Unity as a Library • ʲUnityʳMirrativͷEmbedding UnityΛߋ৽ͨ͠: ࣮ફ Unity as
a Library • ͪ͜ΒΛࢀߟʹΞϓϦʹ݁߹ • Ռ UnityFramework.framework Λ repos ʹ push ͢Δ • ͦͷ repos Λ submodule ͰऔΓࠐΉ ڥߏங 17
Unity as a Library • Unity UIWindow Λ͏Ұͭ࡞͍ͯ͠Δ •
Unity ͱ app ͷ window Λަޓʹ makeKeyAndVisible ͠ͳ͕Βը໘ભҠ • Unity ͷ view ্ʹɺUIViewController ΛΦʔόʔϨΠ͍ͤͯ͞Δ • Unity -> Native ͷϝοηʔδϯά • Unity ͷதʹ NativeCallsProxy protocol Λఆٛ • ͦΕʹద߹ͨ͠ object ΛΞϓϦଆͰ `FrameworkLibAPI.registerAPIforNativeCalls` ݺ ͼग़͠ొ ࣮ 18
Unity as a Library • େมͳͱ͜Ζ • όΠφϦαΠζ͕େ͖͘ͳΔ • Unity
ݻ༗ͷΫϥογϡ͕ൃੜ͢Δ • Ϋϥογϡϩάͷղੳ͕͍͠ ࣮ 19
Broadcast Extension • ը໘ڞ༗ʹ༻͍Δ • ReplayKit (2) Λ༻ • 2
͔ΒγεςϜඪ४ͷUIΛͬͯɺʹөΔը໘Λ৴Ͱ͖ΔΑ͏ʹ • Կ͔ͱෆ҆ఆ • Invalid broadcast session Ͱݕࡧ͢Δͱɺը໘ڞ༗Λαϙʔτ͍ͯ͠Δ ΞϓϦ͕Θ͔Δ ֓ཁ 20
Broadcast Extension • App <-> Broadcast Extension ؒͷΠϕϯτ௨͕͍͠ • ࣮ࡍͷը໘ڞ༗ͷ։࢝ͱऴྃΛΞϓϦଆͰΓ͍ͨ
• capturedDidChangeNoti fi cation UIScreen.isCaptured ͋Δ • ͜Εͩͱը໘ڞ༗͚ͩͰͳ͘ɺը AirPlay ରʹͳͬͯ͠·͏ • App Group ܦ༝ͰϑϥάΛड͚͍ͯ͠Δ(!!!) ࣮ 21
ΞδΣϯμ • ✅ࣗݾհ • ✅ύϥϨϧͷઆ໌ • ✅ύϥϨϧͷΞϓϦ্Ͱ࣮ݱ͍ͨ͜͠ͱ • ✅͍ͬͯΔ֤ٕज़ͷৄࡉ 22
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 23