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
Synchronized iPhones, Again!
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Tachibana Kaoru
September 21, 2020
Technology
1.7k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Synchronized iPhones, Again!
iOSDC 2020
https://fortee.jp/iosdc-japan-2020/proposal/3a9b496e-8745-4d1d-8952-8ac45a42ca8a
Tachibana Kaoru
September 21, 2020
More Decks by Tachibana Kaoru
See All by Tachibana Kaoru
GeoLocationAnchor and MKTileOverlay
toyship
0
420
Custom Group Activities
toyship
3
1.5k
ARKit4.pdf
toyship
1
2.3k
Custom Gesture Recognizer on iOS
toyship
3
1.5k
HEVC Video with Alpha Channel
toyship
1
1.3k
RealityKit & Reality Composer
toyship
3
700
ARKit3
toyship
4
7.7k
UIViewPropertyAnimator and Easing
toyship
2
1.2k
Synchronized iPhones!
toyship
3
5.1k
Other Decks in Technology
See All in Technology
12 個 Tool と、 4,096 Token
hlum
0
140
hackers_champloo_2026_tidb
makocchi
0
140
AI時代のPRレビューにどう向き合うか?
kairim0
1
210
Post AI時代のリファクタリング実践記 / Refactoring in the post AI era
kaminashi
1
170
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
7
2.9k
パッチ更新でterraform initが落ちた日
grimoh
1
120
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
860
メルペイ 会計システム概要と歴史
mewuto
0
210
TinyGoでオブザーバビリティ?OpenTelemetryはTinyGoで使えるのか / Is OpenTelemetry available in TinyGo environment?
ymotongpoo
2
130
ハードウェアコンペでもAI駆動開発が進んでいる話
iotengineer22
1
690
DGX Spark でどこまでハッキングができるのか?
kash1064
0
850
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
880
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
1.6k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
360
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
370
Abbi's Birthday
coloredviolet
4
10k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
450
Visualization
eitanlees
153
17k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
Typedesign – Prime Four
hannesfritz
42
3.2k
Transcript
Synchronized iPhones, Again! iOSDC 2020 @TachibanaKaoru
Aboud Me @TachibanaKaoru ϑϦʔϥϯε iOS ΤϯδχΞ ຊϦΞϧΞόλʔͰొஃ͠·͢ɻ
ࠓͷ͓ ͨ͘͞ΜͷiPhone Λಉظ͢Δɻ
iPhoneͷಉظ ಉظͱ ͳΜΒ͔ͷωοτϫʔΫΛհͨ͠ঢ়ଶͰɺෳͷ͕ಉ͡ಈ͖Λ͢ Δ͜ͱɻ
DEMO
None
લఏ݅ ʢ̍ʣ͕20~30 ʢ̎ʣωοτϫʔΫʹґଘ͠ͳ͍ ʢ̏ʣࣗಈతͳάϧʔϐϯά ʢ̐ʣ༗ػతͳάϧʔϐϯά
લఏ݅ ʢ̍ʣ͕20~30 ٕज़తқΛߟྀ વ iPhone iPadʹݶΓ·͢ɻ
લఏ݅ ʢ̎ʣωοτϫʔΫʹґଘ͠ͳ͍ ܞଳճઢWiFi͕ͳͯ͘ಈ࡞͢Δɻ ͦͷ͋ͨΓͷެԂͰΩϟϯϓͰࢁͷ্Ͱେৎɻ αʔόʔϨεͰಈ࡞
લఏ݅ ʢ̏ʣࣗಈతͳάϧʔϐϯά ΞϓϦΛىಈ͢ΔͱࣗಈతʹάϧʔϓΛܗ͢Δɻ ʮˎˎͷάϧʔϓʹࢀՃ͠·͔͢ʁʯͱ͔ฉ͔ͳ͍ɻ Ϣʔβʔ͕खಈͰొ͢Δ͜ͱͳ͘ɺࣗಈͰଓ͢Δɻ
લఏ݅ ʢ̐ʣ༗ػతͳάϧʔϐϯά άϧʔϓʹ్த͔ΒͰࢀՃͰ͖Δ Ͳͷϝϯόʔ͕ͯ͠ɺάϧʔϓ͕γʔϜϨεʹܧଓ͢Δɻ
Demo Movie ߹ܭ35ͷiPhoneͷө૾͕ಉ ظ͢ΔσϞө૾Ͱ͕͢……
Demo Movie ͝ΊΜͳ͍͞ɻ ͜ΕARͰ͢ɻ
Demo Movie Reality Composer File + Xcode Ͱߏͨ͠AR ΞϓϦ Ͱ͢ɻ
RealityComposer Appleͷ3Dฤूπʔϧ 3DΦϒδΣΫτͷஔΞχϝʔγϣϯ ͷઃఆͳͲ͕ՄೳͰ͢ɻ ෳࡶͳϞσϦϯάͰ͖·ͤΜ͕ɺ͙͢ ͑ΔेछྨͷϞσϧؚ͕·Ε͍ͯ·͢ɻ ؆୯ͳARɾ3DΞϓϦΛͭ͘Δͷʹదͯ͠ ͍·͢ɻ
RealityComposerͱXcodeͷ࿈ܞ RealityComposerଆ͔ΒXcodeͷΞΫγϣϯΛىಈɻ Xcode͔ΒRealityComposerଆNotificationΛૹ৴ɻ ʢInterfaceBuilderͰIBActionΛఆٛ͠ɺͦͷActionதΛ࣮͢Δͷͱࣅ ͍ͯ·͢ɻʣ Notification Action
VideoMaterial iOS14.0Ҏ߱ͰɺRealityComposerͰɺಈըΛ࠶ੜ͢ΔVideoMaterial Λ ͏͜ͱ͕Ͱ͖·͢ɻ ମͷද໘Ͱ͖ͳө૾Λ࠶ੜ͢Δ͜ͱ͕Ͱ͖·͢ɻ
Demo Movie App RealityComposer Ͱɺ35ݸͷࠇ͍ϓ ϨʔτͷΦϒδΣΫτΛ࡞ɻ RealityCopomserଆͰɺBehaviorΛઃఆ ͠ɺͲΕ͔ΛClickͨ͠ΒXcodeଆͷ Action͕ىಈ͢ΔΑ͏ʹ͍ͯ͠·͢ɻ
Demo Movie App XcodeଆͷActionͰɺ͋Β͔͡ ΊࡱӨͯ͋ͬͨ͠ಈըΛηο τͨ͠VideoMaterialΛࠇ͍ϓ ϨʔτΦϒδΣΫτʹͷͤͯ ͍·͢ɻ
VideoMaterial ͷੜ var videoMaterial: VideoMaterial? if let url = Bundle.main.url(forResource:
"movie", withExtension: "mp4"){ let item = AVPlayerItem(asset: AVAsset(url: url)) let player = AVPlayer(playerItem: item) videoMaterial = VideoMaterial(avPlayer: player) }
VideoMaterialͷEntityͷՃ boxAnchor.actions.addMovieToiPhone.onAction = { entity in self.videoMaterial?.avPlayer?.play() let thinBox =
MeshResource.generateBox( width: 0.125, height: 0.01, depth: 0.065) let screenEntity = ModelEntity( mesh: thinBox, materials: [self.videoMaterial!]) entity?.addChild(screenEntity) }
Demo Movie App ӈͷө૾ͰARΞϓϦͰ࣮ݱ ͠·͕ͨ͠ɺ͜Εͱಉ͜͡ͱ Λ࣮ࡍͷͱ࣮ࡍͷΞϓϦ ͰͬͯΈΑ͏ɺͱ͍͏ͷ͕ ࠓͷ͓Ͱ͢ɻ ͜ͷϓϨθϯͷऴΘΓʹɺ ຊͷΞϓϦΛಈ࡞ͤͨ͞σ
ϞΛ͓ݟͤ͠·͢ɻ
લఏ݅ ʢ̍ʣ͕20~30 ʢ̎ʣωοτϫʔΫʹґଘ͠ͳ͍ ʢ̏ʣࣗಈతͳάϧʔϐϯά ʢ̐ʣ༗ػతͳάϧʔϐϯά
લఏ݅ ʢ̍ʣ͕20~30 ʢ̎ʣωοτϫʔΫʹґଘ͠ͳ͍ ʢ̏ʣࣗಈతͳάϧʔϐϯά ʢ̐ʣ༗ػతͳάϧʔϐϯά
Plan A : Core Bluetooth ۙڑແઢͱ͍͑Bluetooth पғͷແઢঢ়گʹґଘͤͣʹɺؒͰ௨৴Λ͢Δ͜ͱ͕Ͱ͖·͢ ͜ΕͰάϧʔϐϯάΛߦͬͯΈ·͢ɻ
Grouping with CoreBT CBCentral CBPeripheral CBCentral CBCentral CBCentral
Grouping with CoreBT Core BluetoothͰ̍ηογϣϯͷͷ্ݶ͕͋Γ·͢ɻ ڥσόΠεʹΑΔ͕ɺ͍͍ͩͨ̐ʙ̑͘Β͍ɻ ʢલఏ݅̍ΛΫϦΞͰ͖·ͤΜʣ
Plan B : Core BT & Core BT Core Bluetooth
ͰෳηογϣϯΛߟ͑ͯΈ·͠ΐ͏
Double Session ?
Double Session ?
Sessions in Core Bluetooth Core Bluetooth Ͱɺ1ϓϩηε͋ͨΓԼهͷηογϣϯ͔࣋ͯ͠ͳ͍ Peripheralͱͯ͠ͷηογϣϯ : 1
Centralͱͯ͠ͷηογϣϯ : 1
Double Session
Double Session ͜ͷ Peripheralͱ CentralΛ͔ͶΔɻ
Double Session ͜ͷߏ͕ಈ͚ 20ఔͷάϧʔ ϓ͕࡞Ͱ͖Δ ͣ……ɻ
࣮ͯ͠Έ·ͨ͠ɻ
Double Session πϦʔߏͷά ϧʔϓܗͰ͖ ͨͷͷɺඇৗʹ ෆ҆ఆ
Ͳ͏͠Α͏……ɻ
ͦͷλΠϛϯάͰ88%$
ωοτϫʔΫϥϘͰ૬ஊͯ͠Έ·ͨ͠
Plan C : Multipeer Connectivity ʮ ……ͬͯײ͡ͰωοτϫʔΫΛ࡞Γ͍ͨΜ͚ͩͲ͍͍Ҋ͋Δʁʯ : ͦΕͳΒ Multiplier
Connectivity͕͍͍Αʂ
Plan C : Multipeer Connectivity Multipeer ConnectivityɺωοτϫʔΫϨΠϠʔͱͯ͠Bluetooth·ͨ peer to peer
WiFiΛ͍ͬͯ·͢ɻ
Multipeer Connectivity Apple Engineer ʹΑΔͱɺݱࡏͰ΄ͱΜͲͷͰ peer to peer WiFi Λ͍ͬͯΔͦ͏ɻ
1ηογϣϯ͋ͨΓͷެশ̓ʙ̔ ෳͷηογϣϯΛ࣋ͭ͜ͱ͕Ͱ͖Δɻ
Single session network
Double session network
Double Session with MC ࣮ͯ͠Έͨͱ͜Ζɺ̎ͭͷηογϣϯͰ҆ఆͨ͠௨৴Λߦ͏͜ͱ͕Ͱ ͖·ͨ͠ɻ
લఏ݅ ʢ̍ʣ͕20~30 ʢ̎ʣωοτϫʔΫʹґଘ͠ͳ͍ ʢ̏ʣࣗಈతͳάϧʔϐϯά ʢ̐ʣ༗ػతͳάϧʔϐϯά
લఏ݅ ʢ̍ʣ͕20~30 ʢ̎ʣωοτϫʔΫʹґଘ͠ͳ͍ ʢ̏ʣࣗಈతͳάϧʔϐϯά ʢ̐ʣ༗ػతͳάϧʔϐϯά
MultipeerConnectivity Network ֤ɺଓ༻ͷ unique ͳ Peer IDΛੜ͠·͢ɻ(MCPeerID) ֤ɺMCNearbyServiceAdvertiserͰɺपғʹΞυόλΠζΛ͠·͢ɻ MCNearbyServiceBrowserΛ͏ͱɺपғͷΞυόλΠζΛ͍ͯ͠Δ Λൃݟ͢Δ͜ͱ͕Ͱ͖·͢ɻ
A͔ΒɺBଓ͢Δ߹ʹɺηογϣϯΛ࡞͠ɺInvitation ΛA͔ΒBૹ৴͢ΔɻB͕InvitationΛड͢Δͱηογϣϯཱ͕͢Δɻ
ΞυόλΠζ /// पғAdvertise͠·͢ɻ var advertiser: MCNearbyServiceAdvertiser? advertiser = MCNearbyServiceAdvertiser( ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹpeer:
myID, discoveryInfo: ["DeviceName":deviceName], serviceType: serviceID) advertiser?.delegate = self advertiser?.startAdvertisingPeer() BEWFSUJTJOH
पғͷͷ୳ࡧ /// BrowserΛ࡞͠ɺपғͷΛ୳ࡧ͠·͢ɻ var serviceBrowser: MCNearbyServiceBrowser? serviceBrowser = MCNearbyServiceBrowser(peer: myPeer,
serviceType: serviceID) serviceBrowser?.delegate = self serviceBrowser?.startBrowsingForPeers() /// delegateͰݟ͚ͭͨΛ֬ೝ͢Δ͜ͱ͕Ͱ͖·͢ɻ func browser(_ browser: MCNearbyServiceBrowser, foundPeer peerID: MCPeerID, withDiscoveryInfo info: [String : String]?) { } BEWFSUJTJOH CSPXTJOH
ଞͷͷଓ serviceBrowser?.invitePeer(peer, to: session, withContext: nil, timeout: 10.0) BEWFSUJTJOH CSPXTJOH
TFOE JOWJUBUJPO
Ϧʔμʔ͔ΒInvitationΛૹΔ
None
Ͳͷ͕Ϧʔμʔʁ
Ϧʔμʔͷܾఆ PeerID Λ Random ͳ Int PeerID ͷେখͰϦʔμʔΛܾఆ
ىಈʜʜ
֤ࣗ*%ΛऔಘɺΞυόλΠζ
पғͷͷ*%Λ୳ࡧ͠ɺʮʯ ͕ϦʔμʔͰ͋ΔͱΘ͔Δ पғͷͷ*%Λ୳ࡧ͠ɺ͕ࣗ
ϦʔμʔͰ͋ΔͱΘ͔Δɻ
ͭͷηογϣϯΛ࡞Γɺͦ ΕͧΕ*OWJUBUJPOΛૹ৴
session A session
B
લఏ݅ ʢ̍ʣ͕20~30 ʢ̎ʣωοτϫʔΫʹґଘ͠ͳ͍ ʢ̏ʣࣗಈతͳάϧʔϐϯά ʢ̐ʣ༗ػతͳάϧʔϐϯά
લఏ݅ ʢ̍ʣ͕20~30 ʢ̎ʣωοτϫʔΫʹґଘ͠ͳ͍ ʢ̏ʣࣗಈతͳάϧʔϐϯά ʢ̐ʣ༗ػతͳάϧʔϐϯά
άϧʔϓܗޙͷΠϕϯτ ৽ͨͳͷࢀՃ άϧʔϓ͔Βͷͷ
৽ͨͳͷࢀՃ ϦʔμʔΑΓऑ͍ ϦʔμʔΑΓڧ͍
ϦʔμʔΑΓऑ͍ͷࢀՃ session A
session B
ϦʔμʔΑΓڧ͍ͷࢀՃ session A
session B
ϦʔμʔΑΓڧ͍ͷࢀՃ طଘͷηογϣϯΛ
͍ͬͨΜऴྃ
ϦʔμʔΑΓڧ͍ͷࢀՃ ࠶ɺपғͷͷ
୳ࡧΛߦ͏ɻ
ϦʔμʔΑΓڧ͍ͷࢀՃ
ϦʔμʔΑΓڧ͍ͷࢀՃ ৽ͨͳηογϣϯͷ࡞
άϧʔϓ͔Βͷͷ ϦʔμʔҎ֎͕ Ϧʔμʔ͕
ϦʔμʔҎ֎ͷͷ ϦʔμʔҎ֎͕
ϦʔμʔҎ֎ͷͷ ϦʔμʔҎ֎͕ͯ͠ ηογϣϯܧଓ͢Δ
Ϧʔμʔͷ Ϧʔμʔ͕
Ϧʔμʔͷ Ϧʔμʔ͕͢Δͱ ೋͭͷηογϣϯʹଐ͢Δ͕ͳ͘ͳͬͯ͠·͏ ͨΊɺωοτϫʔΫ͕ܧଓͰ͖ͳ͍
session A session
B
session A session B
༗ػతͳάϧʔϐϯά ͜ΕͰԼهͷΠϕϯτͷͯ͢ʹରԠ͠ɺࣗݾ৫Խ͢Δάϧʔϐϯάͱ ͳΓ·ͨ͠ɻ ϦʔμʔΑΓऑ͍ͷࢀՃ ϦʔμʔΑΓڧ͍ͷࢀՃ Ϧʔμʔͷ ϦʔμʔҎ֎ͷͷ
άϧʔϐϯάͷલఏ݅ ʢ̍ʣ͕20~30 ʢ̎ʣωοτϫʔΫʹґଘ͠ͳ͍ ʢ̏ʣࣗಈతͳάϧʔϐϯά ʢ̐ʣ༗ػతͳάϧʔϐϯά
ʢຊͷʣDEMO
None
άϧʔϐϯάશମͷΠϕϯτઃܭ ࣮ࡍͷάϧʔϐϯάॲཧʹɺ៛ີͳάϧʔϓશମઃܭ͕ඞཁ MultipeerConnectivityͷෳηογϣϯͷΠϕϯτͷϋϯυϦϯά ͯ͢ͷͷϢʔβʔೖྗͷϋϯυϦϯά ͦͷଞγεςϜΠϕϯτ
άϧʔϐϯάશମͷΠϕϯτઃܭ άϧʔϓશମͷΠϕϯτϧʔϓΛϦʔμʔͰઃܭ͠ɺ௨ৗͷΠϕϯτ ϧʔϓͱผʹཧ͢Δ͜ͱ͕·͍͠ɻ
Ԡ༻
MCͷ double session Ͱ Eternal Network
MCͷ double session Ͱ Tree Network 73 iPhones!
iPhone 73 iPhone 11 ͷ࠷҆Ϟσϧ 74,800ԁʢ੫ผʣ 73ͩͱɺ੫ࠐΈͰ̒̌̌ສ̒̐̐̌ԁ ࢿ͕ۚू·ͬͨΒݺΜͰ͍ͩ͘͞ɻ
·ͱΊ MultiPeer ConnectivityͷෳηογϣϯΛ׆༻͢Δ͜ͱʹΑΓɺଟͷΛ ಉظ͢Δ͜ͱ͕Ͱ͖·͢ɻ ࣗݾ৫Խ͢ΔάϧʔϐϯάઃܭΛߦ͏߹ʹηογϣϯͷͷࢀՃɾ ॲཧʹҙ͢Δඞཁ͕͋Γ·͢ɻ ARΛ͏ͱৗੜ׆ͷதͰͷΞϓϦར༻ DEMO Λ؆୯ʹ࡞Ε·͢ɻ ϦΞϧΞόλʔͰͷొஃݟͨΑΓͣͬͱϋʔυͰ͢ɻࢎܽʹͳΓͦ͏Ͱ
͢ɻ͓͢͢Ί͠·ͤΜɻ