diff --git a/ShareExtension/Sources/ShareViewController.swift b/ShareExtension/Sources/ShareViewController.swift index e68ff61..b914d1f 100644 --- a/ShareExtension/Sources/ShareViewController.swift +++ b/ShareExtension/Sources/ShareViewController.swift @@ -130,15 +130,16 @@ class CustomShareViewController: UIViewController { }) } - @objc func openURL(_ url: URL) -> Bool { - self.hideExtensionWithCompletionHandler(completion: { _ in - self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil) - }) - + @objc @discardableResult private func openURL(_ url: URL) -> Bool { var responder: UIResponder? = self while responder != nil { if let application = responder as? UIApplication { - return application.perform(#selector(openURL(_:)), with: url) != nil + if #available(iOS 18.0, *) { + application.open(url, options: [:], completionHandler: nil) + return true + } else { + return application.perform(#selector(openURL(_:)), with: url) != nil + } } responder = responder?.next } diff --git a/ShareExtension/Sources/View/ShareExtensionPanelView.swift b/ShareExtension/Sources/View/ShareExtensionPanelView.swift index c84f702..fa95b6f 100644 --- a/ShareExtension/Sources/View/ShareExtensionPanelView.swift +++ b/ShareExtension/Sources/View/ShareExtensionPanelView.swift @@ -14,7 +14,7 @@ protocol ShareExtensionPanelViewDelegate: AnyObject { func didTapOpenApp() } -class ShareExtensionPanelView: UIView { +final class ShareExtensionPanelView: UIView { // MARK: - Properties weak var delegate: ShareExtensionPanelViewDelegate? diff --git a/iBox/Sources/SceneDelegate.swift b/iBox/Sources/SceneDelegate.swift index 6672167..eda5738 100644 --- a/iBox/Sources/SceneDelegate.swift +++ b/iBox/Sources/SceneDelegate.swift @@ -8,59 +8,61 @@ import UIKit class SceneDelegate: UIResponder, UIWindowSceneDelegate { - + var window: UIWindow? - - func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + func scene(_ scene: UIScene, + willConnectTo session: UISceneSession, + options connectionOptions: UIScene.ConnectionOptions + ) { guard let windowScene = (scene as? UIWindowScene) else { return } - + window = UIWindow(frame: windowScene.coordinateSpace.bounds) window?.windowScene = windowScene - + window?.overrideUserInterfaceStyle = window?.toUserInterfaceStyle(UserDefaultsManager.theme) ?? .unspecified window?.rootViewController = CustomLaunchScreenViewController(urlContext: connectionOptions.urlContexts.first) window?.makeKeyAndVisible() - } func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { if let urlContext = URLContexts.first, - let tabBarController = window?.rootViewController as? UITabBarController { - AddBookmarkManager.shared.navigateToAddBookmarkView(from: urlContext.url, in: tabBarController) + let tabBarController = window?.rootViewController as? UITabBarController { + AddBookmarkManager.shared.navigateToAddBookmarkView(from: urlContext.url, + in: tabBarController) } } - + func sceneDidDisconnect(_ scene: UIScene) { // Called as the scene is being released by the system. // This occurs shortly after the scene enters the background, or when its session is discarded. // Release any resources associated with this scene that can be re-created the next time the scene connects. // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). } - + func sceneDidBecomeActive(_ scene: UIScene) { // Called when the scene has moved from an inactive state to an active state. // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. } - + func sceneWillResignActive(_ scene: UIScene) { // Called when the scene will move from an active state to an inactive state. // This may occur due to temporary interruptions (ex. an incoming phone call). } - + func sceneWillEnterForeground(_ scene: UIScene) { // Called as the scene transitions from the background to the foreground. // Use this method to undo the changes made on entering the background. } - + func sceneDidEnterBackground(_ scene: UIScene) { // Called as the scene transitions from the foreground to the background. // Use this method to save data, release shared resources, and store enough scene-specific state information // to restore the scene back to its current state. - + // Save changes in the application's managed object context when the application transitions to the background. } - - + + }