У меня есть приложение MacOS, которое является зарегистрированным пользовательским обработчиком URL. Я пытаюсь, чтобы он показывал спецификацию c NSViewController
, если приложение запускается через обработчик URL-адреса или обычные window
и ViewController
, если параметры не используются.
В моем AppDelegate.swift
У меня есть это:
func application(_ application: NSApplication, open urls: [URL]) {
AppDelegate.externalCaller = true;
NSApp.hide(self)
let url: URL = urls[0];
// Process the URL.
let components = NSURLComponents(url: url, resolvingAgainstBaseURL: true);
let method = components?.host;
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
if (method == "DO_STH") {
// do something with no window
NSApplication.shared.windows.last?.close();
} else if (method == "DO_STH_2") {
// do something with no window
NSApplication.shared.windows.last?.close();
} else if (method == "PROCESS_STUFF") {
// Show window
DispatchQueue.main.async {
let mainStoryboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: nil);
let restoringViewController = mainStoryboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("restoringData")) as! RestoringViewController;
if let window = NSApp.mainWindow {
window.contentViewController = restoringViewController;
}
NSApp.activate(ignoringOtherApps: true);
AppDelegate.restoreData();
}
}
}
}
}
Проблема в том, что к моменту запуска NSApp.hide(self)
уже есть окно, видимое со стандартным viewController, создающее некоторый эффект мерцания.
Что такое лучший способ заставить приложение запускаться без видимого окна по умолчанию и показывать окно, только если оно не было запущено с каким-либо параметром URL, а затем по требованию, если существует указанный параметр c URL?