Slide 1

Slide 1 text

Custom Group Activities @TachibanaKaoru 2021/06/23 #potatotips #74

Slide 2

Slide 2 text

ࣗݾ঺հ @TachibanaKaoru Freelance iOS Engineer ࠓ೥ͷWWDC͸ΧφμͰݟ͍ͯ·ͨ͠ɻ ࠓ೔͸·ͩؼࠃޙͷೋिִؒ཭ظؒதɻ

Slide 3

Slide 3 text

Custom Group Activitiesͱ͸ FaceTimeͷηογϣϯΛ࢖ͬͯΞϓϦಠࣗͷ৘ใΛ΍ΓͱΓ͢Δ͜ͱ͕ Ͱ͖Δ࢓૊Έɻ αʔόʔΛ༻ҙͤͣʹήʔϜͷάϧʔϓରઓ΍άϧʔϓ࡞ۀͳͲΛ࣮૷ ͢Δ͜ͱ͕Ͱ͖Δɻ iOS15͔Βαϙʔτ

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

How to implement Group Activities add entitlement (com.apple.developer.group-session) de fi ne activity model prepareForActivation activate join

Slide 9

Slide 9 text

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 } }

Slide 10

Slide 10 text

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)" } }

Slide 11

Slide 11 text

activate let myActivity = TextTogetherActivity() myActivity.activate()

Slide 12

Slide 12 text

join async{ for await session in TextTogetherActivity.sessions(){ switch session.state{ case GroupSession.State.joined: break case GroupSession.State.waiting: session.join() default: break } } }

Slide 13

Slide 13 text

Group Activities Session FaceTime session Group Activities session

Slide 14

Slide 14 text

Group Activities Session FaceTime session ActivityΛ ࡞ͬͯ activate ͢Δ Group Activities session FactTimeͷsession͕͋Δঢ়ଶͰactivateΛ͢ΔͱɺଞͷࢀՃ ऀʹԻͰ௨஌͞Ε·͢ɻ

Slide 15

Slide 15 text

Group Activities Session FaceTime session Group Activities session join APIͰjoinΛݺͿલʹɺsystem UIͰɺ ʮΞϓϦ໊ʯʹࢀՃ͠·͔͢ʁͱ͍ ͏μΠΞϩάʹOK͢Δඞཁ͋Γɻ

Slide 16

Slide 16 text

System UI Dialog Here!

Slide 17

Slide 17 text

Group Activities Session FaceTime session Group Activities session join

Slide 18

Slide 18 text

Group Activities Session FaceTime session Group Activities session

Slide 19

Slide 19 text

Session timeline prepareForActivation prepareForActivation activate join session owner (system UI Ͱ OK)

Slide 20

Slide 20 text

How to send and receive messages de fi ne message model send message receive message

Slide 21

Slide 21 text

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 }

Slide 22

Slide 22 text

send message let messenger = GroupSessionMessenger(session: session) let newData = ShareText(id: UUID(), name: "Hello") messenger.send(newData, completion: {error in // check error })

Slide 23

Slide 23 text

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) } }

Slide 24

Slide 24 text

Session information ηογϣϯʹࢀՃ͍ͯ͠Δਓ਺͸֬ೝՄೳ ͨͩ͠ɺਓ਺૿ݮͷ௨஌ͳͲ͸ൃੜ͠ͳ͍ ηογϣϯʹࢀՃ͍ͯ͠Δਓͷ৘ใʢFaceTimeΞΧ΢ϯτ໊ͳͲʣ͸औಘͰ ͖ͳ͍ɻ ૹड৴ϝοηʔδʹ͸ɺࢀՃऀͷIDʢಗ໊IDʣ͸෇Ճ͞Ε͍ͯΔ͕ɺͦΕҎ্ ͷ৘ใ͸ͳ͍ͨΊɺඞཁͳ৔߹ʹ͸ɺૹड৴ϝοηʔδʹؚΊͨ΄͏͕Α͍ɻ

Slide 25

Slide 25 text

Pros and Cons ηογϣϯΛ؅ཧ͢Δඞཁ͕ʢ͋·Γʣͳ͍ αʔόʔߏஙͷඞཁ͕ͳ͍

Slide 26

Slide 26 text

Pros and Cons FaceTimeͷΞΧ΢ϯτ͕ඞཁ iOS15͕ඞཁ ࢀՃऀ΍୺຤ͷ৘ใ͕खʹೖΒͳ͍

Slide 27

Slide 27 text

delay on Group Activities ݱ࣌఺Ͱ͸ɺηογϣϯΛషΔͷ·Ͱ͕͔͔࣌ؒΔ͜ͱ͕͋Δ ϝοηʔδૹड৴࣌ͷ஗Ԇ͸΄ͱΜͲײ͡ͳ͍͕ɺࢀՃਓ਺΍ωοτ ϫʔΫ؀ڥʹେ͖͘ґଘ͢ΔͱࢥΘΕΔ FaceTimeͷάϧʔϓ௨࿩͸࠷େ32ਓ͕ͩɺGroup ActivitiesͰԿਓ·Ͱ αϙʔτ͢Δͷ͔͸ෆ໌ɻ

Slide 28

Slide 28 text

Environment Tips ಉ͡FaceTimeΞΧ΢ϯτʴෳ਺ͷσόΠεͰFaceTime SessionΛ࡞ͬͯ ΋͏·͍͔͘ͳ͍৔߹͕͋Δɻ WWDCͷϓϨθϯͰ͸͏·͍͍ͬͯ͘ΔΑ͏ʹݟ͑·͕ͨ͠ɺखݩͰ ͸͏·͍͖͘·ͤΜͰͨ͠ɻ ։ൃ༻ʹผFaceTimeΞΧ΢ϯτΛ༻ҙͨ͠ํ͕҆શɻ

Slide 29

Slide 29 text

Environment Tips Group ActivitiesରԠΞϓϦͷTestFlightͰͷ഑෍͸ɺݱ࣌఺Ͱ͸αϙʔτ ͞Ε͍ͯ·ͤΜɻ Group ActivitiesͷΞϓϦͰ͸ɺGroupAcͰඞཁͳ com.apple.developer.group-sessionͷcode signing entitlement͕ඞཁͰ ͕͢ɺͦΕΛద༻͢ΔͱiTunes connectͰͷΞοϓϩʔυ࣌ʹΤϥʔ͕ ൃੜ͠·͢ɻ

Slide 30

Slide 30 text

·ͱΊ Custom Activities͸ɺάϧʔϓηογϣϯΛ؆୯ʹ࣮૷Ͱ͖Δͷ͕ັྗ తɻ ͨͩ͠ɺ։ൃ؀ڥΛ༻ҙ͢Δͷ͕গ͠େม͔΋ɻ iOS15୺຤͕ෳ਺͋ͬͨΒࢼͯ͠Έ·͠ΐ͏ɻ