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
医療の現場を変革に挑戦した半年間の軌跡 - PythonとAIで現場を変える / From Code to Care
soudai
PRO
1
620
OpenID for Verifiable Credentials 実装から見えた相互運用性確保までの道のり(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
270
フィジカルAIの知識ゼロの僕でも AIを使えばここまでできた
tatsuya1970
0
180
内製AIチャットボット開発で学んだ Datadog Agent Observability活用術
mkdev10
0
140
ブラウザで変わるID連携(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
260
Kiro5兄弟のいまどきのセキュリティ基礎知識
kentapapa
0
250
AI画像認識を活用したゲーム内決済処理検証の自動化
gree_tech
PRO
0
500
2027年のMetricKit
kantacky
0
180
internal/testlog で遊ぼう
rokuosan
0
220
暗号化?某ファイルストレージはどうなるの!? 3rd Partyとうまく付き合う秘密度ラベル設計
kasada
0
200
[ホンマでっか SRE] あなたはなぜ SRE に?
_awache
0
150
三人寄ればチューリング完全
puhitaku
6
3.2k
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
174
15k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Thoughts on Productivity
jonyablonski
76
5.3k
Typedesign – Prime Four
hannesfritz
42
3.1k
Statistics for Hackers
jakevdp
799
230k
エンジニアに許された特別な時間の終わり
watany
108
250k
A Tale of Four Properties
chriscoyier
163
24k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
450
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.5k
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͕ෳ͋ͬͨΒࢼͯ͠Έ·͠ΐ͏ɻ