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
Custom Group Activities
Search
Tachibana Kaoru
June 23, 2021
Technology
1.5k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Custom Group Activities
Tachibana Kaoru
June 23, 2021
More Decks by Tachibana Kaoru
See All by Tachibana Kaoru
GeoLocationAnchor and MKTileOverlay
toyship
0
400
Synchronized iPhones, Again!
toyship
2
1.7k
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
690
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
DatadogのBits Chatが開発組織にもたらしたもの / What Bits Chat Has Brought Us
sms_tech
1
270
AI-DLC実践録_フルサイクル開発への挑戦
miyuc
0
130
20分でわかるセキュアAPI
nwiizo
2
280
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
Kiro Crew入門 - 常駐エージェントの仕組みと使いどころ / Intro to Kiro Crew
k_adachi_01
1
140
モバイルアプリ開発概論2026
recruitengineers
PRO
6
620
QAエンジニア起点で進める、SmartHRにおける信頼性向上について
kaomi_wombat
1
140
LLM・AIエージェントシステムベストプラクティス
shibuiwilliam
6
1.3k
私がブラウザを自作したくなった理由
supurazako
1
240
SO-101×VLAによる3色キューブのピック&プレース
abeja
0
210
え?フロントエンドエンジニアの ワイがインフラも!?
puku0x
1
610
Sets in Go
ramalho
1
790
Featured
See All Featured
Writing Fast Ruby
sferik
630
63k
Making Projects Easy
brettharned
120
6.7k
Navigating Team Friction
lara
192
16k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
240
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
390
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
370
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
430
A designer walks into a library…
pauljervisheath
211
24k
Transcript
Custom Group Activities @TachibanaKaoru 2021/06/23 #potatotips #74
ࣗݾհ @TachibanaKaoru Freelance iOS Engineer ࠓͷWWDCΧφμͰݟ͍ͯ·ͨ͠ɻ ࠓ·ͩؼࠃޙͷೋिִؒظؒதɻ
Custom Group Activitiesͱ FaceTimeͷηογϣϯΛͬͯΞϓϦಠࣗͷใΛΓͱΓ͢Δ͜ͱ͕ Ͱ͖ΔΈɻ αʔόʔΛ༻ҙͤͣʹήʔϜͷάϧʔϓରઓάϧʔϓ࡞ۀͳͲΛ࣮ ͢Δ͜ͱ͕Ͱ͖Δɻ iOS15͔Βαϙʔτ
None
None
None
None
How to implement Group Activities add entitlement (com.apple.developer.group-session) de fi
ne activity model prepareForActivation activate join
de fi ne activity model struct TextTogetherActivity: GroupActivity{ static let
activityIdentifier = "org.toyship.characters.text" } extension TextTogetherActivity{ var metadata: GroupActivityMetadata{ var data = GroupActivityMetadata() data.type = .generic data.title = "character" data.fallbackURL = URL(string: "") return data } }
prepareForActivation let myActivity = TextTogetherActivity() async { switch await myActivity.prepareForActivation()
{ case .activationDisabled: prepareStateLabel.text = "(disable)" case .activationPreferred: prepareStateLabel.text = "prepare OK" case .cancelled: prepareStateLabel.text = "cancelled" default: prepareStateLabel.text = "(unknown status)" } }
activate let myActivity = TextTogetherActivity() myActivity.activate()
join async{ for await session in TextTogetherActivity.sessions(){ switch session.state{ case
GroupSession<TextTogetherActivity>.State.joined: break case GroupSession<TextTogetherActivity>.State.waiting: session.join() default: break } } }
Group Activities Session FaceTime session Group Activities session
Group Activities Session FaceTime session ActivityΛ ࡞ͬͯ activate ͢Δ Group
Activities session FactTimeͷsession͕͋Δঢ়ଶͰactivateΛ͢ΔͱɺଞͷࢀՃ ऀʹԻͰ௨͞Ε·͢ɻ
Group Activities Session FaceTime session Group Activities session join APIͰjoinΛݺͿલʹɺsystem
UIͰɺ ʮΞϓϦ໊ʯʹࢀՃ͠·͔͢ʁͱ͍ ͏μΠΞϩάʹOK͢Δඞཁ͋Γɻ
System UI Dialog Here!
Group Activities Session FaceTime session Group Activities session join
Group Activities Session FaceTime session Group Activities session
Session timeline prepareForActivation prepareForActivation activate join session owner (system UI
Ͱ OK)
How to send and receive messages de fi ne message
model send message receive message
de fi ne message model struct ShareText: Codable{ let id:
UUID var name: String var position: CGPoint = CGPoint(x: 0, y: 0) var red: CGFloat = 1.0 var green: CGFloat = 1.0 var blue: CGFloat = 1.0 var alpha: CGFloat = 1.0 }
send message let messenger = GroupSessionMessenger(session: session) let newData =
ShareText(id: UUID(), name: "Hello") messenger.send(newData, completion: {error in // check error })
receive message async{ for await session in TextTogetherActivity.sessions(){ let messenger
= GroupSessionMessenger(session: session) let task: Task.Handle = detach { [weak self] in for await (message, _ ) in messenger.messages(of: ShareText.self){ await self?.checkReceivedText(message) } } tasks.insert(task) } }
Session information ηογϣϯʹࢀՃ͍ͯ͠Δਓ֬ೝՄೳ ͨͩ͠ɺਓ૿ݮͷ௨ͳͲൃੜ͠ͳ͍ ηογϣϯʹࢀՃ͍ͯ͠ΔਓͷใʢFaceTimeΞΧϯτ໊ͳͲʣऔಘͰ ͖ͳ͍ɻ ૹड৴ϝοηʔδʹɺࢀՃऀͷIDʢಗ໊IDʣՃ͞Ε͍ͯΔ͕ɺͦΕҎ্ ͷใͳ͍ͨΊɺඞཁͳ߹ʹɺૹड৴ϝοηʔδʹؚΊͨ΄͏͕Α͍ɻ
Pros and Cons ηογϣϯΛཧ͢Δඞཁ͕ʢ͋·Γʣͳ͍ αʔόʔߏஙͷඞཁ͕ͳ͍
Pros and Cons FaceTimeͷΞΧϯτ͕ඞཁ iOS15͕ඞཁ ࢀՃऀͷใ͕खʹೖΒͳ͍
delay on Group Activities ݱ࣌ͰɺηογϣϯΛషΔͷ·Ͱ͕͔͔࣌ؒΔ͜ͱ͕͋Δ ϝοηʔδૹड৴࣌ͷԆ΄ͱΜͲײ͡ͳ͍͕ɺࢀՃਓωοτ ϫʔΫڥʹେ͖͘ґଘ͢ΔͱࢥΘΕΔ FaceTimeͷάϧʔϓ௨࠷େ32ਓ͕ͩɺGroup ActivitiesͰԿਓ·Ͱ αϙʔτ͢Δͷ͔ෆ໌ɻ
Environment Tips ಉ͡FaceTimeΞΧϯτʴෳͷσόΠεͰFaceTime SessionΛ࡞ͬͯ ͏·͍͔͘ͳ͍߹͕͋Δɻ WWDCͷϓϨθϯͰ͏·͍͍ͬͯ͘ΔΑ͏ʹݟ͑·͕ͨ͠ɺखݩͰ ͏·͍͖͘·ͤΜͰͨ͠ɻ ։ൃ༻ʹผFaceTimeΞΧϯτΛ༻ҙͨ͠ํ͕҆શɻ
Environment Tips Group ActivitiesରԠΞϓϦͷTestFlightͰͷɺݱ࣌Ͱαϙʔτ ͞Ε͍ͯ·ͤΜɻ Group ActivitiesͷΞϓϦͰɺGroupAcͰඞཁͳ com.apple.developer.group-sessionͷcode signing entitlement͕ඞཁͰ
͕͢ɺͦΕΛద༻͢ΔͱiTunes connectͰͷΞοϓϩʔυ࣌ʹΤϥʔ͕ ൃੜ͠·͢ɻ
·ͱΊ Custom ActivitiesɺάϧʔϓηογϣϯΛ؆୯ʹ࣮Ͱ͖Δͷ͕ັྗ తɻ ͨͩ͠ɺ։ൃڥΛ༻ҙ͢Δͷ͕গ͠େม͔ɻ iOS15͕ෳ͋ͬͨΒࢼͯ͠Έ·͠ΐ͏ɻ