Thanks for being a part of WWDC25!

How did we do? We’d love to know your thoughts on this year’s conference. Take the survey here

How to move from Share Extension to the main screen

My app is designed to share and import images with apps such as the File app. I created a program after looking at various information, but the app from which the images are shared does not work, and the screen cannot be moved to the main screen of my app. The program is as follows. How should I modify it?

import UIKit import MobileCoreServices import UniformTypeIdentifiers

class ShareViewController: UIViewController {

let suiteName: String = "group.com.valida.pettyGeneral"
let keyString: String = "share-general"

override func viewDidLoad() {
    var nameArray: [String] = [String]()
    let sharedDefaults: UserDefaults = UserDefaults(suiteName: self.suiteName)!
    
    guard let inputItem = self.extensionContext?.inputItems.first as? NSExtensionItem, let attachments = inputItem.attachments else {
        return
    }
    let identifier = UTType.image.identifier
    let imgAttachments = attachments.filter { $0.hasItemConformingToTypeIdentifier(identifier) }

    let dispatchGroup = DispatchGroup()

    for (no, itemProvider) in imgAttachments.enumerated() {
        dispatchGroup.enter()
        itemProvider.loadItem(forTypeIdentifier: identifier, options: nil) { [self] item, error in
            do {
                if let error = error {
                    throw error
                } else if let url = item as? URL {
                    let data = try Data(contentsOf: url)
                    
                    let fileManager = FileManager.default
                    let url = fileManager.containerURL(forSecurityApplicationGroupIdentifier: suiteName)
                    if let url = url?.appendingPathComponent(String(no)) {
                        try! data.write(to: url)
                    }
                    
                    nameArray.append(String(no))
                }
                do { dispatchGroup.leave() }
            } catch {
                print("Error")
                do { dispatchGroup.leave() }
            }
        }
    }
    dispatchGroup.notify(queue: .main) { [self] in
        // 全ての画像を保存
        sharedDefaults.set(nameArray, forKey: self.keyString)
        sharedDefaults.synchronize()
        // メニュー画面に移動する
        openUrl(url: URL(string: "container-general://"))
        self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
    }

}

//#selector(openURL(_:))はこの関数がないと作れない
@objc func open(_ url: URL) {}

func openUrl(url: URL?) {
    let selector = #selector(open(_ : ))
    var responder = (self as UIResponder).next
    while let r = responder, !r.responds(to: selector) {
        responder = r.next
    }
    _ = responder?.perform(selector, with: url)
}

func openContainerApp() {
    let url = URL(string: "container-general://") // カスタムスキームを作って指定する
    var responder: UIResponder? = self
    while responder != nil {
        if let application = responder as? UIApplication {
            let selector = sel_registerName("openURL:")
            application.perform(selector, with: url)
            break
        }
        responder = responder?.next
    }
}    

}

How to move from Share Extension to the main screen
 
 
Q