PageSourceSearch

https://wwdc.ai/assets/226-DPT2AMbb.js

js wwdc.ai collected 2026-10-05 13:19:19 UTC 65,428 bytes, 162 lines download raw bytes

1import{j as i}from"./index-B8ft0nJ9.js";let l={title:"Create live communication experiences",description:"Use LiveCommunicationKit to present VoIP conversations in system UI, handle incoming and outgoing calls, and manage group membership and merging."},r={contents:[{heading:void 0,content:"Watch on Apple Developer"},{heading:"tldr",content:"LiveCommunicationKit centers real-time communication around `ConversationManager`, `Conversation`, handles, capabilities, and delegate-delivered actions."},{heading:"tldr",content:"Incoming conversations use PushKit VoIP pushes, then must be reported to `ConversationManager` before the push delegate method returns."},{heading:"tldr",content:"Outgoing conversations should be started with `StartConversationAction` and routed through the same delegate path as system-initiated actions."},{heading:"tldr",content:"Group conversations require accurate `members` and `activeRemoteMembers`, and advanced flows like merge and unmerge are handled through capabilities and delegate actions."},{heading:"why-adopt-livecommunicationkit",content:"LiveCommunicationKit gives real-time communication apps system-integrated conversation UI, including full-screen Lock Screen presentation, Dynamic Island support, Phone app Recents, contact details, Spotlight, and Siri entry points where applicable. Apple positions it as the modern replacement for traditional approaches such as `CXProvider` for apps that need richer live conversation integration."},{heading:"why-adopt-livecommunicationkit",content:"A conversation represents one live interaction and exists only while participants are in it. It is described by handles for participants and capabilities for what the conversation supports."},{heading:"why-adopt-livecommunicationkit",content:"Handles have a kind, value, and display name; supported kinds include phone number, email address, and generic string."},{heading:"why-adopt-livecommunicationkit",content:"Phone number and email handles let the system match saved contacts and show contact names and photos."},{heading:"why-adopt-livecommunicationkit",content:"Display names are used when a handle cannot be matched to a contact."},{heading:"why-adopt-livecommunicationkit",content:"Capabilities control which system UI controls and gestures are enabled, such as video, pausing, merging, and unmerging."},{heading:"conversation-lifecycle-and-manager-architecture",content:"Apps drive the lifecycle through a single `ConversationManager` and its delegate. The app reports new conversations and conversation events through the manager, while the system sends user-initiated work back to the app as `ConversationAction` values through the delegate."},{heading:"conversation-lifecycle-and-manager-architecture",content:"The lifecycle moves from ringing/idle, to joining while app setup completes, to joined when audio or video capture begins, and finally through leaving/left when the app tears down media and connections. Pausing, resuming, route changes, and capability changes are also reported through manager events so the system UI stays synchronized."},{heading:"conversation-lifecycle-and-manager-architecture",content:"Create the `ConversationManager` for the lifetime of the app, typically at launch."},{heading:"conversation-lifecycle-and-manager-architecture",content:"Configure ringtone, icon image data, group limits, Recents behavior, video supp
1ort, and supported handle types."},{heading:"conversation-lifecycle-and-manager-architecture",content:"Use one delegate action path for interactions from both system UI and in-app UI."},{heading:"conversation-lifecycle-and-manager-architecture",content:"Enable Audio and Voice over IP background modes for conversations that continue while backgrounded or locked."},{heading:"set-up-a-conversation-manager",content:"Configures how the app's conversations appear and behave across system UI, then installs the delegate that handles actions."},{heading:"incoming-conversations-with-pushkit",content:"Incoming conversations are delivered with a Voice over IP push. The app decodes the payload, builds a `Conversation.Update` with the caller handle and capabilities, and reports the new incoming conversation to the `ConversationManager`. PushKit wakes the app when it is not already running."},{heading:"incoming-conversations-with-pushkit",content:"A key constraint is that the app must report the conversation before the PushKit delegate method returns; otherwise the system will terminate the app. When the user answers, the system sends a `JoinConversationAction`, and the app performs async media setup before fulfilling the action."},{heading:"incoming-conversations-with-pushkit",content:"Include a stable conversation UUID and caller handle in the push payload."},{heading:"incoming-conversations-with-pushkit",content:"Report capabilities such as `.video`, `.pausing`, and `.merging` in the initial update when supported."},{heading:"incoming-conversations-with-pushkit",content:"In the join handler, verify the conversation exists, report connecting, set up media, report connected, then fulfill the action."},{heading:"incoming-conversations-with-pushkit",content:"Fail actions promptly when the conversation is missing or setup fail
1s so the system can clean up."},{heading:"report-an-incoming-conversation-from-a-voip-push",content:"Decodes the incoming VoIP push, constructs a conversation update, and reports it to the system."},{heading:"handle-a-join-action",content:"Routes system-delivered actions through the manager delegate so each action type has one implementation path."},{heading:"outgoing-conversations-and-redialing",content:"When the user starts a conversation from inside the app, the app should also report that conversation to the system. It creates a `StartConversationAction`, calls `manager.perform`, and handles the resulting action in the same delegate path used for system-initiated work."},{heading:"outgoing-conversations-and-redialing",content:"After conversations end, Recents and Spotlight can be used to redial when the app supports the start call intent. The intent is delivered to the app's scene as an `NSUserActivity`. Apple also recommends donating the app's own intent at the end of each conversation so Siri can surface the app's representation."},{heading:"outgoing-conversations-and-redialing",content:"Use stable handles instead of transient tokens if the conversation should support redialing from Recents."},{heading:"outgoing-conversations-and-redialing",content:"Set `includesConversationInRecents` to `false` for ephemeral one-time rooms that should not be redialable."},{heading:"outgoing-conversations-and-redialing",content:"Add `StartConversationAction` handling to the same delegate switch used for join and end actions."},{heading:"create-and-perform-a-start-action",content:"Starts an outgoing conversation from app UI while letting the system update its conversation UI and forward the work to the delegate."},{heading:"group-conversations-membership-and-merging",content:"Group conversations distinguish between everyone invited and everyone currently active. `members` is the full invited list, while `activeRemoteMembers` is the subset with media actively flowing. Keeping both updated lets the system show accurate group state."},{heading:"group-conversations-membership-and-merging",content:"For advanced call management, declare capabilities such as `.merging` and `.unmerging`. When the user merges conversations from system UI, the delegate receives a `MergeConversationAction` with the UUIDs of both conversations; the app combines its media streams, reports updated membership, and fulfills or fails the action."},{heading:"group-conversations-membership-and-merging",content:"Build group start actions with handles for all invited remote participants."},{heading:"group-conversations-membership-and-merging",content:"Report `localMember`, `members`, `activeRemoteMembers`, and capabilities whenever group state changes."},{heading:"group-conversations-membership-and-merging",content:"Merging and unmerging follow the same action/delegate pattern as join, end, and start."},{heading:"group-conversations-membership-and-merging",content:"Validate both source and target conversations before attempting to merge."},{heading:"report-group-membership-updates",content:"Keeps system UI synchronized with invited members, active remote members, and supported group capabilities."},{heading:"handle-merge-actions",content:"Validates both conversations, combines media streams asynchronously, reports the merged update, and fulfills the action."},{heading:"resources",content:"Initiating VoIP conversations with LiveCommunicationKit"},{heading:"resources",content:"Responding to VoIP Notifications from PushKit"},{heading:"resources",content:"LiveCommunicationKit"},{heading:"related-sessions",content:"Get to know App Intents"},{heading:"related-sessions",content:"Enhance voice communication with Push to Talk"}],headings:[{id:"tldr",content:"TL;DR"},{id:"why-adopt-livecommunicationkit",content:"Why adopt LiveCommunicationKit"},{id:"conversation-lifecycle-and-manager-architecture",content:"Conversation lifecycle and manager architecture"},{id:"set-up-a-conversation-manager",content:"Set up a conversation manager"},{id:"incoming-conversations-with-pushkit",content:"Incoming conversations with PushKit"},{id:"report-an-incoming-conversation-from-a-voip-push",content:"Report an incoming conversation from a VoIP push"},{id:"handle-a-join-action",content:"Handle a join action"},{id:"outgoing-conversations-and-redialing",content:"Outgoing conversations and redialing"},{id:"create-and-perform-a-start-action",content:"Create and perform a start action"},{id:"group-conversations-membership-and-merging",content:"Group conversations, membership, and merging"},{id:"report-group-membership-updates",content:"Report group membership updates"},{id:"handle-merge-actions",content:"Handle merge actions"},{id:"resources",content:"Resources"},{id:"related-sessions",content:"Related Sessions"}]},d=[{depth:2,url:"#tldr",title:i.jsx(i.Fragment,{children:"TL;DR"})},{depth:2,url:"#why-adopt-livecommunicationkit",title:i.jsx(i.Fragment,{children:"Why adopt LiveCommunicationKit"})},{depth:2,url:"#conversation-lifecycle-and-manager-architecture",title:i.jsx(i.Fragment,{children:"Conversation lifecycle and manager architecture"})},{depth:3,url:"#set-up-a-conversation-manager",title:i.jsx(i.Fragment,{children:"Set up a conversation manager"})},{depth:2,url:"#incoming-conversations-with-pushkit",title:i.jsx(i.Fragment,{children:"Incoming conversations with PushKit"})},{depth:3,url:"#report-an-incoming-conversation-from-a-voip-push",title:i.jsx(i.Fragment,{children:"Report an incoming conversation from a VoIP push"})},{depth:3,url:"#handle-a-join-action",title:i.jsx(i.Fragment,{children:"Handle a join action"})},{depth:2,url:"#outgoing-conversations-and-redialing",title:i.jsx(i.Fragment,{children:"Outgoing conversations and redialing"})},{depth:3,url:"#create-and-perform-a-start-action",title:i.jsx(i.Fragment,{children:"Create and perform a start action"})},{depth:2,url:"#group-conversations-membership-and-merging",title:i.jsx(i.Fragment,{children:"Group conversations, membership, and merging"})},{depth:3,url:"#report-group-membership-updates",title:i.jsx(i.Fragment,{children:"Report group membership updates"})},{depth:3,url:"#handle-merge-actions",title:i.jsx(i.Fragment,{children:"Handle merge actions"})}
1,{depth:2,url:"#resources",title:i.jsx(i.Fragment,{children:"Resources"})},{depth:2,url:"#related-sessions",title:i.jsx(i.Fragment,{children:"Related Sessions"})}];function a(s){const e={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",span:"span",ul:"ul",...s.components},{Tldr:n}=e;return n||t("Tldr"),i.jsxs(i.Fragment,{children:[i.jsx(e.p,{children:i.jsx(e.a,{href:"https://developer.apple.com/videos/play/wwdc2026/226/",children:"Watch on Apple Developer"})}),`
2`,i.jsx(e.h2,{id:"tldr",children:"TL;DR"}),`
3`,i.jsx(n,{children:i.jsxs(e.ul,{children:[`
4`,i.jsxs(e.li,{children:["LiveCommunicationKit centers real-time communication around ",i.jsx(e.code,{children:"ConversationManager"}),", ",i.jsx(e.code,{children:"Conversation"}),", handles, capabilities, and delegate-delivered actions."]}),`
5`,i.jsxs(e.li,{children:["Incoming conversations use PushKit VoIP pushes, then must be reported to ",i.jsx(e.code,{children:"ConversationManager"})," before the push delegate method returns."]}),`
6`,i.jsxs(e.li,{children:["Outgoing conversations should be started with ",i.jsx(e.code,{children:"StartConversationAction"})," and routed through the same delegate path as system-initiated actions."]}),`
7`,i.jsxs(e.li,{children:["Group conversations require accurate ",i.jsx(e.code,{children:"members"})," and ",i.jsx(e.code,{children:"activeRemoteMembers"}),", and advanced flows like merge and unmerge are handled through capabilities and delegate actions."]}),`
8`]})}),`
9`,i.jsx(e.h2,{id:"why-adopt-livecommunicationkit",children:"Why adopt LiveCommunicationKit"}),`
10`,i.jsxs(e.p,{children:["LiveCommunicationKit gives real-time communication apps system-integrated conversation UI, including full-screen Lock Screen presentation, Dynamic Island support, Phone app Recents, contact details, Spotlight, and Siri entry points where applicable. Apple positions it as the modern replacement for traditional approaches such as ",i.jsx(e.code,{children:"CXProvider"})," for apps that need richer live conversation integration."]}),`
11`,i.jsx(e.p,{children:"A conversation represents one live interaction and exists only while participants are in it. It is described by handles for participants and capabilities for what the conversation supports."}),`
12`,i.jsxs(e.ul,{children:[`
13`,i.jsx(e.li,{children:"Handles have a kind, value, and display name; supported kinds include phone number, email address, and generic string."}),`
14`,i.jsx(e.li,{children:"Phone number and email handles let the system match saved contacts and show contact names and photos."}),`
15`,i.jsx(e.li,{children:"Display names are used when a handle cannot be matched to a contact."}),`
16`,i.jsx(e.li,{children:"Capabilities control which system UI controls and gestures are enabled, such as video, pausing, merging, and unmerging."}),`
17`]}),`
18`,i.jsx(e.h2,{id:"conversation-lifecycle-and-manager-architecture",children:"Conversation lifecycle and manager architecture"}),`
19`,i.jsxs(e.p,{children:["Apps drive the lifecycle through a single ",i.jsx(e.code,{children:"ConversationManager"})," and its delegate. The app reports new conversations and conversation events through the manager, while the system sends user-initiated work back to the app as ",i.jsx(e.code,{children:"ConversationAction"})," values through the delegate."]}),`
20`,i.jsx(e.p,{children:"The lifecycle moves from ringing/idle, to joining while app setup completes, to joined when audio or video capture begins, and finally through leaving/left when the app tears down media and connections. Pausing, resuming, route changes, and capability changes are also reported through manager events so the system UI stays synchronized."}),`
21`,i.jsxs(e.ul,{children:[`
22`,i.jsxs(e.li,{children:["Create the ",i.jsx(e.code,{children:"ConversationManager"})," for the lifetime of the app, typically at launch."]}),`
23`,i.jsx(e.li,{children:"Configure ringtone, icon image data, group limits, Recents behavior, video supp
23ort, and supported handle types."}),`
24`,i.jsx(e.li,{children:"Use one delegate action path for interactions from both system UI and in-app UI."}),`
25`,i.jsx(e.li,{children:"Enable Audio and Voice over IP background modes for conversations that continue while backgrounded or locked."}),`
26`]}),`
27`,i.jsx(e.h3,{id:"set-up-a-conversation-manager",children:"Set up a conversation manager"}),`
28`,i.jsx(e.p,{children:"Configures how the app's conversations appear and behave across system UI, then installs the delegate that handles actions."}),`
29`,i.jsx(i.Fragment,{children:i.jsx(e.pre,{className:"shiki shiki-themes github-light github-dark",style:{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},tabIndex:"0",icon:'<svg viewBox="0 0 24 24"><path d="M7.508 0c-.287 0-.573 0-.86.002-.241.002-.483.003-.724.01-.132.003-.263.009-.395.015A9.154 9.154 0 0 0 4.348.15 5.492 5.492 0 0 0 2.85.645 5.04 5.04 0 0 0 .645 2.848c-.245.48-.4.972-.495 1.5-.093.52-.122 1.05-.136 1.576a35.2 35.2 0 0 0-.012.724C0 6.935 0 7.221 0 7.508v8.984c0 .287 0 .575.002.862.002.24.005.481.012.722.014.526.043 1.057.136 1.576.095.528.25 1.02.495 1.5a5.03 5.03 0 0 0 2.205 2.203c.48.244.97.4 1.498.495.52.093 1.05.124 1.576.138.241.007.483.009.724.01.287.002.573.002.86.002h8.984c.287 0 .573 0 .86-.002.241-.001.483-.003.724-.01a10.523 10.523 0 0 0 1.578-.138 5.322 5.322 0 0 0 1.498-.495 5.035 5.035 0 0 0 2.203-2.203c.245-.48.4-.972.495-1.5.093-.52.124-1.05.138-1.576.007-.241.009-.481.01-.722.002-.287.002-.575.002-.862V7.508c0-.287 0-.573-.002-.86a33.662 33.662 0 0 0-.01-.724 10.5 10.5 0 0 0-.138-1.576 5.328 5.328 0 0 0-.495-1.5A5.039 5.039 0 0 0 21.152.645 5.32 5.32 0 0 0 19.654.15a10.493 10.493 0 0 0-1.578-.138 34.98 34.98 0 0 0-.722-.01C17.067 0 16.779 0 16.492 0H7.508zm6.035 3.41c4.114 2.47 6.545 7.162 5.549 11.131-.024.093-.05.181-.076.272l.002.001c2.062 2.538 1.5 5.258 1.236 4.745-1.072-2.086-3.066-1.568-4.088-1.043a6.803 6.803 0 0 1-.281.158l-.02.012-.002.002c-2.115 1.123-4.957 1.205-7.812-.022a12.568 12.568 0 0 1-5.64-4.838c.649.48 1.35.902 2.097 1.252 3.019 1.414 6.051 1.311 8.197-.002C9.651 12.73 7.101 9.67 5.146 7.191a10.628 10.628 0 0 1-1.005-1.384c2.34 2.142 6.038 4.83 7.365 5.576C8.69 8.408 6.208 4.743 6.324 4.86c4.436 4.47 8.528 6.996 8.528 6.996.154.085.27.154.36.213.085-.215.16-.437.224-.668.708-2.588-.09-5.548-1.893-7.992z" fill="currentColor" /></svg>',children:i.jsxs(e.code,{children:[i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"import"}),i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:" LiveCommunicationKit"})]}),`
30`,i.jsx(e.span,{className:"line"}),`
31`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"let"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" configuration "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"="}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" ConversationManager."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"Configuration"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("})]}),`
32`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    ringtoneName"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": "}),i.jsx(e.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:'"SampleRingtone.caf"'}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:","})]}),`
33`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    iconTemplateImageData"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": "}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"UIImage"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"named"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": "}),i.jsx(e.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:'"SampleIcon"'}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:")"}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"?"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"pngData"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}
33,children:"(),"})]}),`
34`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    maximumConversationGroups"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": "}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"1"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:","})]}),`
35`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    maximumConversationsPerConversationGroup"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": "}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"2"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:","})]}),`
36`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    includesConversationInRecents"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": "}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"true"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:","})]}),`
37`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    supportsVideo"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": "}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"true"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:","})]}),`
38`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    supportedHandleTypes"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}
38,children:": [.phoneNumber, .emailAddress]"})]}),`
39`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:")"})}),`
40`,i.jsx(e.span,{className:"line"}),`
41`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"let"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" manager "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"="}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" ConversationManager"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"configuration"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": configuration)"})]}),`
42`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"manager.delegate "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"="}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" self"})]})]})})}),`
43`,i.jsx(e.h2,{id:"incoming-conversations-with-pushkit",children:"Incoming conversations with PushKit"}),`
44`,i.jsxs(e.p,{children:["Incoming conversations are delivered with a Voice over IP push. The app decodes the payload, builds a ",i.jsx(e.code,{children:"Conversation.Update"})," with the caller handle and capabilities, and reports the new incoming conversation to the ",i.jsx(e.code,{children:"ConversationManager"}),". PushKit wakes the app when it is not already running."]}),`
45`,i.jsxs(e.p,{children:["A key constraint is that the app must report the conversation before the PushKit delegate method returns; otherwise the system will terminate the app. When the user answers, the system sends a ",i.jsx(e.code,{children:"JoinConversationAction"}),", and the app performs async media setup before fulfilling the action."]}),`
46`,i.jsxs(e.ul,{children:[`
47`,i.jsx(e.li,{children:"Include a stable conversation UUID and caller handle in the push payload."}),`
48`,i.jsxs(e.li,{children:["Report capabilities such as ",i.jsx(e.code,{children:".video"}),", ",i.jsx(e.code,{children:".pausing"}),", and ",i.jsx(e.code,{children:".merging"})," in the initial update when supported."]}),`
49`,i.jsx(e.li,{children:"In the join handler, verify the conversation exists, report connecting, set up media, report connected, then fulfill the action."}),`
50`,i.jsx(e.li,{children:"Fail actions promptly when the conversation is missing or setup fail
50s so the system can clean up."}),`
51`]}),`
52`,i.jsx(e.h3,{id:"report-an-incoming-conversation-from-a-voip-push",children:"Report an incoming conversation from a VoIP push"}),`
53`,i.jsx(e.p,{children:"Decodes the incoming VoIP push, constructs a conversation update, and reports it to the system."}),`
54`,i.jsx(i.Fragment,{children:i.jsx(e.pre,{className:"shiki shiki-themes github-light github-dark",style:{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},tabIndex:"0",icon:'<svg viewBox="0 0 24 24"><path d="M7.508 0c-.287 0-.573 0-.86.002-.241.002-.483.003-.724.01-.132.003-.263.009-.395.015A9.154 9.154 0 0 0 4.348.15 5.492 5.492 0 0 0 2.85.645 5.04 5.04 0 0 0 .645 2.848c-.245.48-.4.972-.495 1.5-.093.52-.122 1.05-.136 1.576a35.2 35.2 0 0 0-.012.724C0 6.935 0 7.221 0 7.508v8.984c0 .287 0 .575.002.862.002.24.005.481.012.722.014.526.043 1.057.136 1.576.095.528.25 1.02.495 1.5a5.03 5.03 0 0 0 2.205 2.203c.48.244.97.4 1.498.495.52.093 1.05.124 1.576.138.241.007.483.009.724.01.287.002.573.002.86.002h8.984c.287 0 .573 0 .86-.002.241-.001.483-.003.724-.01a10.523 10.523 0 0 0 1.578-.138 5.322 5.322 0 0 0 1.498-.495 5.035 5.035 0 0 0 2.203-2.203c.245-.48.4-.972.495-1.5.093-.52.124-1.05.138-1.576.007-.241.009-.481.01-.722.002-.287.002-.575.002-.862V7.508c0-.287 0-.573-.002-.86a33.662 33.662 0 0 0-.01-.724 10.5 10.5 0 0 0-.138-1.576 5.328 5.328 0 0 0-.495-1.5A5.039 5.039 0 0 0 21.152.645 5.32 5.32 0 0 0 19.654.15a10.493 10.493 0 0 0-1.578-.138 34.98 34.98 0 0 0-.722-.01C17.067 0 16.779 0 16.492 0H7.508zm6.035 3.41c4.114 2.47 6.545 7.162 5.549 11.131-.024.093-.05.181-.076.272l.002.001c2.062 2.538 1.5 5.258 1.236 4.745-1.072-2.086-3.066-1.568-4.088-1.043a6.803 6.803 0 0 1-.281.158l-.02.012-.002.002c-2.115 1.123-4.957 1.205-7.812-.022a12.568 12.568 0 0 1-5.64-4.838c.649.48 1.35.902 2.097 1.252 3.019 1.414 6.051 1.311 8.197-.002C9.651 12.73 7.101 9.67 5.146 7.191a10.628 10.628 0 0 1-1.005-1.384c2.34 2.142 6.038 4.83 7.365 5.576C8.69 8.408 6.208 4.743 6.324 4.86c4.436 4.47 8.528 6.996 8.528 6.996.154.085.27.154.36.213.085-.215.16-.437.224-.668.708-2.588-.09-5.548-1.893-7.992z" fill="currentColor" /></svg>',children:i.jsxs(e.code,{children:[i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"import"}),i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:" LiveCommunicationKit"})]}),`
55`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"import"}),i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:" PushKit"})]}),`
56`,i.jsx(e.span,{className:"line"}),`
57`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"final"}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" class"}),i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:" SamplePushHandler"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": "}),i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"NSObject"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:", "}),i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"PKPushRegistryDelegate "}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"{"})]}),`
58`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"    func"}),i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:" pushRegistry"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("})]}),`
59`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"        _"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" registry: PKPushRegistry,"})]}),`
60`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"        didReceiveIncomingVoIPPushWith"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" payload: PKPushPayload,"})]}),`
61`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"        metadata"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}
61,children:": PKVoIPPushMetadata"})]}),`
62`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"    ) "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"async"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" {"})]}),`
63`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"        guard"}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" let"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" (handle, uuid) "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"="}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" parseConversationPayload"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"from"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": payload) "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"else"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" { "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"return"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" }"})]}),`
64`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"        let"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" capabilities "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"="}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" [.video, .pausing, .merging]"})]}),`
65`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"        let"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" update "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"="}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" Conversation."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"Update"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"members"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": [handle], "}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"capabilities"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": capabilities)"})]}),`
66`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"        try?"}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" await"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" manager."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"reportNewIncomingConversation"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"uuid"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": uuid, "}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"update"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": update)"})]}),`
67`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"    }"})}),`
68`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"}"})})]})})}),`
69`,i.jsx(e.h3,{id:"handle-a-join-action",children:"Handle a join action"}),`
70`,i.jsx(e.p,{children:"Routes system-delivered actions through the manager delegate so each action type has one implementation path."}),`
71`,i.jsx(i.Fragment,{children:i.jsx(e.pre,{className:"shiki shiki-themes g
71ithub-light github-dark",style:{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},tabIndex:"0",icon:'<svg viewBox="0 0 24 24"><path d="M7.508 0c-.287 0-.573 0-.86.002-.241.002-.483.003-.724.01-.132.003-.263.009-.395.015A9.154 9.154 0 0 0 4.348.15 5.492 5.492 0 0 0 2.85.645 5.04 5.04 0 0 0 .645 2.848c-.245.48-.4.972-.495 1.5-.093.52-.122 1.05-.136 1.576a35.2 35.2 0 0 0-.012.724C0 6.935 0 7.221 0 7.508v8.984c0 .287 0 .575.002.862.002.24.005.481.012.722.014.526.043 1.057.136 1.576.095.528.25 1.02.495 1.5a5.03 5.03 0 0 0 2.205 2.203c.48.244.97.4 1.498.495.52.093 1.05.124 1.576.138.241.007.483.009.724.01.287.002.573.002.86.002h8.984c.287 0 .573 0 .86-.002.241-.001.483-.003.724-.01a10.523 10.523 0 0 0 1.578-.138 5.322 5.322 0 0 0 1.498-.495 5.035 5.035 0 0 0 2.203-2.203c.245-.48.4-.972.495-1.5.093-.52.124-1.05.138-1.576.007-.241.009-.481.01-.722.002-.287.002-.575.002-.862V7.508c0-.287 0-.573-.002-.86a33.662 33.662 0 0 0-.01-.724 10.5 10.5 0 0 0-.138-1.576 5.328 5.328 0 0 0-.495-1.5A5.039 5.039 0 0 0 21.152.645 5.32 5.32 0 0 0 19.654.15a10.493 10.493 0 0 0-1.578-.138 34.98 34.98 0 0 0-.722-.01C17.067 0 16.779 0 16.492 0H7.508zm6.035 3.41c4.114 2.47 6.545 7.162 5.549 11.131-.024.093-.05.181-.076.272l.002.001c2.062 2.538 1.5 5.258 1.236 4.745-1.072-2.086-3.066-1.568-4.088-1.043a6.803 6.803 0 0 1-.281.158l-.02.012-.002.002c-2.115 1.123-4.957 1.205-7.812-.022a12.568 12.568 0 0 1-5.64-4.838c.649.48 1.35.902 2.097 1.252 3.019 1.414 6.051 1.311 8.197-.002C9.651 12.73 7.101 9.67 5.146 7.191a10.628 10.628 0 0 1-1.005-1.384c2.34 2.142 6.038 4.83 7.365 5.576C8.69 8.408 6.208 4.743 6.324 4.86c4.436 4.47 8.528 6.996 8.528 6.996.154.085.27.154.36.213.085-.215.16-.437.224-.668.708-2.588-.09-5.548-1.893-7.992z" fill="currentColor" /></svg>',children:i.jsxs(e.code,{children:[i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"final"}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" class"}),i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:" SampleDelegate"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": "}),i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"ConversationManagerDelegate "}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"{"})]}),`
72`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"    func"}),i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:" conversationManager"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("})]}),`
73`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"        _"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" manager: ConversationManager,"})]}),`
74`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"        perform"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" action: ConversationAction"})]}),`
75`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"    ) {"})}),`
76`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"        switch"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" action {"})]}),`
77`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"        case"}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" let"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" action "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"as"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" JoinConversationAction"}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:":"})]}),`
78`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"            handleJoinAction"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"(action)"})]}),`
79`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"        default:"})}),`
80`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"            action."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"fail"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}
80,children:"()"})]}),`
81`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"        }"})}),`
82`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"    }"})}),`
83`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"}"})})]})})}),`
84`,i.jsx(e.h2,{id:"outgoing-conversations-and-redialing",children:"Outgoing conversations and redialing"}),`
85`,i.jsxs(e.p,{children:["When the user starts a conversation from inside the app, the app should also report that conversation to the system. It creates a ",i.jsx(e.code,{children:"StartConversationAction"}),", calls ",i.jsx(e.code,{children:"manager.perform"}),", and handles the resulting action in the same delegate path used for system-initiated work."]}),`
86`,i.jsxs(e.p,{children:["After conversations end, Recents and Spotlight can be used to redial when the app supports the start call intent. The intent is delivered to the app's scene as an ",i.jsx(e.code,{children:"NSUserActivity"}),". Apple also recommends donating the app's own intent at the end of each conversation so Siri can surface the app's representation."]}),`
87`,i.jsxs(e.ul,{children:[`
88`,i.jsx(e.li,{children:"Use stable handles instead of transient tokens if the conversation should support redialing from Recents."}),`
89`,i.jsxs(e.li,{children:["Set ",i.jsx(e.code,{children:"includesConversationInRecents"})," to ",i.jsx(e.code,{children:"false"})," for ephemeral one-time rooms that should not be redialable."]}),`
90`,i.jsxs(e.li,{children:["Add ",i.jsx(e.code,{children:"StartConversationAction"})," handling to the same delegate switch used for join and end actions."]}),`
91`]}),`
92`,i.jsx(e.h3,{id:"create-and-perform-a-start-action",children:"Create and perform a start action"}),`
93`,i.jsx(e.p,{children:"Starts an outgoing conversation from app UI while letting the system update its conversation UI and forward the work to the delegate."}),`
94`,i.jsx(i.Fragment,{children:i.jsx(e.pre,{className:"shiki shiki-themes github-light github-dark",style:{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},tabIndex:"0",icon:'<svg viewBox="0 0 24 24"><path d="M7.508 0c-.287 0-.573 0-.86.002-.241.002-.483.003-.724.01-.132.003-.263.009-.395.015A9.154 9.154 0 0 0 4.348.15 5.492 5.492 0 0 0 2.85.645 5.04 5.04 0 0 0 .645 2.848c-.245.48-.4.972-.495 1.5-.093.52-.122 1.05-.136 1.576a35.2 35.2 0 0 0-.012.724C0 6.935 0 7.221 0 7.508v8.984c0 .287 0 .575.002.862.002.24.005.481.012.722.014.526.043 1.057.136 1.576.095.528.25 1.02.495 1.5a5.03 5.03 0 0 0 2.205 2.203c.48.244.97.4 1.498.495.52.093 1.05.124 1.576.138.241.007.483.009.724.01.287.002.573.002.86.002h8.984c.287 0 .573 0 .86-.002.241-.001.483-.003.724-.01a10.523 10.523 0 0 0 1.578-.138 5.322 5.322 0 0 0 1.498-.495 5.035 5.035 0 0 0 2.203-2.203c.245-.48.4-.972.495-1.5.093-.52.124-1.05.138-1.576.007-.241.009-.481.01-.722.002-.287.002-.575.002-.862V7.508c0-.287 0-.573-.002-.86a33.662 33.662 0 0 0-.01-.724 10.5 10.5 0 0 0-.138-1.576 5.328 5.328 0 0 0-.495-1.5A5.039 5.039 0 0 0 21.152.645 5.32 5.32 0 0 0 19.654.15a10.493 10.493 0 0 0-1.578-.138 34.98 34.98 0 0 0-.722-.01C17.067 0 16.779 0 16.492 0H7.508zm6.035 3.41c4.114 2.47 6.545 7.162 5.549 11.131-.024.093-.05.181-.076.272l.002.001c2.062 2.538 1.5 5.258 1.236 4.745-1.072-2.086-3.066-1.568-4.088-1.043a6.803 6.803 0 0 1-.281.158l-.02.012-.002.002c-2.115 1.123-4.957 1.205-7.812-.022a12.568 12.568 0 0 1-5.64-4.838c.649.48 1.35.902 2.097 1.252 3.019 1.414 6.051 1.311 8.197-.002C9.651 12.73 7.101 9.67 5.146 7.191a10.628 10.628 0 0 1-1.005-1.384c2.34 2.142 6.038 4.83 7.365 5.576C8.69 8.408 6.208 4.743 6.324 4.86c4.436 4.47 8.528 6.996 8.528 6.996.154.085.27.154.36.213.085-.215.16-.437.224-.668.708-2.588-.09-5.548-1.893-7.992z" fill="currentColor" /></svg>',children:i.jsxs(e.code,{children:[i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"let"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" startAction "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"="}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" StartConversationAction"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("})]}),`
95`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    conversationUUID"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": "}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"UUID"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}
95,children:"(),"})]}),`
96`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    handles"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": ["})]}),`
97`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"        Handle"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("})]}),`
98`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"            type"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": .phoneNumber,"})]}),`
99`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"            value"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": "}),i.jsx(e.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:'"+1-650-555-0199"'}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:","})]}),`
100`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"            displayName"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": "}),i.jsx(e.span,{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},children:'"Ryan Notch"'})]}),`
101`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"        )"})}),`
102`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"    ],"})}),`
103`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    isVideo"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": "}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"false"})]}),`
104`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:")"})}),`
105`,i.jsx(e.span,{className:"line"}),`
106`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"try"}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" await"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" manager."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"perform"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"([startAction])"})]})]})})}),`
107`,i.jsx(e.h2,{id:"group-conversations-membership-and-merging",children:"Group conversations, membership, and merging"}),`
108`,i.jsxs(e.p,{children:["Group conversations distinguish between everyone invited and everyone currently active. ",i.jsx(e.code,{children:"members"})," is the full invited list, while ",i.jsx(e.code,{children:"activeRemoteMembers"})," is the subset with media actively flowing. Keeping both updated lets the system show accurate group state."]}),`
109`,i.jsxs(e.p,{children:["For advanced call management, declare capabilities such as ",i.jsx(e.code,{children:".merging"})," and ",i.jsx(e.code,{children:".unmerging"}),". When the user merges conversations from system UI, the delegate receives a ",i.jsx(e.code,{children:"MergeConversationAction"})," with the UUIDs of both conversations; the app combines its media streams, reports updated membership, and fulfills or fails the action."]}),`
110`,i.jsxs(e.ul,{children:[`
111`,i.jsx(e.li,{children:"Build group start actions with handles for all invited remote participants."}),`
112`,i.jsxs(e.li,{children:["Report ",i.jsx(e.code,{children:"localMember"}),", ",i.jsx(e.code,{children:"members"}),", ",i.jsx(e.code,{children:"activeRemoteMembers"}),", and capabilities whenever group state changes."]}),`
113`,i.jsx(e.li,{children:"Merging and unmerging follow the same action/delegate pattern as join, end, and start."}),`
114`,i.jsx(e.li,{children:"Validate both source and target conversations before attempting to merge."}),`
115`]}),`
116`,i.jsx(e.h3,{id:"report-group-membership-updates",children:"Report group membership updates"}),`
117`,i.jsx(e.p,{children:"Keeps system UI synchronized with invited members, active remote members, and supported group capabilities."}),`
118`,i.jsx(i.Fragment,{children:i.jsx(e.pre,{className:"shiki shiki-themes g
118ithub-light github-dark",style:{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},tabIndex:"0",icon:'<svg viewBox="0 0 24 24"><path d="M7.508 0c-.287 0-.573 0-.86.002-.241.002-.483.003-.724.01-.132.003-.263.009-.395.015A9.154 9.154 0 0 0 4.348.15 5.492 5.492 0 0 0 2.85.645 5.04 5.04 0 0 0 .645 2.848c-.245.48-.4.972-.495 1.5-.093.52-.122 1.05-.136 1.576a35.2 35.2 0 0 0-.012.724C0 6.935 0 7.221 0 7.508v8.984c0 .287 0 .575.002.862.002.24.005.481.012.722.014.526.043 1.057.136 1.576.095.528.25 1.02.495 1.5a5.03 5.03 0 0 0 2.205 2.203c.48.244.97.4 1.498.495.52.093 1.05.124 1.576.138.241.007.483.009.724.01.287.002.573.002.86.002h8.984c.287 0 .573 0 .86-.002.241-.001.483-.003.724-.01a10.523 10.523 0 0 0 1.578-.138 5.322 5.322 0 0 0 1.498-.495 5.035 5.035 0 0 0 2.203-2.203c.245-.48.4-.972.495-1.5.093-.52.124-1.05.138-1.576.007-.241.009-.481.01-.722.002-.287.002-.575.002-.862V7.508c0-.287 0-.573-.002-.86a33.662 33.662 0 0 0-.01-.724 10.5 10.5 0 0 0-.138-1.576 5.328 5.328 0 0 0-.495-1.5A5.039 5.039 0 0 0 21.152.645 5.32 5.32 0 0 0 19.654.15a10.493 10.493 0 0 0-1.578-.138 34.98 34.98 0 0 0-.722-.01C17.067 0 16.779 0 16.492 0H7.508zm6.035 3.41c4.114 2.47 6.545 7.162 5.549 11.131-.024.093-.05.181-.076.272l.002.001c2.062 2.538 1.5 5.258 1.236 4.745-1.072-2.086-3.066-1.568-4.088-1.043a6.803 6.803 0 0 1-.281.158l-.02.012-.002.002c-2.115 1.123-4.957 1.205-7.812-.022a12.568 12.568 0 0 1-5.64-4.838c.649.48 1.35.902 2.097 1.252 3.019 1.414 6.051 1.311 8.197-.002C9.651 12.73 7.101 9.67 5.146 7.191a10.628 10.628 0 0 1-1.005-1.384c2.34 2.142 6.038 4.83 7.365 5.576C8.69 8.408 6.208 4.743 6.324 4.86c4.436 4.47 8.528 6.996 8.528 6.996.154.085.27.154.36.213.085-.215.16-.437.224-.668.708-2.588-.09-5.548-1.893-7.992z" fill="currentColor" /></svg>',children:i.jsxs(e.code,{children:[i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"let"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" update "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"="}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" Conversation."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"Update"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("})]}),`
119`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    localMember"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": adam,"})]}),`
120`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    members"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": [david, ryan],"})]}),`
121`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    activeRemoteMembers"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": [david, ryan],"})]}),`
122`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    capabilities"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": [.merging, .pausing, .unmerging]"})]}),`
123`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:")"})}),`
124`,i.jsx(e.span,{className:"line"}),`
125`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"manager."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"reportConversationEvent"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("})]}),`
126`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"    ."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"conversationUpdated"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"(update),"})]}),`
127`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"    for"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": conversation"})]}),`
128`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:")"})})]})})}),`
129`,i.jsx(e.h3,{id:"handle-merge-actions",children:"Handle merge actions"}),`
130`,i.jsx(e.p,{children:"Validates both conversations, combines media streams asynchronously, reports the merged update, and fulfills the action."}),`
131`,i.jsx(i.Fragment,{children:i.jsx(e.pre,{className:"shiki shiki-themes g
131ithub-light github-dark",style:{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},tabIndex:"0",icon:'<svg viewBox="0 0 24 24"><path d="M7.508 0c-.287 0-.573 0-.86.002-.241.002-.483.003-.724.01-.132.003-.263.009-.395.015A9.154 9.154 0 0 0 4.348.15 5.492 5.492 0 0 0 2.85.645 5.04 5.04 0 0 0 .645 2.848c-.245.48-.4.972-.495 1.5-.093.52-.122 1.05-.136 1.576a35.2 35.2 0 0 0-.012.724C0 6.935 0 7.221 0 7.508v8.984c0 .287 0 .575.002.862.002.24.005.481.012.722.014.526.043 1.057.136 1.576.095.528.25 1.02.495 1.5a5.03 5.03 0 0 0 2.205 2.203c.48.244.97.4 1.498.495.52.093 1.05.124 1.576.138.241.007.483.009.724.01.287.002.573.002.86.002h8.984c.287 0 .573 0 .86-.002.241-.001.483-.003.724-.01a10.523 10.523 0 0 0 1.578-.138 5.322 5.322 0 0 0 1.498-.495 5.035 5.035 0 0 0 2.203-2.203c.245-.48.4-.972.495-1.5.093-.52.124-1.05.138-1.576.007-.241.009-.481.01-.722.002-.287.002-.575.002-.862V7.508c0-.287 0-.573-.002-.86a33.662 33.662 0 0 0-.01-.724 10.5 10.5 0 0 0-.138-1.576 5.328 5.328 0 0 0-.495-1.5A5.039 5.039 0 0 0 21.152.645 5.32 5.32 0 0 0 19.654.15a10.493 10.493 0 0 0-1.578-.138 34.98 34.98 0 0 0-.722-.01C17.067 0 16.779 0 16.492 0H7.508zm6.035 3.41c4.114 2.47 6.545 7.162 5.549 11.131-.024.093-.05.181-.076.272l.002.001c2.062 2.538 1.5 5.258 1.236 4.745-1.072-2.086-3.066-1.568-4.088-1.043a6.803 6.803 0 0 1-.281.158l-.02.012-.002.002c-2.115 1.123-4.957 1.205-7.812-.022a12.568 12.568 0 0 1-5.64-4.838c.649.48 1.35.902 2.097 1.252 3.019 1.414 6.051 1.311 8.197-.002C9.651 12.73 7.101 9.67 5.146 7.191a10.628 10.628 0 0 1-1.005-1.384c2.34 2.142 6.038 4.83 7.365 5.576C8.69 8.408 6.208 4.743 6.324 4.86c4.436 4.47 8.528 6.996 8.528 6.996.154.085.27.154.36.213.085-.215.16-.437.224-.668.708-2.588-.09-5.548-1.893-7.992z" fill="currentColor" /></svg>',children:i.jsxs(e.code,{children:[i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"extension"}),i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:" SampleDelegate"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" {"})]}),`
132`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"    func"}),i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:" handleMergeAction"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("}),i.jsx(e.span,{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},children:"_"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" action: MergeConversationAction) {"})]}),`
133`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"        let"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" sourceUUID "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"="}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" action.conversationUUID"})]}),`
134`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"        let"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" targetUUID "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"="}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" action.conversationUUIDToMergeWith"})]}),`
135`,i.jsx(e.span,{className:"line"}),`
136`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"        guard"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" manager.conversations."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"contains"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"where"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": { "}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"$0"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:".uuid "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"=="}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" sourceUUID }),"})]}),`
137`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"              manager.conversations."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"contains"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"where"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": { "}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"$0"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:".uuid "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"=="}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" targetUUID }) "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"else"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" {"})]}),`
138`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"            return"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" action."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"fail"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"}
138,children:"()"})]}),`
139`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"        }"})}),`
140`,i.jsx(e.span,{className:"line"}),`
141`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"        Task"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" {"})]}),`
142`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"            do"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" {"})]}),`
143`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"                let"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" update "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"="}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" try"}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:" await"}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:" combineStreams"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"("}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"from"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": sourceUUID, "}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"into"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": targetUUID)"})]}),`
144`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"                manager."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"reportConversationEvent"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"(."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"conversationUpdated"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"(update), "}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"for"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:": target)"})]}),`
145`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"                action."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"fulfill"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"()"})]}),`
146`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"            } "}),i.jsx(e.span,{style:{"--shiki-light":"#D73A49","--shiki-dark":"#F97583"},children:"catch"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:" {"})]}),`
147`,i.jsxs(e.span,{className:"line",children:[i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"                action."}),i.jsx(e.span,{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},children:"fail"}),i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"()"})]}),`
148`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"            }"})}),`
149`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"        }"})}),`
150`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"    }"})}),`
151`,i.jsx(e.span,{className:"line",children:i.jsx(e.span,{style:{"--shiki-light":"#24292E","--shiki-dark":"#E1E4E8"},children:"}"})})]})})}),`
152`,i.jsx(e.h2,{id:"resources",children:"Resources"}),`
153`,i.jsxs(e.ul,{children:[`
154`,i.jsx(e.li,{children:i.jsx(e.a,{href:"https://developer.apple.com/documentation/LiveCommunicationKit/initiating-voip-conversations-with-livecommunicationkit",children:"Initiating VoIP conversations with LiveCommunicationKit"})}),`
155`,i.jsx(e.li,{children:i.jsx(e.a,{href:"https://developer.apple.com/documentation/PushKit/responding-to-voip-notifications-from-pushkit",children:"Responding to VoIP Notifications from PushKit"})}),`
156`,i.jsx(e.li,{children:i.jsx(e.a,{href:"https://developer.apple.com/documentation/LiveCommunicationKit",children:"LiveCommunicationKit"})}),`
157`]}),`
158`,i.jsx(e.h2,{id:"related-sessions",children:"Related Sessions"}),`
159`,i.jsxs(e.ul,{children:[`
160`,i.jsx(e.li,{children:i.jsx(e.a,{href:"https://developer.apple.com/videos/play/wwdc2025/244",children:"Get to know App Intents"})}),`
161`,i.jsx(e.li,{children:i.jsx(e.a,{href:"https://developer.apple.com/videos/play/wwdc2022/10117",children:"Enhance voice communication with Push to Talk"})}),`
162`]})]})}function c(s={}){const{wrapper:e}=s.components||{};return e?i.jsx(e,{...s,children:i.jsx(a,{...s})}):a(s)}function t(s,e){throw new Error("Expected component `"+s+"` to be defined: you likely forgot to import, pass, or provide it.")}export{c as default,l as frontmatter,r as structuredData,d as toc};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.