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
680
ARKit3
toyship
4
7.6k
UIViewPropertyAnimator and Easing
toyship
2
1.2k
Synchronized iPhones!
toyship
3
5k
Other Decks in Technology
See All in Technology
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
1.3k
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
1
160
SteampipeとExcel Power QueryでAWS構成定義書の作成を自動化する
jhashimoto
0
160
Agent Skills設計で柔軟性と硬さのバランスが難しい話
nassy20
0
140
秘密度ラベル初心者が第1歩でつまづかないための「設計・運用」ポイント
seafay
PRO
0
200
エラーバジェットのアラートのタイミングを考える.pdf
kairim0
0
170
Oracle Cloud Infrastructure:2026年6月度サービス・アップデート
oracle4engineer
PRO
0
130
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
8
1.9k
攻撃者視点で考えるDetection Engineering
cryptopeg
3
2k
Kiroで書いた 設計書 が AI レビューの 採点基準 になる
ezaki
0
130
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
1.3k
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
180
Featured
See All Featured
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
580
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
The Pragmatic Product Professional
lauravandoore
37
7.3k
How STYLIGHT went responsive
nonsquared
100
6.2k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
310
Building AI with AI
inesmontani
PRO
1
1.1k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Paper Plane (Part 1)
katiecoart
PRO
0
9.1k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
440
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
140
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Six Lessons from altMBA
skipperchong
29
4.3k
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͕ෳ͋ͬͨΒࢼͯ͠Έ·͠ΐ͏ɻ