When you open iMessages, click on the compose icon top right. Add two recipients. Then click on the application icon (in this case my app), below the text entry field in the application list tray( same place as the appstore icon and other apps like gif, apple pay, etc.
I was able to create a test app that reproduces this problem, with what I think is the minimal amount of code to demonstrate. Hope this invites a solution!
Code Block //// MessagesViewController.swift// testGroupSend MessagesExtension//import UIKitimport Messagesimport osclass MessagesViewController: MSMessagesAppViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } // MARK: - Conversation Handling func composeSelectionMsg(on conversation: MSConversation, in session: MSSession) -> MSMessage { let layout = MSMessageTemplateLayout() layout.caption = "caption..." let message = MSMessage(session: session) message.layout = layout message.summaryText = "summary text..." var components = URLComponents() var queryItems = [URLQueryItem]() queryItems.append(URLQueryItem(name: "MessageType1", value: "msgType")) queryItems.append(URLQueryItem(name: "Encode-Name", value: "Encode-Value")) components.queryItems = queryItems message.url = components.url! return message } func submitMessage() { guard let conversation = activeConversation else { os_log("submitMessage(): guard on conversation falied!", log: .default, type: .debug) return } var session : MSSession if let tSess = conversation.selectedMessage?.session { session = tSess os_log("submitMessage() got a session!...", log: .default, type: .debug) } else { os_log("###### submitMessage() did NOT get a session, creating new MSSession() #####", log: .default, type: .debug) session = MSSession() } var message: MSMessage message = composeSelectionMsg(on: conversation, in: session) // conversation.insert(message) { error in conversation.send(message) { error in if let error = error { os_log("submitMessage(): initial send error: %@", log: .default, type: .debug, error.localizedDescription) } else { os_log("submitMessage(): initial send success!", log: .default, type: .debug) } } } fileprivate func loadContentView() { os_log("loadContentView()...", log: .default, type: .debug) let childViewCtrl = ContentViewHostController() childViewCtrl.delegate = self childViewCtrl.view.layoutIfNeeded() // avoids snapshot warning? if let window = self.view.window { childViewCtrl.myWindow = window window.rootViewController = childViewCtrl } } override func willBecomeActive(with conversation: MSConversation) { loadContentView() } override func didResignActive(with conversation: MSConversation) { os_log("didResignActive()...", log: .default, type: .debug) }}////import SwiftUIimport Messagesimport osfinal class ContentViewHostController: UIHostingController<ContentView> { weak var delegate: ContentViewHostControllerDelegate? weak var myWindow: UIWindow? init() { super.init(rootView: ContentView()) rootView.submitMessage = submitMessage } required init?(coder: NSCoder) { super.init(coder: coder, rootView: ContentView()) } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) } func submitMessage() { os_log("ContentViewHostController::submitMessage(): submit message...", log: .default, type: .debug) delegate?.contentViewHostControllerSubmitMessage(self) }}struct ContentView: View { @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode> var submitMessage: (() -> Void)? var body: some View { VStack { VStack { HStack { Button(action: { self.cancel() } ) { Image(systemName: "chevron.left") } .padding() Spacer() Button(action: { self.submit() } ) { Text("Send...") } .padding() } // HStack } // VStack } // outside most VStack } // body private func cancel() { presentationMode.wrappedValue.dismiss() } private func submit() { submitMessage!() presentationMode.wrappedValue.dismiss() }} // ContentView////import SwiftUIimport Messagesimport osextension MessagesViewController: ContentViewHostControllerDelegate { // MARK: - ContenHost delegate func contentViewHostControllerSubmitMessage(_ controller: ContentViewHostController) { os_log("delegateSubmitMessage:...") submitMessage() }}////import SwiftUIimport Messagesprotocol ContentViewHostControllerDelegate: class { func contentViewHostControllerSubmitMessage( _ controller: ContentViewHostController )}