diff --git a/AltStore/Operations/InstallAppOperation.swift b/AltStore/Operations/InstallAppOperation.swift index 0e4234e5..5c438d5a 100644 --- a/AltStore/Operations/InstallAppOperation.swift +++ b/AltStore/Operations/InstallAppOperation.swift @@ -162,7 +162,43 @@ final class InstallAppOperation: ResultOperation return } print("We are still installing after 3 seconds") - UIApplication.shared.perform(#selector(NSXPCConnection.suspend)) + UNUserNotificationCenter.current().getNotificationSettings { settings in + switch (settings.authorizationStatus) { + case .authorized, .ephemeral, .provisional: + print("Notifications are enabled") + + let content = UNMutableNotificationContent() + content.title = "Refreshing..." + content.body = "To finish refreshing, SideStore must be moved to the background, which it does by going to the home screen. Please reopen SideStore after it is done refreshing!" + let notification = UNNotificationRequest(identifier: Bundle.Info.appbundleIdentifier + ".FinishRefreshNotification", content: content, trigger: UNTimeIntervalNotificationTrigger(timeInterval: 2, repeats: false)) + UNUserNotificationCenter.current().add(notification) + + UIApplication.shared.perform(#selector(NSXPCConnection.suspend)) + + break + default: + print("Notifications are not enabled") + + let alert = UIAlertController(title: "Finish Refresh", message: "To finish refreshing, SideStore must be moved to the background. To do this, you can either go to the Home Screen manually or by hitting Continue. Please reopen SideStore after doing this.", preferredStyle: .alert) + alert.addAction(UIAlertAction(title: NSLocalizedString("Continue", comment: ""), style: .default, handler: { _ in + print("Going home") + UIApplication.shared.perform(#selector(NSXPCConnection.suspend)) + })) + + DispatchQueue.main.async { + let keyWindow = UIApplication.shared.windows.filter { $0.isKeyWindow }.first + if var topController = keyWindow?.rootViewController { + while let presentedViewController = topController.presentedViewController { + topController = presentedViewController + } + topController.present(alert, animated: true) + } else { + print("No key window? Let's just go home") + UIApplication.shared.perform(#selector(NSXPCConnection.suspend)) + } + } + } + } } } var attempts = 10