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
410
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
PdMをやめて、 "プロダクトビルダー"という 働き方に変えました / PdM to Product Builder
shikichee
2
680
Guerilla InnerSource in enterprises, during the AI hype
onenashev
PRO
0
140
魔法少女がClaude Codeを監視する / ccportal-deck
noriyukitakei
3
130
PfEingのアプローチで働こう
rindrics
0
160
AIエージェントを雇う前に決める5つのこと
knishioka
1
150
Genie Code ワークショップ 応用編 / Genie-Code-Workshop-advanced
databricksjapan
PRO
0
300
Self Healing Rollouts: Automating Production Fixes with Agentic AI
kdubois
0
140
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
6
6.7k
V8コントリビュート超入門
riyaamemiya
0
130
APIセキュリティを組織で実現するには~注力する点と設計・実装に入れたい対策~
riiimparm
3
930
bet_ai_day_2026_session02
agenticsec
1
910
Benchmarking Vector Databases: pgvector vs. LanceDB
tsho
0
130
Featured
See All Featured
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
450
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Done Done
chrislema
186
16k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Designing Powerful Visuals for Engaging Learning
tmiket
1
530
Building the Perfect Custom Keyboard
takai
2
860
Rails Girls Zürich Keynote
gr2m
96
14k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
It's Worth the Effort
3n
188
29k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
760
How to make the Groovebox
asonas
2
2.4k
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͕ෳ͋ͬͨΒࢼͯ͠Έ·͠ΐ͏ɻ